min*_*eow 2 ruby mongodb mongoid
我需要在mongo中将无序的ID列表存储为"黑名单",并将它们纯粹用于检查原因.
blacklisted_ids= [1,23......100002942234... some very large number]
Run Code Online (Sandbox Code Playgroud)
但是将其存储在单个文档中是不可行的,因为我将非常快地完成2Mb的限制.
我可以在mongodb中创建一个集合,并将每个id作为文档插入,但它似乎有点矫枉过正,因为我想要的只是检查是否存在.
这样做的正确方法是什么?
注意:我使用的是mongoid/rails.=)
这些ID是整数吗?Mongo的文档大小限制在1.8版本中提升到16 MB,因此您应该能够在单个文档中使用它来容纳几百万个整数.
如果这仍然不足以满足您的需求,我认为新系列根本不会过度.只需确保使用'_id'字段存储您关心的ID,这样就不会浪费任何磁盘空间:
class BlacklistedId
include Mongoid::Document
identity :type => Integer
end
Run Code Online (Sandbox Code Playgroud)
此外,当您查询它时,请确保执行以下操作:
BlacklistedId.where(:_id => 78943).only(:_id).first
# A result means it's blacklisted, nil means it's not.
Run Code Online (Sandbox Code Playgroud)
通过告诉Mongo您只想返回_id字段,它将直接从_id索引提供您的查询,并且不会费心去寻找磁盘上的实际文档.这将使事情变得活泼,并且还意味着Mongo不需要将实际集合保留在RAM中 - 只是索引中的值.
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |