【发布时间】:2014-04-19 00:38:35
【问题描述】:
我正在尝试确定在 mongo db 中处理复合主键的最佳方式。本系统中与数据交互的主键由 2 个 uuid 组成。 uuid 的组合保证是唯一的,但单个 uuid 都不是。
我看到了几种管理方法:
使用由 2 个值组成的主键对象(建议 here)
使用标准自动生成的 mongo 对象 id 作为主键,将我的键存储在两个单独的字段中,然后在这两个字段上创建复合索引
将主键设为 2 个 uuid 的哈希
我目前不知道的其他一些很棒的解决方案
这些方法对性能有何影响?
对于选项 1,由于键不连续,我担心插入性能。我知道这会扼杀传统的 RDBMS 系统,而且我已经看到迹象表明这在 MongoDB 中也是如此。
对于选项 2,拥有一个系统永远不会使用的主键似乎有点奇怪。此外,查询性能似乎不如选项 1。在传统的 RDBMS 中,聚集索引提供了最好的查询结果。这在 MongoDB 中的相关性如何?
对于选项 3,这将创建一个 id 字段,但在插入时它不会是连续的。这种方法还有其他优点/缺点吗?
对于选项 4,嗯...选项 4 是什么?
此外,还有一些关于将来可能使用 CouchDB 代替 MongoDB 的讨论。使用 CouchDB 会提出不同的解决方案吗?
更多信息:有关该问题的一些背景信息可以在here
【问题讨论】:
-
可能最重要的问题是您将如何访问这些数据?写作显然插入 - 更新?查询呢?删除过吗?
-
主要是写作。然后更新(主要是大爆发)。相当数量的插入(同样,主要是大爆发)。偶尔删除。
-
更新将使用哪些字段?一个或两个 uuid?
-
更新、删除和查询将针对这两个字段
-
一起还是单独?或者每个? IE。是否每次更新都将针对单个唯一文档(因此提供两个 uuid 值)?
标签: mongodb composite-primary-key primary-key-design