Начиная с определенного размера (количества баз данных), вы должны изменить парадигму. Вы в таком размере?
Когда вы развертываете то, что в конечном итоге является распределенным приложением, и при этом пытаетесь управлять им как обычным локальным приложением, вы столкнетесь с рядом фундаментальных проблем, связанных с доступностью, масштабируемостью и корректностью. Если вы используете такие понятия, как «распределенные транзакции», «связанные серверы» и «ORM», вы идете по неверному пути. Истинно распределенные приложения будут использовать такие термины, как «сообщение», «очередь» и «служба». Такие термины, как Linq, EF, nHibernate, хороши и хороши, но none принесет вам что-то дополнительно от того, что приносит простое выражение Transact-SQL SELECT
. Другими словами, если SELECT решит ваши проблемы, то на стороне клиента будут работать различные ORM. В противном случае они не добавят никакой ценности miraculos.
Я рекомендую вам просмотреть слайды SQLCAT: высокопроизводительные распределенные приложения в развертываниях в реальном мире , которые объясняют, как сайту, подобному MySpace, удается читать и записывать в хранилище почти 500 серверов и тысячи серверов. базы данных.
В конечном итоге вам необходимо усвоить следующее: одна база данных может иметь доступность 95% (время работы и приемлемое время ответа службы). Система, состоящая из 10 баз данных с 95% доступностью, имеет 59% доступности. А система из 100 баз данных каждая с доступностью 99,5% имеет доступность 60%. 1000 баз данных с доступностью 99,95% (5 минут простоя в неделю) имеют доступность 60%. И это для идеальной ситуации. В действительности всегда есть эффект снежного кома, вызванный потреблением ресурсов (например, потоками, заблокированными при попытке получить доступ к недоступному или медленному ресурсу), который делает вещи намного хуже.
Это означает, что нельзя написать большую распределенную систему, основанную на синхронных, тесно связанных операциях и транзакциях. Это просто невозможно. Вы всегда полагаетесь на асинхронные операции (обычно обмен сообщениями и очереди), которые полностью отличаются от обычного приложения базы данных.