לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 07-05-2008, 02:09
  EthanDarkWarrior EthanDarkWarrior אינו מחובר  
 
חבר מתאריך: 04.05.08
הודעות: 32
עזרה צריך עזרה-ארגון טבלאות של מערכת פורומים בצורה מנורמלת, יעילה וחסכונית

שלום, אני איתן
אני צריך עזרה בארגון הטבלאות של מערכת פורומים שאני בונה..
כרגע מה שעשיתי זה טבלת משתמשים, טבלת הפורומים (רק הID והשם שלהם) ועד לפה הכל די מסתדר..
הפורומים שלי מאורגנים בצורת אשכולות
השאלה-יש לי מספר אופציות לארגון מסד הנתונים שלי.. מהי הדרך הטובה ביותר?

1. לכל פורום לפתוח טבלה ושם יופיעו כל ההודעות של הפורום. מבנה:
פורום1(מספר_אשכול,מספר_הודעה,טקסט_הודעה,שולח_ההודע ה)
.
.
פורוםk(מספר_אשכול,מספר_הודעה,טקסט_הודעה,שולח_ההודע ה)
-אני לא אוהב את הדרך הזאת כי היא מאוד לא יעילה מבחינת זמן ריצה..
אם אני רוצה להציג את כל ההודעות של אשכול 5 למשל אני צריך לעבור בדרך גם על אשכולות אחרים.

2.דרך מטורפת שאני מימשתי מתוך נואשות לזמן ריצה קצר ביותר וחוסר איכפתיות מוחלט לבזבוז שטח על הHD:
פורום1(מספר_אשכול,שם_אשכול,פותח האשכול)
אשכול1(מספר_הודעה,טקסט_הודעה,שולח_ההודעה,מתי_נשלחה ?)

באופן דומה לכל פורום יש טבלה שבה מצויינים הרבה אשכולות וכל אשכול כזה הוא טבלה בעצמה שמכילה את ההודעות השייכות לאותו אשכול.
לדעתי הדרך הזאת מאוד בזבזנית בHD.. אז גם את זאת אני לא כל כך אוהב..

אשמח לשמוע את דעתכם המקצועית
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 07-05-2008, 11:06
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
למה להסתבך?
בתגובה להודעה מספר 1 שנכתבה על ידי EthanDarkWarrior שמתחילה ב "צריך עזרה-ארגון טבלאות של מערכת פורומים בצורה מנורמלת, יעילה וחסכונית"

א) הדרך השניה לא תתרום לזמן ריצה גבוה כשיוצרים אשכול חדש

ו- ב) הנה הדרך שבה עושים את זה:
טבלת פורומים עם שדות
id אינדקס, Auto Incerment
name שם הפורום
ופה מה שבא לך, תלוי מה אתה רוצה בפורום

טבלת הודעות:
id אינדקס, Auto Incerment
parnetId ה-id של ההודעה שמעליה, בין אם זה פורום משורשר או לא צריך את זה, וכמובן, אם זה ההודעה הראשונה באשכול, ה- parentId יהיה שווה ל-0
forumId לאיזה פורום שייכת ההודעה?
title- כותרת ההודעה
content-תוכן ההודעה

זה הכי בסיסי, אתה יכול להוסיף userid שיהיה בו ה-id של המשתמש וכו', אני יוצא מנקודת הנחה שכבר סיכמת מה אתה רוצה.

עכשיו, כשנכנסים לפורום, אתה שולף את כל ההודעות שה-forumId שלהם הוא ה-id של הפורום, וה-parentId שלהם הוא 0, כלומר ההודעות הראשונות.

כשאתה נכנס לאשכול, אתה שולף את ההודעת שה-Id שלהם הוא ה-id של ההודעה הראשונה, או שה-parentId שלהם הוא של ההודעה הראשונה.

וככה זה הולך, ומקווה שזה היה ברור כי קצת הסתבכתי עם עצמי
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 07-05-2008, 11:15
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
בתגובה להודעה מספר 1 שנכתבה על ידי EthanDarkWarrior שמתחילה ב "צריך עזרה-ארגון טבלאות של מערכת פורומים בצורה מנורמלת, יעילה וחסכונית"

אני חושב שהדרך ה"רגילה" היא הכי טובה... [ כלומר, לא מה שהצעת ]

עכשיו שמתי לב שנדב הגיב אבל בכל זאת אמשיך

בעיקרון מה שאתה צריך זה 3 טבלאות:
1. טבלה המכילה את שמות הפורומים, עם מספרי זהות שלהם (id).
2. טבלה המכילה את האשכולות שבכל הפורומים, כאשר לכל אשכול יש שיוך לפורום המתאים ע"פ id של הפורום.
3. טבלה המכילה את כל ההודעות שבכל האשכולות שבכל הפורומים, כאשר לכל הודעה יש שיוך ל-id של האשכול המתאים.

וזהו.

דברים נוספים שיכולים להשפיע על זמן הריצה שלך זה כתיבת שאילתות לא יעילות, ו\או שרת חלש יחסית.

דבר נוסף,ב-2 הדרכים שהצעת אין בזבזנות של ה-HD, כי לפתוח טבלה או טור זה סה"כ כמו שאתה פותח תיקייה על המחשב. זה לא מבזבז מקום...

בכל אופן, לדעתי תמיד צריך לשים את זמן הריצה במקום הראשון בסדר העדיפויות. בנוגע למקום ב-HD - תמיד אפשר לקנות עוד במידה ותצטרך...ואם תצטרך - סימן שהאתר שלך מצליח וזה כבר לא תהיה בעיה בשבילך עניין הקניית מקום ב-HD.

נערך לאחרונה ע"י DCD בתאריך 07-05-2008 בשעה 11:20.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 07-05-2008, 13:32
  EthanDarkWarrior EthanDarkWarrior אינו מחובר  
 
חבר מתאריך: 04.05.08
הודעות: 32
לא נראה לי יעיל
בתגובה להודעה מספר 5 שנכתבה על ידי DCD שמתחילה ב "אני חושב שהדרך ה"רגילה" היא..."

"בעיקרון מה שאתה צריך זה 3 טבלאות:
1. טבלה המכילה את שמות הפורומים, עם מספרי זהות שלהם (id).
2. טבלה המכילה את האשכולות שבכל הפורומים, כאשר לכל אשכול יש שיוך לפורום המתאים ע"פ id של הפורום.
3. טבלה המכילה את כל ההודעות שבכל האשכולות שבכל הפורומים, כאשר לכל הודעה יש שיוך ל-id של האשכול המתאים."

הדרך הזאת בסדר.. והיא די חמודה.. כאילו אתה מתכוון לחלוקה לוגית של ההודעות לאשכולות ולא חלוקה פיזית..
הבעיה שלי פה היא שאם אני רוצה לקחת הודעות של אשכול ספציפי (ואני עושה את זה כל הזמן) אז זמן הריצה יהיה גבוה כי זה צריך לעבור על כל טבלת האשכולות ועבור כל אשכול צריך לעבור כל כל ההודעות שקיימות בבסיס נתונים שלי.. זה נראה לי זמן ריצה גדול מדי..
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 07-05-2008, 17:34
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
בתגובה להודעה מספר 8 שנכתבה על ידי EthanDarkWarrior שמתחילה ב "תגובה"

אז אין בעיה, חיים קשים ביקשת:

כיוון שאנו עוסקים באיחסון מידע רב ודומה בצורה כזו שיהיה קל לשלוף אותו מהר, לדעתי הדרך הכי יעילה שחשבתי עליה היא כדלקמן (כרגע אתייחס להודעות, ולא לאשכולות או פורומים):

צור DB באופן דינאמי, שבו, ובכל הבאים אחריו, יהיה X (מייצג מספר מקסימאלי) טבלאות המכילות הודעות.
בכל טבלה יהיה Y רשומות של הודעות.
במידה והטבלה הגיעה ל-Y הרשומות שלה, תצטרך ליצור טבלה חדשה, שבה תכניס את כל ההודעות הבאות.
במצב שבו ה-DB הגיע ל-X טבלאות של הודעות אצלו, צור DB חדש שגם בו יהיה עד X טבלאות של הודעות.

את כל הפעולות האלה תתעד בטבלה אחרת ב-DB של מערכת האתר, כדי שתדע מאיפה (מאיזה מסד) לשלוף איזו הודעה, ובנוסף בתוך ה-DB שנכנסת אליו, תיצור טבלה ייחודית שבה יהיה התיעוד של ההודעות המתאימות שאתה צריך לשלוף...

כל זה מאותו עיקרון היעילות שרצית - קבעתי גבול X למספר טבלאות ב-DB וגבול Y למספר הודעות בטבלה כדי למנוע חיפוש ארוך ומתיש. את הגבול הזה אתה תיקבע...

בנוגע לביזבוז HD אין לך מה לדאוג במקרה זה, כי כמו שאמרתי קודם זה כמו עניין של פתיחת תיקיות במחשב שלך.

אבל אני ממליץ שתלמד מניסיון של אחרים - תסתכל על מערכת vBulletin או IPB ותראה איך הן מסדרות אצלן את הטבלאות.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 07-05-2008, 18:16
  EthanDarkWarrior EthanDarkWarrior אינו מחובר  
 
חבר מתאריך: 04.05.08
הודעות: 32
בתגובה להודעה מספר 9 שנכתבה על ידי DCD שמתחילה ב "אז אין בעיה, חיים קשים..."

א. אני לא מכיר מקומות שבהם אפשר לראות את מסד הנתונים..
ב. ההצעה השנייה שלך דווקא יפה.. אני יכול ככה לעשות דפדוף מהיר מעמוד לעמוד (בהנחה שאני מפצל הודעות של כל אשכול ל-X הודעות).

ואם נחשוב על זה במונחים טבלאיים, יש לי:
1. טבלת פורומים
2. טבלת אשכול לפורום
3. טבלת אשכול_משנה_לאשכול
4. טבלת אשכול_משנה1,אשכול_משנה2_אשכול_משנה3

סה"כ עכשיו ההודעות תשבנה בתוך טבלאות של "אשכולי משנה" (4)
כל טבלת אשכול תצביע לטבלאות "אשכולי המשנה" שמרכיבים את האשכול (3)
וכל טבלת פורום (1) תצביע לטבלאות האשכולות שמרכיבים אותו(2)

לדוגמה: מערכת הפורומים שלי היא "מחשבים" (טבלת פורומים של מחשבים)
יש לי פורום "מסדי נתונים ושפת SQL" (טבלה של פורום מספר k)
בפנים יש לי אשכול בשם "צריך עזרה-ארגון טבלאות של מערכת פורומים בצורה מנורמלת, יעילה וחסכונית" (טבלה של אשכול מספר x)
ואנחנו כאילו נמצאים עכשיו באשכול המשנה שהID שלו 1 בתוך אותו אשכול..
ברגע שתהיינה 10 הודעות, ההודעה ה-11 תעבור כבר לטבלת אשכול משנה 2.

איך הרעיון עכשיו? זה לא נראה לי מסובך..
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 08-05-2008, 15:13
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 11 שנכתבה על ידי EthanDarkWarrior שמתחילה ב "מצאתי בעיה"

הדרך שהצעת נוגדת את חוקי הנרמול.
ציטוט:
במקרה של חלוקת נתונים מסוג אחד לטבלאות שונות ("משתמשי כרטיס ישראכרד", "משתמשי כרטיס דיינרס", "משתמשי כרטיס ויזה"...) או לשדות שונים ("קורס1", "קורס2", "קורס3"...). כל הפעולות של עבודה עם טבלאות יסתרבלו, מכיוון שיהיה צריך ליצור שאילתות, טפסים ודוחות שונים לכל טבלה, או לבצע חיפש על שדות רבים במקום על שדה אחד.

מה שעושים במקרה כזה, בהנחה שרוב הפעמים רואים את העמוד הראשון, שני, מקסימום חמישי, עושים טבלת ארכיון, נותנים לכל פורום 200 הודעות, לדוגמא, ואז כל פעם שמכניסים הודעה, מעבירים לארכיון את כל ההודעות הישנות.

בחיפוש משתמשים ב- JOIN, או שמעבירים את הכל לטבלה זמנית ומחפשים ממנה, לא יודע מה עדיף..

לגבי העמודים, תתן מספר שמצד אחד ייתן לך מספיק דפים, ומצד שני לא ידרוש יותר מידי, ותציג רק את ההודעות החדשות, אין מה לעשות, ביצועים עולים בדברים אחרים.

אפשרות אחרת זה כל פעם שזה מגיע למספר מסוים, להעביר דף שלם של הודעות (נראה לי עדיף) ואז שאתה מקבל עמוד, אתה סופר כמה הודעות זה כל העמודים שחדשים ממנו, ואם זה גדול מהמספר שהגדרת, תשלוף מהארכיון.
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 10-05-2008, 23:16
  EthanDarkWarrior EthanDarkWarrior אינו מחובר  
 
חבר מתאריך: 04.05.08
הודעות: 32
תגובה
בתגובה להודעה מספר 12 שנכתבה על ידי tnadav1 שמתחילה ב "הדרך שהצעת נוגדת את חוקי..."

לא תהיה שום בעיה בחיפוש.. עושים RecordSet אחד שלוקח את כל האשכולות של פורום מסויים
ואז בפנים עושים חיפוש בכל העמודים של אשכול מסויים שאני נמצא בו עם LIKE..
(לולאה בתוך לולאה)
הכל מסתדר בלי שום בעיה..
בקשר לנרמול-הכפילות מידע היחידה שיש היא במבנה הטבלאות עצמו.. לא בתוכן..
שים לב לציטוט.. הם התכוונו שהשדות משתנים מטבלה לטבלה ואז צריך לעשות משהו ייחודי לכל מצב..
אצלי, כל טבלה היא למעשה המשכיות של הטבלה הקודמת.. עם אותם שדות בדיוק.. אפשר ממש לעשות NATURAL JOINים..מה שאומר שכל הפעולות תהיינה אותו דבר בדיוק.
ובכל מקרה, אם הבחירה היא בין עבודה יפה לעבודה מהירה אז אני בוחר במהירה..
ופה באמת שאין מה לעשות כי פה כמו בהרבה מקרים אין שחור ולבן..
לך תסביר למשתמש שמחכה שעה שהדף יעלה שיכולת למנוע את זה אבל פשוט רצית להיות מסודר יותר ולעבוד באופן "נקי" ופשוט יותר..

נערך לאחרונה ע"י EthanDarkWarrior בתאריך 10-05-2008 בשעה 23:28.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 11-05-2008, 13:55
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 13 שנכתבה על ידי EthanDarkWarrior שמתחילה ב "תגובה"

זהו, שזה לא המצב, אתה פרנואידי בנושא...

אני לא יודע מה זה RecordSet אבל לולאה בתוך לולאה.. לא משהו שנשמע לי נחוץ..

אתה רוצה לחלק לטבלאות? אין בעיה, תיצור טבלאת ארכיון, אין סיבה שכל כמה זמן תמשוך עוד טבלה ועוד טבלה ותגיש עוד שאילתות ועוד שאילתות, ובגלל באג במערכת, תעשה אינסוף שאילתות, אם כבר מדברים על יעילות..

תעשה חיפוש עם NATRUAL JOIN, אין בעיה, אבל תדע שהאפשרות המהירה היא בדרך כלל האפשרות היפה.

תעשה שני טבלאות, לא צריך יותר, אחרת המערכת רק תהיה יותר מסורבל, משמע פחות מהירה כי היא עושה הרבה מאוד דברים.

גם שם כתוב שהנרמול זה לא תורה מסיני, אז בדוגמא שהם הביאו הרבה יותר נכון לעשות שדה שהוא סוג כרטיס האשראי.

במקרה הספיציפי הזה, טבלת ארכיון אחד תספיק, לא צריך יותר מזה.. במיילא רוב הפעמים שבהם תשלוף מהטבלאות האלה זה במקרה של חיפוש ואז אתה שולף מכל הטבלאות..

ולציטוט, כתוב: " במקרה של חלוקת נתונים מסוג אחד לטבלאות שונות" הודעות בפורום א' והודעות בפורום ב' זה אותו סוג נתונים..

כתוב שם בידיוק למה יש חוקי נרמול, לא בשביל קוד "נקי" ויפה, אלא בשביל יעילות ופתירת בעיות
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 11-05-2008, 15:36
  EthanDarkWarrior EthanDarkWarrior אינו מחובר  
 
חבר מתאריך: 04.05.08
הודעות: 32
בתגובה להודעה מספר 14 שנכתבה על ידי tnadav1 שמתחילה ב "זהו, שזה לא המצב, אתה..."

טוב עזוב.. שכנעת אותי..
זה מה שהחלטתי לעשות:
טבלת משתמשים(מזהה_שולח,שם_שולח,סיסמה)
טבלת פורומים(מספר_פורום,שם_פורום)
טבלת אשכול_לפורום(מספר_פורום,מספר_אשכול,שם_אשכול)
טבלת הודעות_לאשכול(מספר_אשכול,מספר_הודעה,טקסט_הודעה,תאר יך_שליחה,מזהה_שולח,מזהה_הורה)

*כאשר מזהה_הורה זה ההודעה שאליה ההודעה הנוכחית הגיבה
*את הPAGING אעשה בבנייה עצמה של האתר ולא בDATA BASE עצמו

אתה יכול בבקשה רק להסביר לי את הקטע עם הטבלת ארכיון? מה אני בעצם עושה? ברגע שיש לי נגיד 100 הודעות ואני כותב הודעה חדשה אז אני מעביר את ההודעה הישנה ביותר לארכיון ואז מוסיף את ההודעה החדשה במקומה?

נערך לאחרונה ע"י EthanDarkWarrior בתאריך 11-05-2008 בשעה 15:42.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 22:00

הדף נוצר ב 0.05 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר