Сгенерировать «идентичность», как Id с NoSQL (MongoDB)? - PullRequest
2 голосов
/ 28 июля 2011

Я использовал MongoDB с C # и использую ObjectIds, а затем GUID для моих Entity Ids.Ненавижу смотреть на эти идентификаторы, я думаю, что это противоречит интуитивному принципу ... Мне бы очень хотелось иметь возможность использовать целые или длинные числа, например столбец идентификаторов реляционных БД.Но мне трудно найти способ сделать это.Если я использую коллекцию max + 1, это приведет к условиям гонки.Я читал об использовании алгоритма Hi-Lo Generator, но как это работает?Что делать, если у меня есть 10 серверов приложений с одинаковым кодом?Означает ли это, что у меня должно быть 10 хай-лоу диапазонов идентичности на коллекцию?

Если кто-то может подсказать мне алгоритм C # для обмена, это было бы здорово!Кстати, я видел RNGCryptoServiceProvider, но это не гарантированно уникально, и это не последовательная идентификация типа int / long.Я бы предпочел использовать Hi-Lo в этот момент ...

Спасибо, Тим

Ответы [ 3 ]

4 голосов
/ 28 июля 2011

Вы можете написать свой собственный генератор идентификаторов и использовать его. Здесь вы можете найти как. Но ObjectId был разработан, чтобы быть уникальным для всех наборов осколков / реплик. Таким образом, каждый осколок может генерировать уникальный идентификатор независимо от других. С int ID в распределенной базе данных у вас будет много проблем.

1 голос
/ 28 июля 2011

Направляющие могут быть не очень привлекательными, но они проверены и опробованы.

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

0 голосов
/ 06 января 2013

Это путь: github.com/alexjamesbrown/MongDBIntIdGenerator

...