локальный UUID против уникального идентификатора сети - PullRequest
1 голос
/ 09 марта 2012

Какой из них вы выберете в качестве реализации суррогатного ключа?

  • Местный UUID
    • Это генерируется локально в приложении, нет сетевой поездки для его извлечения
    • Но длина большая и может повлиять на размер используемого вами хранилища.
    • Длинный URL с длинным UUID
    • Малейший страх, что UUID столкновение произойдет
  • Или .. Идентификатор сетевого уникального счетчика (не уверен, какой термин подходит для этого)
    • Я представляю себе удаленный Redis с атомным INC или Mongo с $ inc
    • Стоимость сетевой поездки
    • намного короче, занимает меньше места и приводит к гораздо более короткому URL
    • Нет страха при столкновении, даже в кластерных приложениях

Ответы [ 3 ]

2 голосов
/ 09 марта 2012

Если вы используете MongoDB, вы должны изучить использование BSON ObjectID:

http://www.mongodb.org/display/DOCS/Object+IDs

Они создаются по умолчанию как поле _id, если вы не укажете иное, и создадите поле _id самостоятельно (которое также может быть ObjectID, только что созданным вами). Не бойтесь коллизий, и вы можете получить в БД встроенный тип идентификатора, который вы также можете использовать в своем приложении. Похоже, беспроигрышный, если вы, конечно, используете MongoDB;)

2 голосов
/ 11 марта 2012

Вы можете комбинировать оба подхода.Посмотрите на алгоритм твиттера SnowFlake.Алгоритм будет производить глобальные уникальные целые числа (64 бита), но без какой-либо координации, чистый локальный алгоритм.

1 голос
/ 09 марта 2012

Для приложения с низким уровнем параллелизма вы можете использовать идентификатор счетчика сети.Но кроме URL, нет интереса к низкому параллелизму (= не много данных).

В случае большого параллелизма доступа, поэтому много данных, так много кластеров, вы переделываете engine +вероятно, связанная с этим сеть будет работать медленно.

В заключение: - счетчик сети выглядит сексуально, но бесполезно, , на мой взгляд , с MongoDB.

Вкл.Столкновение MongoDB, из-за алгоритма создания, столкновение близко к нулю.Я объясняю, что часть uuid - это сборка с машинным адресом , который должен быть уникальным, и вы можете получить этот адрес, прежде чем запускать кластер в эксплуатацию.

...