2012-04-02 2 views
2

Я хочу генерировать идентификаторы для использования с CouchDB. Я хотел бы, чтобы идентификаторы были лексически возрастающими по времени, чтобы я мог сортировать по id, не поддерживая отдельное поле метки времени. Я знаю, что CouchDB будет генерировать идентификаторы с этим свойством, но я не хочу, чтобы производительность попадала в базу данных, я бы предпочел просто запустить алгоритм на своих серверах. Я бы пошел с реализацией rfc 4112, за исключением того, что результаты не лессографически возрастают. Есть ли веская причина, по которой я не должен просто делать:Создание уникальных идентификаторов с лексическим увеличением по возрастанию

(Я использую nodejs). Существуют ли какие-либо затраты на использование нестандартного uuid или на использование встроенной случайной функции javascript?

ответ

2

У вас есть несколько вариантов, когда речь идет о UUID-ы.

Первый выбор - это если вы хотите создать клиентскую сторону _id (узел, браузер и т. Д.) Или кушеткой. Похоже, вы хотите создать свой собственный uuid на стороне клиента. Это нормально. Просто вставьте результат своей функции в поле _id документа, который вы сохраняете на couchdb. Диван просто будет использовать это.

У вас может быть диван, создающий идентификатор. Couchdb генерирует только _id, если вы не выбираете его самостоятельно. Couchdb по умолчанию использует алгоритм «последовательного» генерации uuid. Вы можете изменить алгоритм на другие через futon и config. Существует раздел под названием «uuids» с ключом «алгоритма». Вы можете увидеть источник этих алгоритмов здесь:

https://github.com/apache/couchdb/blob/master/src/couchdb/couch_uuids.erl

С описаниями о них здесь:

http://wiki.apache.org/couchdb/HttpGetUuids?highlight=%28utc%5C_random%29

Как вы можете видеть, функция utc_random очень похожа на ваше предложение. Но если бы вы хотели, чтобы ваш собственный, Если бы вы были склонны, вы могли бы добавить вам алгоритм на сервере и перекомпилировать кушетку.

Вторая часть вашего вопроса касается производительности выбора различных алгоритмов. Я буду цитировать Дэйв Cottlehuber из списка пользователей поста:

CouchDB будет иметь лучшее время вставки, когда ваш документ идентификаторы постоянно растут, так как это сводит к минимуму переписывает к Ь ~ дерева. Это также поможет ваше время сборки по той же причине, а также минимизирует потраченное пространство doc, , хотя это также будет восстановлено во время уплотнения.

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

0

Я бы рекомендовал придерживаться UUID, который CouchDB генерирует для вас, но вы можете настроить сервер на использование utc_random, который будет префикс отметки времени, с которой вы можете сортировать свои записи.

http://wiki.apache.org/couchdb/HttpGetUuids

+0

Любая причина, почему? На самом деле это мой вопрос: что такое CouchDB (или любая другая) реализация, правая, что я могу испортить, если я ухожу самостоятельно? (Я бы предпочел не использовать средство CouchDB, потому что это означает много дополнительных поездок в оба конца, тем более, что я могу генерировать идентификаторы в браузере) – josh

Смежные вопросы