
14-12-2008, 23:00
|
|
מנהל
|
|
חבר מתאריך: 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 נמצא בשרת נפרד...
בסוף העדפתי להתייעץ איתכם.
איזה דרך לדעתכם הכי עדיפה? אולי מכירים דרך חלופית טובה יותר?
אשמח לשמוע.
תודה,
דור.
|