Mongodb NoRM и POCO
Я экспериментирую с Mongodb и NoRM в C#.
Из того, что я прочитал, ObjectId, который однозначно идентифицирует документ в Mongodb, является своего рода "специальным" Guid (в том смысле, что он уникален), но содержит некоторые важные части, которые позволяют упростить сортировку и индексирование (метка времени, машинный хеш, processId и приращение в нем).
Я бы хотел, чтобы мои объекты были действительно POCO с автоматически сгенерированным Guid как Id, без внешних типов, таких как ObjectId, которые не позволили бы мне перейти на другую технологию или вернуться к классическим Ado.net или Nhibernate.
Другой вариант будет использовать в POCO Id в качестве строки и использовать ObjectId.NewObjectId().ToString()
Каковы лучшие практики для этого?
2 ответа
ObjectId не являются направляющими. Guid - это имя, которое MS дает для версии UUID, которую они используют. ObjectIds - это совершенно другой алгоритм.
Тем не менее, вы можете использовать все что угодно в качестве идентификатора в Монго, и у него не будет штрафов за производительность (в мире рельсов, некоторые из ORM рекомендуют использовать строки)
ObjectId используется в монго в основном для сохранения размера. Если это так важно, просто используйте что-то другое, просто поймите, что использование слишком больших полей идентификаторов приведет к потере оперативной памяти. Но если это имеет большое значение, то пойти на Guids.
Вы можете использовать любой понравившийся вам тип _id, как сказал Мэтт, при условии, что он уникален в своей коллекции.
Хранение UUID в типе [DOC:BSON] является наиболее эффективным, но вы также можете использовать шестнадцатеричную строку, если пространство и скорость не являются проблемой.