PDA

View Full Version : استفاده از Multidatabase Connection به صورت داینامیک



farshadtx
دوشنبه 22 مهر 1392, 08:47 صبح
سلام دوستان

من برای تولید یک نرم افزار که به عنوان مثال اکانتینگ دارد و اطلاعات مشتری کالا و مالی را در خود نگه میدارد دارم از Codeigniter‌استفاده میکنم .. ولی خوب برای جلوگیری از افزونگی داده راحتی در بک آپ و Load Balancing‌ برای اینکه کویری های سنگین استفاده نشود اطلاعات لایسنس را و یوزر ها را در یک دیتابیس واحد و بقیه اطلاعات مانند کالا مشتری و مالی را در دیتابیس جدا به ازای هر شرکت میسازم .
در این صورت نیاز دارم که وقتی یک یوزر به سایت وصل میشود به دو دیتابیس کانکت شوم .
یک ) دیتابیس واحد برای کنترل لایسنس و اطلاعات کاربری .
دو ) ارتباط با دیتابیس مخصوص همان شرکت .
در این حالت یک راه حل وجود دارد آنهم اینست که اطلاعات کلیه دیتابیس های در database.php تعریف شود که تصور کنید ۲۰۰۰ مشتری چه شلوغی ایجاد میکنه در این فایل و حالت بعد این هست که اگر بشود به صورت داینامیک اطلاعات کانفیگ دیتابیس دوم از دیتابیس اصلی در موقع لاگین واکشی شود ولی خوب چطور میشود به صورت داینامیک کانکشن زد به دیتا بیس و کانشکن را زنده نگه داشت ؟

http://ellislab.com/codeigniter/user-guide/database/connecting.html

و اینهم در نظر بگیرید که دیتابیس های دوم برای شرکت ها به صورت اتوماتیک تولید میشود و ساخت شرکت در کل در لایه نرم افزار صورت میگیرد نه به صورت دستی .

ممنون .

plague
دوشنبه 22 مهر 1392, 21:25 عصر
فکر میکنم بهتره که توی طراحی دیتبایستون تجدید نظر بکنید چون جدا کردن دیتبایس ها سود خاصی براتون نخواهد داشت

اول اینکه mysql چند ملیون رکورد رو هم میتونه به خوبی پرازش کنه (البته به شرط طراحی درست و آپتیمایز بودن کوئری ها و تنظیمات دیتبایس )

حداقلش اینه که میتونید برای هر اکانت یه تیبل جدا بسازید نه یک دیتابیس جدا !

در هر صورت برای لود کردن دیتبایس به صورت داینامیک از توی کد میتونی اینجوری عمل کنید



$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;

$this->load->model('Model_name', '', $config);
// or as gorelative notes, to access multiple databases:
$DB2 = $this->load->database($config, TRUE);