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

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



  #1  
ישן 14-12-2008, 23:00
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
דרך יעילה לשימוש בשני databases בו-זמנית בקוד

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

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

לפעמים אצטרך לקחת מידע מ-db1, אח"כ לקחת מידע מ-db2 ואז אולי לעדכן מידע מ-db1, להכניס מידע ל-db1, ואז להכניס מידע ל-db2...

מקוה שהבנתם.

בינתיים חשבתי על 3 דרכים (שהן לא בהכרח יעילות):
  • החלפה פשוטה בין המסדים בעזרת הפונקציה mysql_select_db. ההחלפה תיעשה כמובן לפני הרצת שאילתא לכל מסד בהתאמה...

  • לתת קידומת לשמות הטבלאות כאשר כותבים את השאילתא. ( ראו כאן: http://dev.mysql.com/doc/refman/5.0...qualifiers.html )
    דוגמא:
    קוד:
    db_name.tbl_name.col_name


    הפיתרון הזה לא נראה לי יישומי. אני ממש מעדיף משהו אחר.
    אחת הסיבות זה ששם ה-DB הוא ארוך מידי.

  • לפתוח 2 חיבורים למסד הנתונים ( ליצור שני instances של מחלקת ה-DB) כך שכל instace מייצג db שונה.
    הגישה לכל db תהיה כדוגמת הקוד הבא:
    קוד PHP:
     $db1 = new mysql($connection_details'db1');
    $db2 = new mysql($connection_details'db2');

    /* mysql Class connects to the database with mysql_connect()
    Example of the class:
     */

    class mysql
    {
      private 
    $currentLink;

      function 
    __construct(array $con_details,$database)
      {
        
    $this->resource mysql_connect(...);

        
    mysql_query('SET NAMES ...');
        
    mysql_select_db($database$this->currentLink);
        
    mysql_set_charset(..., $this->currentLink);
      }
    }

    $db1->query('...');
    $db2->query('...'); 


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

מהחיפוש בגוגל ניתן להבין שהפיתרון האחרון (פתיחת 2 חיבורים) הוא המומלץ ביותר.
ראו כאן:
http://stackoverflow.com/questions/...-with-php-mysql
https://www.zend.com/forums/index.p...49fa9a806f6bd7b

מצאתי גם את הבא:
http://www.experts-exchange.com/Web...Q_23955504.html
אבל המקרה שם קצת שונה בגלל שה-DB נמצא בשרת נפרד...


בסוף העדפתי להתייעץ איתכם.
איזה דרך לדעתכם הכי עדיפה? אולי מכירים דרך חלופית טובה יותר?

אשמח לשמוע.

תודה,
דור.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 25-12-2008, 17:54
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
עדכון: הפתרון שאשתמש בו
בתגובה להודעה מספר 1 שנכתבה על ידי dorM שמתחילה ב "דרך יעילה לשימוש בשני databases בו-זמנית בקוד"

כנראה בסופו של דבר אשתמש בפיתרון של הוספת prefix (קידומת) לשמות הטבלאות.
בזכות האופציה של הוספת כינוי לשמות אלמנטים (בעזרת פיסקת AS), זה יהיה הרבה יותר נוח.

הקידומת תישמר במשתנה השייך למחלקת ה-DB.

דוגמא:

קוד PHP:
 $db = new MySQL# Example on MySQL, but true for others too...

$db-query('SELECT tbl1.*, tbl2.* /* Using the alias name */
FROM '
.$db->tblPre.'long_table_name_1 tbl1
LEFT JOIN '
.$db->MtblPre.'long_table_name_2 tbl2');

/*
* The following values may be assigned (pay attention to the dots at the end of the string):
* $db->tblPre = 'databaseName_of_site.';
* $db->MtblPre = 'databaseName_of_global_sites.';
*/ 


בשאילתא הנ"ל לא כתבתי את המילה "AS", כי במקרה של הוספת כינוי לטבלה - אין צורך.(נכון ל-MYSQL).
ה-feature הזה של AS מיקל מאוד עבור הפיתרון הנ"ל.

תודה בכל זאת.

נערך לאחרונה ע"י dorM בתאריך 25-12-2008 בשעה 17:58.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

הדף נוצר ב 0.03 שניות עם 12 שאילתות

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

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