Intereting Posts
Многолинейный режим Regex не работает как ожидалось для дополнительной группы цитируя константы в php: «это MY_CONSTANT» Как захватить данные из сообщения в класс PHP-пространство имен PDO не найдено Как преобразовать формат времени, который я получил от PHP, в формат, который принимает обратный отсчет jQuery cakephp: как получить массив элементов из веб-формы Как удалить строку под заголовком и выше $ html в TCPDF? Поиск с двумя полями не обязательно Любая функция PHP, которая лишает свойства объекта, которые являются нулевыми? ajax вызывает с php-страницы – проверка на пустой массив как результат В PHP при отправке строк в базу данных следует позаботиться о незаконных символах с помощью htmlspecialchars () или использовать регулярное выражение? Как определить IP-адрес сервера в PHP Массив хранилища Laravel в сеансе Как лучше обрабатывать исключения в конструкторе? filter_var или настраиваемая функция проверки подлинности электронной почты в php

Общие таблицы Drupal, но из другой базы данных

У меня есть 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. содержит подробный учебник о том, как его реализовать, используя таксономию.