【发布时间】:2016-12-15 07:42:39
【问题描述】:
所以我需要在 MongoDB 中创建一个查找集合来验证唯一性。要求是检查是否重复了相同的 2 个值。在 SQL 中,我会这样做
SELECT count(id) WHERE key1 = 'value1' AND key2 = 'value2'
如果上述查询返回一个计数,则表示该组合不是唯一的。我有两种解决方案,但我不确定哪一种更具可扩展性。我需要针对 30M+ 文档创建此映射。
解决方案 1:
我在 key1 和 key2 上创建了一个带有复合索引的文档集合
{
_id: <MongoID>,
key1: <value1>,
key2: <value2>
}
解决方案 2:
我编写应用程序逻辑,通过连接 value1 和 value2 来创建自定义 _id
{
_id: <value1>_<value2>
}
我个人觉得第二个更优化,因为它只有一个索引,而且 doc 的大小也更小。但我不确定创建自己的 _id 索引是否是一个好习惯,因为它们可能不是完全随机的。你怎么看?
提前致谢。
更新:
我的数据库已经有很多占用内存的索引,所以我想将索引大小保持在尽可能低的水平,特别是对于仅用于验证唯一性的集合。
【问题讨论】:
-
你的意思是SQL计数大于1,值不唯一?方案2中,重复的值不会被加载到MongoDB中,可以吗?
-
不,我的意思是 SQL 计数大于 0。如果它的 1 表示条目已经存在,所以我不应该添加重复项。对于解决方案 2,如果 mongo 不允许我添加重复项也没关系,因为这正是我想要的。
标签: mongodb indexing compound-index nosql