Использование связанных серверов для запросов между серверами баз данных?
У нас есть несколько серверов MSSQL 2005, которые содержат много информации. Мы хотим, чтобы разработчики нашей базы данных могли объединяться в этих бункерах максимально прозрачным и эффективным способом. Базы данных различаются по размеру, но в среднем составляют десятки миллионов строк и часто обновляются. Серверы физически расположены.
Я хочу иметь возможность создавать своего рода "единую логическую базу данных" из множества разных экземпляров сервера.
Связанные серверы - очевидный выбор, но меня беспокоит производительность и тесная связь запроса с конкретным сервером. Я слишком волнуюсь? У вас есть опыт поддержки этого решения?
Другие варианты, которые я взвешиваю, - это использование репликации, пакетов служб SSIS, сервисного брокера или физическое присоединение большего количества баз данных к одной из наших более крупных машин.
Кроме того, мне интересно, есть ли другие поставщики, которые предоставляют решение этой проблемы?
4 ответа
В SQL Server нет решения, обеспечивающего "прозрачный" доступ к данным. Для запросов по многим серверам требуются распределенные запросы (т. Е. Связанные серверы), а решение, развернутое с жестко закодированными запросами к связанным серверам во многих экземплярах, быстро достигнет цели из-за доступности и удобства обслуживания. Удивительно, насколько мобильными на самом деле являются базы данных: имена серверов меняются, происходит отработка отказа, базы данных перемещаются по причинам балансировки нагрузки. Учитывая тесно связанный характер DQ, это на самом деле не работает.
Другие крупные развертывания подошли к этому, перейдя на SOA и полагаясь на обмен сообщениями, см. MySpace использует SQL Server Service Broker для защиты целостности 1 петабайта данных. Это подразумевает серьезное изменение парадигмы в программировании, и то, как человек подходит к решению, существующие приложения, использующие запросы T-SQL, не будут магически прозрачно работать на "ферме" серверов.
Похоже, вы ищете "Центральные серверы управления", новую для SQL 2008 функцию.
Вот официальный документальный документ: http://technet.microsoft.com/en-us/library/bb895144.aspx
Вот блог с примером: http://www.mssqltips.com/sqlservertip/1767/execute-sql-server-query-on-multiple-servers-at-the-same-time/
Ваше решение заключается в интеграции сервисного брокера в ваше приложение. Похоже, вас может заинтересовать пример интеграции данных в реальном времени. Вы также можете создавать представления, которые охватывают экземпляры сервера SQL. в зависимости от типа объединений, которые вы пытаетесь выполнить, и от того, где вы хотите выполнять запросы (распределенные или централизованные), один из этих подходов (или оба) должен делать то, что вам нужно
Я не знаю ничего похожего на то, что вы описываете для SQL Server, ни от Microsoft, ни от сторонних разработчиков. Связанные серверы позволят вам создавать межсерверные запросы, но они не прозрачны. Я думаю, что ближе всего вы сможете использовать репликацию или SSIS для объединения данных из разных экземпляров в одно хранилище данных.