Использование Mongodb для хранения очень большого списка идентификаторов «черного списка» - PullRequest
2 голосов
/ 09 июня 2011

Мне нужно хранить неупорядоченный список идентификаторов в Монго как «черный список» и использовать их исключительно для проверки причин.

blacklisted_ids= [1,23......100002942234... some very large number]

Но сохранить его в одном документе невозможно, поскольку я будуочень быстро преодолеть ограничение в 2 МБ.

Я могу создать коллекцию в mongodb и вставить каждый идентификатор в качестве документа, но это выглядит излишним, учитывая, что все, что я хочу, это проверить на существование.

Каков будет правильный способ сделать это?

Примечание: я использую монгоид / рельсы.=)

1 Ответ

5 голосов
/ 09 июня 2011

Являются ли эти идентификаторы целыми числами?Максимальный размер документа Mongo был увеличен до 16 МБ в версии 1.8, так что вы можете уместить в нем несколько миллионов целых чисел.

Если этого по-прежнему недостаточно для ваших нужд, я не будудумаю, что новая коллекция будет излишней.Просто убедитесь, что вы используете поле '_id' для хранения нужного вам идентификатора, чтобы не тратить место на диске:

class BlacklistedId
  include Mongoid::Document
  identity :type => Integer
end

Кроме того, при запросе убедитесь, что вы что-то делаетенапример:

BlacklistedId.where(:_id => 78943).only(:_id).first
# A result means it's blacklisted, nil means it's not.

Сказав Mongo, что вы хотите только вернуть поле _id, он будет обслуживать ваш запрос прямо из индекса _id и не будет пытаться найти фактический документ на диске.Это будет держать вещи быстро, а также будет означать, что Mongo не нужно будет хранить фактическую коллекцию в оперативной памяти - только значения в индексе.

...