java - 使用自定义 _id 值

标签 java mongodb

我有一个用户数据库,所有用户都有一个唯一的 ID (Java UUID) 来区分他们,因为其他数据(名字、IP 和姓氏)可能包含重复项。将 _id 设置为唯一 id 是个好主意吗,因为这可以让我免于创建和索引另一个字段并拥有无用的 _id 字段。

最佳答案

这是一个有争议的话题,具体情况因数据库引擎而异。我将更普遍地假设数据库引擎可能会在稍后的时间点发生变化。为了帮助您做出决定,以下是使用 UUID 作为行 ID 的一些优点和缺点:

优点:

  • 在数据不同但性质相似的表中具有唯一性
  • 使得从一个数据库引擎转移到另一个数据库引擎变得非常简单,因为行的 ID 并不完全依赖于插入时间

缺点:

  • 不允许优雅的聚集索引,因为 UUID 不是连续的。这意味着当您执行插入时,您的数据库将必须重新排列大量内存页面以保留顺序(某些数据库引擎(例如 SQL Server)创建一个“唯一符”字段来解决此问题,但最终,成本与使用 int 作为主键)
    • 使应用程序或日志文件中的调试变得更加困难,因为 int 字段比 UUID 更容易比较/查看
    • 针对表的联接比 int 慢,这对于大多数数据库实现来说都是如此

我个人的建议是使用 int 作为你的 ID。您对表的联接将会更快,并且总体上更容易调试。当然,您仍然可以将 UUID 作为外键,但随着解决方案的扩展,易于查看的小值将会派上用场。

关于java - 使用自定义 _id 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664914/

相关文章:

java - 在我的 java 程序上添加运行时

java - 在 java 中从 mjpeg 流读取和显示视频

java - 连接器/J getConnection 有语法错误但没有语法

node.js - Openshift mongodb 连接 url

node.js - 发布请求不接收数据-express js 和 mongo

ruby-on-rails - where() 与 find() 的奇怪性能问题

python - 如何在 pymongo 中使用 mongo 函数?

java - 找不到 net.shibboleth.tool :xmlsectool:2. 0.0

java - Validator 的 Spring 单元测试问题

ruby-on-rails - Mongoid 2.4 通过ID查询嵌入文档失败