MongoDB индексы: строка против Int - PullRequest
0 голосов
/ 11 ноября 2019

Новое в управлении базами данных. У меня есть база данных книг, и я хочу создать индекс для ISBN длиной 13 символов. Пример: '9781509825889'

В настоящее время я использую строковый индекс, но я прочитал противоречивые вопросы о том, сохранять ли его как int или строку для оптимизации индексации.

Похоже, у меня есть опции Int32 или Int64, и я думаю, что вышеуказанный ISBN слишком велик для Int32, но стоит ли переходить на Int64 для оптимизации запросов, или мне просто придерживаться строки? Есть ли существенный прирост производительности?

Спасибо

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

У вас есть возможность создать string или long (Int64). Int32 не может вместить размер.

Размер хранилища строковых данных и индекса будет немного больше. Например, я создал миллион документов с числовыми и строковыми типами данных isbn numbers (в двух разных коллекциях). Пример документа выглядел так: { "_id" : ObjectId("5dc8d8fef25cf42fe848076d"), "isbn" : 1000000999999 }. db.collection.stats() показывает информацию о размерах:

"size" : 36000000,
"count" : 1000000,
"avgObjSize" : 36,
"storageSize" : 12169216,
"indexSizes" : {
        "_id_" : 9920512,
        "isbn_1" : 10887168
},

"size" : 46000000,
"count" : 1000000,
"avgObjSize" : 46,
"storageSize" : 15015936,
"indexSizes" : {
        "_id_" : 9916416,
        "isbn_1" : 11018240
},

Кроме того, отмечается, что запросы к isbn одинаково быстры, в целом, независимо от типа данных.

ISBN отображаются в виде структурированного числанапример, 978-3-16-148410-0. Если вы, вероятно, будете использовать его в этом формате в приложении, его можно сохранить в виде структурированной строки.

0 голосов
/ 11 ноября 2019

Индексы MongoDb не зависят от типа данных полей, поэтому не имеет значения, что вы поместите его в String или Int32 или Int64.

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

Ссылки:

  1. Имеет ли значение тип поля в MongoDBиндекс?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...