Я пытаюсь выяснить, каков наилучший подход при разработке схемы базы данных с несколькими арендаторами, для которой в будущем потребуется горизонтальное разбиение.
Некоторые грубые числа в базе данных ..
Общее количество арендаторов составит около 10 000.Объем данных, хранящихся на одного арендатора, варьируется от 500 МБ до 3 ГБ.Число арендаторов начнется с малого и увеличится до 10000 в течение нескольких лет, поэтому изначально мы можем начать с одной базы данных с несколькими арендаторами, но в более долгосрочной перспективе это потребуется для горизонтального масштабирования в целях повышения производительности.
Обновление - усложняющим фактором является то, что иногда арендаторы (компании) могут объединяться, и мне также необходимо поддерживать это ...,
Мульти-аренда будет реализована с использованием общей базы данных,Архитектура общей схемы, как описано в этой статье http://msdn.microsoft.com/en-us/library/aa479086.aspx
Учитывая, что в будущем мы столкнемся с горизонтальным разделением и, скорее всего, мы будем перемещать клиентов из одной базы данных в другую несколько раз, прежде чемЯ считаю, что лучше использовать GUID в качестве первичных ключей в каждой таблице вместе с уникальным столбцом tenantID.
Я знаю, что использование GUID приводит к снижению производительности, поскольку основной ключ - это компромисс, который мне просто нужно принять?Есть ли другой способ проектирования горизонтального разбиения в будущем?
Вот пример - скажем, я хочу объединить компании с арендаторами 100 и 200 в будущем, если PK является целым числом, может бытьстолкновение, когда я копирую строки из базы данных 2 в базу данных 1, с {guids} я гарантирую, что столкновения не будет ...
база данных 1 база данных 2 tenantid, id, описание tenantid, id, description 100,1, 'foo' 200, 1, 'xxx' 100, 2, 'boo' 200, 2, 'yyy'
база данных 1 база данных 2 tenantid, id, описание tenantid, id, описание 100, {aaa}, 'foo' 200, {ccc}, 'xxx' 100, {bbb}, 'boo' 200, {ddd}, 'yyy'