Разделенные базы данных MySQL

У меня вопрос по разделенным базам данных. Это вопрос в вопросе:

SELECT COUNT(*) FROM monies.link_monies_new lcn '
         . 'INNER JOIN products.link l ON lcn.link_id = l.link_id '
         . 'INNER JOIN products.products_format af ON l.product_format_id = af.product_format_id '
         . 'INNER JOIN products.products_categories ac ON af.product_category_id = ac.product_category_id '
         . 'WHERE lcn.click_time BETWEEN FROM_UNIXTIME(1311721200) AND FROM_UNIXTIME(1311807600) '
         . 'AND ac.product_category_id = 1

Проблема в том, что теперь деньги и базы данных будут находиться на разных серверах. Каково решение? Нужны ли мне два запроса? Я немного растерялся.

Спасибо!

1 ответ

http://dev.mysql.com/doc/refman/5.0/en/federated-use.html

Если я правильно понял ваш вопрос, вы хотите, чтобы запрос связывал таблицы между двумя базами данных, и базы данных будут расположены на отдельных серверах.

Предполагая, что вы выполняете запрос на сервере "monies", вы должны будете создавать федеративные таблицы на сервере "monies", указывая на сервер "products". Таким образом, ваши запросы продолжают работать, и MySQL волшебным образом управляет тем фактом, что они находятся на физически отдельных серверах.

Настройка производительности может быть проблематичной, но это самый простой способ сохранить ваши запросы такими, какие они есть сейчас.

Например, вы можете создать локальную базу данных на сервере "деньги" под названием "продукты"; в продуктах вы бы создали таблицу "ссылок":

CREATE TABLE link (
    link_id     INT(20) NOT NULL AUTO_INCREMENT,
    ....<<other columns from the link table>>
    PRIMARY KEY  (link_id)
)
ENGINE=FEDERATED

CONNECTION='mysql://fed_user@products_server:9306/products/link';

Затем вы можете выполнить запрос выше, ничего не меняя.

Другие вопросы по тегам