Я пытаюсь понять, какой подход лучше всего использовать при разработке схемы базы данных с несколькими арендаторами, которую в будущем нужно будет горизонтально разделить.
Некоторые грубые цифры по базе данных...
Общее количество арендаторов будет около 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'