Доброго времени суток.
С момента выхода модуля "Веб кластер" стала актуальна задача выноса таблиц произвольного модуля в отдельную базу данных. Делается это по разным причинам, главные из которых повышение производительности и стабильности проекта в целом.
Всё делается в несколько этапов:[spoiler]
Т.е. мы говорим модулю "Веб кластер", что у нас есть модуль "Задачи", для примера, который может хранить свои таблицы в отдельной БД, перечисляем эти таблицы.
2. Модификация файла /bitrix/modules/<название_модуля>/include.phpВ список классов для autoload добавляем класс инсталлятора модуля:
3. В своём модуле, в методах, которые использовали объект $DB, нужно заменить:
на
4. После этого переустановите модуль без сохранения таблиц.
Результат работы:

Спасибо за внимание.
С момента выхода модуля "Веб кластер" стала актуальна задача выноса таблиц произвольного модуля в отдельную базу данных. Делается это по разным причинам, главные из которых повышение производительности и стабильности проекта в целом.
Всё делается в несколько этапов:[spoiler]
- Модифицируем файл /bitrix/modules/<название_модуля>/install/index.php
В метод InstallDB() добавляем строку:и сразу же объявляем функцию, которая возвращает объект инсталлятора и список таблиц модуля:RegisterModuleDependences("cluster", "OnGetTableList", "tasks", "tasks", "OnGetTableList");
function OnGetTableList() { return array( "MODULE" => new tasks, "TABLES" => array( "b_tasks" => "ID", "b_tasks_dependence" => "TASK_ID", "b_tasks_file" => "TASK_ID", "b_tasks_member" => "TASK_ID", "b_tasks_tag" => "TASK_ID", "b_tasks_template" => "ID", "b_tasks_viewed" => "TASK_ID", "b_tasks_log" => "TASK_ID", "b_tasks_elapsed_time" => "ID" ), ); } |
Т.е. мы говорим модулю "Веб кластер", что у нас есть модуль "Задачи", для примера, который может хранить свои таблицы в отдельной БД, перечисляем эти таблицы.
2. Модификация файла /bitrix/modules/<название_модуля>/include.phpВ список классов для autoload добавляем класс инсталлятора модуля:
CModule::AddAutoloadClasses( "tasks", array( "CTasks" => "classes/".$DBType."/task.php", "CTaskMembers" => "classes/".$DBType."/taskmembers.php", "CTaskTags" => "classes/".$DBType."/tasktags.php", "CTaskFiles" => "classes/".$DBType."/taskfiles.php", "CTaskDependence" => "classes/".$DBType."/taskdependence.php", "CTaskTemplates" => "classes/".$DBType."/tasktemplates.php", "CTaskSync" => "classes/general/tasksync.php", "CTaskReport" => "classes/general/taskreport.php", "CTasksWebService" => "classes/general/taskwebservice.php", "CTaskLog" => "classes/general/tasklog.php", "CTaskCalendar" => "classes/general/taskcalendar.php", "CTaskNotifications" => "classes/general/tasknotifications.php", "CTaskElapsedTime" => "classes/general/taskelapsed.php", "tasks" => "install/index.php" //!!!!! ) ); |
global $DB; |
$DB = CDatabase::GetModuleConnection('task'); |
4. После этого переустановите модуль без сохранения таблиц.
Результат работы:

Спасибо за внимание.