SQL Server - is a GUID based PK the best practice to support tenant-based horizontal partitioning

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

Некоторые грубые цифры по базе данных...

Общее количество арендаторов будет около 10 000. Объем данных, хранящихся на одного арендатора, варьируется между 500MB -> 3GB. Количество арендаторов будет небольшим и вырастет до 10 000 в течение нескольких лет, поэтому изначально мы можем начать с одной базы данных с несколькими арендаторами, но в долгосрочной перспективе она должна будет горизонтально масштабироваться по причинам производительности. причины.

Обновление - осложняющим фактором является то, что иногда арендаторы (компании) могут сливаться вместе, и мне нужно поддерживать и это...,

Многоарендная база данных будет реализована с использованием архитектуры Shared Database, Shared Schema, как описано в этом документе http://msdn.microsoft.com/en-us/library/aa479086. aspx

Учитывая, что в будущем мы столкнемся с горизонтальным разделением и что, вероятно, мы будем перемещать клиентов из одной базы данных в другую несколько раз, прежде чем все уляжется, я думаю, что лучше всего использовать GUID в качестве первичных ключей в каждой таблице вместе с уникальным столбцом tenantID.

Я знаю, что использование GUID в качестве первичного ключа приводит к снижению производительности, но не является ли это компромиссом, который я просто должен принять? Есть ли другой способ спроектировать горизонтальное разделение в будущем?

Вот пример - допустим, я хочу объединить компании с арендаторами 100 и 200 в будущем, Если PK является целым числом, может произойти столкновение, когда я копирую строки из базы данных 2 в базу данных 1, с {guids} я гарантирую, что столкновения не произойдет...

база данных 1 база данных 2 tenantid, id, description tenantid, id, description tenantid, id, description 100 ,1 , 'foo' 200 ,1 , 'xxx' 100 ,2 , 'boo' 200 ,2 , 'yyy'

база данных 1 база данных 2 tenantid, id, description tenantid, id, description tenantid, id, description 100 ,{aaa} , 'foo' 200 ,{ccc} , 'xxx' 100 ,{bbb} , 'boo' 200 ,{ddd} , 'yyy'

7
задан AIDAN CASEY 27 October 2011 в 22:18
поделиться