MongoDb: Преимущества использования ObjectID vs строки, содержащей Id?

Есть ли какая-либо польза для хранения идентификатора для связанного документа как объекта ObjectId и хранения его в виде строкового литерала?

Использование ObjectID:

{ "_id": ObjectId("522bb79455449d881b004d27"), "username": "admin", "folder": ObjectId("522bb79455449d881b004d23") } 

по сравнению со строкой:

 { "_id": ObjectId("522bb79455449d881b004d27"), "username": "admin", "folder": "522bb79455449d881b004d23" } 

Для моего API, где я отправляю данные обратно клиенту … использование строки означает, что мне не нужно «очищать» данные … и, поскольку мы должны сделать второй запрос, чтобы получить документ папки в любом случае. .. стоит ли использовать ObjectId? (и если да, то почему?)

благодаря

Самая большая причина в том, что ObjectID – 12 байт, тогда как эквивалентная строка – 24 байта. За достаточно большой коллекцией эти 12 байтов, сохраненные на каждый идентификатор, действительно складываются! Эти идентификаторы также означают меньшее количество байтов, переданных по проводу при чтении или записи документа.

Кроме того, некоторые ODM ожидают ObjectID для внешних ссылок на документы и могут быть смущены строковыми версиями идентификатора. Я недостаточно знаком с PHP ODM, чтобы сказать, может ли это повлиять на вас конкретно.

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

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

Проверь это:

Как оптимизировать использование хранилища для небольших документов?

http://docs.mongodb.org/manual/faq/developers/#how-do-i-optimize-storage-use-for-small-documents