Управление идентичности / первичный ключ на серверах

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

В нашей текущей базе данных для первичного ключа мы используем два столбца INT, первый столбец - это идентичность, а другая используется для описания на каком сервере строка вставлена ​​строка. Теперь я хочу избежать использования двух столбцов для первичного ключа и вместо этого просто используйте один столбец. Пока что у меня есть два способа выполнения этого:

  1. Использование GUID для моего основного ключа

    Это гарантирует, что на любом количестве серверов всегда есть уникальный ключ. Что мне не нравится с этим, состоит в том, что GUID составляет 16bytes в размере, а при использовании для внешнего ключа на многих таблицах он будет тратить место. Также сложнее использовать его при написании запросов, и он будет медленнее запросить.

  2. Используйте INT или BIGINT и вручную укажите значение семян и увеличения для каждой таблицы на каждом сервере. Например, если есть два сервера, таблица X на первом сервере начнется с номера 1, а на втором сервере он начнется с номера 2, каждый будет увеличиваться на 2. Так что будет (1,3,5 ,. ..) На первом, и (2,4,6, ...) на втором сервере. Хорошая вещь с этим дизайном состоит в том, что легче использовать при написании запросов, это быстро, и он использует меньше места для иностранных клавиш. Плохая вещь, то, что мы никогда не знаем, сколько серверов будет работать, поэтому сложнее рассказать, что будет увеличением ценность. Также сложнее управлять изменением схемы на сервере.

Что является лучшей практики для управления несколькими серверами, а также то, что это лучший способ, если таковые имеются, делать в такой ситуации, если?

8
задан marc_s 8 September 2011 в 13:02
поделиться