У меня есть Drupal Multisite, созданный сотнями сайтов. Я хочу, чтобы некоторые таблицы были разделены (например, баннеры и роли), поэтому мне не нужно обновлять сотни сайтов при смене баннера (например).
Я знаю, что это можно сделать, используя эти строки в settings.php:
$db_url = 'mysql://user:pwd@localhost/example_db'; $db_prefix = array( 'default' => '', 'users' => 'subsite2_', 'sessions' => 'subsite2_', 'authmap' => 'subsite2_', );
Но … что делать, если у меня есть несколько настроек базы данных? У меня есть одна база данных, в которой хранятся все общие таблицы. Поэтому в этой базе данных у меня есть таблица Banners – я хочу, чтобы все остальные сайты использовались.
Причина для множественной настройки базы данных состоит в том, что вся многоузловая установка состоит из сотен сайтов (и к концу этого года они будут тысячами) .. поэтому каждая база данных содержит только 20-40 сайтов. Я подозреваю, что многие из этих таблицы могут быть разделены.
надеюсь кто-то может помочь. благодаря!
Marco
Существует пошаговое руководство, чтобы настроить что-то подобное . Он предназначен для совместного использования только пользовательских данных, но этот принцип может быть расширен более или менее для всех таблиц. Обратите внимание, что он использует «трюк» в логике префикса таблицы, добавляя не только (или вовсе не) префикс имени таблицы, но также и / только селектор базы данных с использованием точечной нотации, например someDatabase.someTable
. Поэтому я не уверен, как это перевести на бэкэнд PostgreSQL. Кроме того, это означает, что вы по-прежнему ограничены одним сервером базы данных, так как существует (AFAIK) никакого механизма для использования двух разных подключений к базе данных в одном экземпляре Drupal.
В качестве альтернативы вы можете попытаться найти решение на стороне базы данных вещей путем «сопоставления» ваших общих таблиц в разные экземпляры базы данных с помощью какой-либо функции репликации / зеркалирования. Таким образом, вы можете использовать стандартную настройку Drupal multisite, делая совместное использование таблиц «за спиной» Drupal. Не знаете, как это работает, и какие последствия это может иметь для блокировки и других проблем параллелизма.
Эти два модуля, которые звучат так, как они могут помочь (цитаты взяты из их страниц проекта):
Данные :
Модуль данных помогает вам моделировать, управлять и запрашивать связанные наборы таблиц. Он предлагает интерфейс администрирования и API низкого уровня для управления таблицами и доступа к их содержимому. Модуль данных обеспечивает интеграцию представлений для отображения данных таблицы и интеграции поиска Drupal для поиска содержимого таблицы.
Мастер таблиц :
Мастер таблиц облегчает работу с таблицами базы данных:
- Он позволяет всплывать любую таблицу в базе данных Drupal по умолчанию через Views 2.
- Можно определить отношения между управляемыми таблицами, поэтому можно построить представления, объединяющие данные в таблицах.
- Он выполняет анализ таблиц, которыми он управляет, сообщает о пустых полях, диапазонах данных, диапазонах длин строк и т. Д.
- Он предоставляет API для других модулей для просмотра – включает их таблицы.
- Он предоставляет API для импорта данных в таблицы в базе данных по умолчанию Drupal (автоматически выполняет интеграцию представлений выше).
- Он поставляется с реализацией этого API для импорта файлов с разделителями-запятыми и табуляции.
Если вы используете mysql 5+, то представления mysql – хороший способ совместного использования данных на нескольких сайтах в drupal. Он не только позволяет иметь общий контент, но и отдельные сайты могут иметь собственный контент. devbee tutorial о представлениях mysql в drupal. содержит подробный учебник о том, как его реализовать, используя таксономию.