使用自定义_id值

时间:2014-12-27 06:15:23

标签: java mongodb

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

1 个答案:

答案 0 :(得分:2)

这是一个值得商榷的话题,细节因数据库引擎而异。我会更普遍地说假设数据库引擎可能在以后的某个时间点发生变化。为了帮助您做出决定,以下是使用UUID作为行ID的优缺点:

优点:

  • 在数据不同但性质相似的表格中是唯一的
  • 从一个数据库引擎移动到另一个数据库引擎非常直接,因为行的ID并不完全取决于插入时间

缺点:

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

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