为什么MongoDB不使用与其他DBMS相同类型的ID



在学习MongoDB之前,我对MySQL、PostgreSQL有一些经验。事实上,当我使用它们时,我创建了许多表,并使用id作为主键。ID的结构类似于AUTO_INCREMENT INTEGER,并且在进行一些查询时要容易得多。但是MongoDB使用了一些大的随机字符串。这是什么原因?这是安全问题还是其他问题?

MongoDB被设计为一个分布式且高度可扩展的系统。

使用序列整数作为文档标识符时,标识符必须由数据库生成。这导致了三个问题:

  1. 数据库必须有一个生成标识符的中心服务(这样它只使用每个标识符一次(。在MongoDB中,您可以设置一个分片集群;碎片是独立的,没有一个节点负责所有的数据。

  2. 因为所有操作都必须访问这个标识符生成服务,所以它成为了可扩展性的瓶颈。

  3. 您必须从数据库中检索标识符才能获得完整的文档。

MongoDB鼓励由客户端(驱动程序或应用程序(生成标识符。驱动程序生成的标识符很可能是全局唯一的,而不必与其他应用程序实例或任何服务器节点协调。这意味着:

  • 标识符生成是可并行的,不需要由任何单个节点、进程或服务来完成
  • 标识符生成不会在数据库中产生争用
  • 客户端能够生成完整的文档,并且不需要从数据库接收其中的一部分

最新更新