Операции извлечения данных и соединения с сервером базы данных кластера - PullRequest
0 голосов
/ 24 мая 2010

Если какая-либо база данных распространяется на несколько серверов (например, Microsoft Sql Server), как мы можем выполнять операции объединения или фильтрации. В моем сценарии, если предположить:

  1. Одна таблица распределена по нескольким серверам. Как мы можем фильтровать строки на основе пользовательского ввода?
  2. Если главная таблица существует на одном сервере БД, а таблица транзакций - на другом сервере БД, как мы можем выполнять операции объединения?

Пожалуйста, дайте мне знать, как мы можем достичь этого и где я могу получить более подробную информацию об этом?

1 Ответ

0 голосов
/ 24 мая 2010

Я думаю, что вы не уверены в кластеризации SQL - она ​​не позволяет вам разбивать таблицы по нескольким серверам по-другому, чем если бы вы помещали разные таблицы в разные базы данных на одном сервере. Кластеризация используется для горячего аварийного переключения и резервирования.

Тем не менее, я думаю, что вижу, что вы спрашиваете - если вы хотите разделить базу данных между различными физическими серверами, проще всего было бы иметь VIEW, который объединяет эти таблицы вместе в одном месте, а затем Вы можете запросить и отфильтровать это. SQL Server достаточно умен (если имеются индексы и статистика для принятия решения), чтобы отправлять запрос в нужное место, если вы выбираете что-то из объединяющего представления.

Например, скажем, у вас есть два сервера - SERVER1 и SERVER2, у каждого из которых есть база данных - DATABASE - и у каждого сервера есть таблица - TABLE - с половиной данных в ней (между двумя серверами у вас есть каждая строка) , Просто создайте представление где-нибудь - либо сервер, либо где-то еще целиком - которое выглядит следующим образом, а затем добавьте связанные серверы для SERVER1 и SERVER2, которые позволяют SQL Server получать данные из удаленного расположения:

CREATE VIEW SomeView
    AS
SELECT *
  FROM SERVER1.DATABASE..TABLE
 UNION
   ALL
SELECT *
  FROM SERVER2.DATABASE..TABLE

Таким образом, у вас есть одно место для запроса, и вы всегда будете получать данные с любого сервера, а не запрашивать каждый сервер отдельно. Вы можете сделать это, даже если вы не хотите разделять отдельные таблицы - просто создайте представление для каждой таблицы, которую вы хотите переместить, и попросите представление проверить, на каком сервере таблица фактически находится.

Если я пропустил ваш фактический вопрос, пожалуйста, оставьте комментарий и некоторые разъяснения, и я буду рад добавить еще некоторые детали.

...