Идентификаторы для информации о более чем одной БД / сервере

StackOverflow https://stackoverflow.com/questions/1442108

Вопрос

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

  

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

     

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

     

У вас есть центральный сервер, который раздает наборы номеров, или вы придумали что-то, что не является номерами? Вы используете случайные числа и надеетесь, что они никогда не столкнутся? Как бы то ни было, автоматически назначенные идентификаторы не работают.

Кто-нибудь здесь сталкивался с этой проблемой? Как можно выйти за рамки автоматически увеличиваемых идентификаторов или можно масштабировать их на несколько серверов?

Это было полезно?

Решение

Используйте GUID / UUID (глобально / универсально уникальный идентификатор). Теоретически он гарантированно уникален на нескольких машинах.

Другие советы

GUID, ваши шансы на столкновение астрономически низкие.

Также возможно иметь (как мы называли) SmartGUID (обычно называемые РУКОВОДСТВА ПО ПОПРАВКАМ - см. этот анализ , в частности, на странице 7), где вы можете кодировать метку времени в GUID, чтобы получить информацию о дате создания записи " бесплатно " - таким образом, вы можете сохранить столбец отметки времени для даты создания записи - который возвращает часть того, что вы потеряли при переходе от 32-разрядного целого числа к 128-разрядному GUID. Они также могут быть гарантированно монотонными, в отличие от обычных идентификаторов GUID, которые могут быть полезны для кластерных индексов и для сортировки.

Вы также можете использовать составные ключи с каким-либо идентификатором сервера / базы данных с обычным идентификатором автоинкремента или автоматическим номером.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top