我正在开发一个 API,获取资源的唯一方法是提供像 my_resource 这样的字符串键。
覆盖 _id 是一个好习惯(这使得一些 mongodb 驱动程序更易于使用)还是不好?从长远来看呢?
谢谢
根据我的经验,覆盖 _id 并不是最好的主意。仅当您的数据具有自然唯一且可轻松用于替换 _id 的值字段时,才应覆盖 _id。但是重写 _id 只是为了用人为的值替换它并没有多大意义。
我建议不要这样做,原因如下:
首先,这样做需要额外的实现来处理当您的“独特”值发生冲突时不可避免的情况。这几乎肯定会出现在任何规模很大的数据库中。这可能是一个问题,因为 MongoDB 在覆盖值和通常处理冲突方面可能是无情的。换句话说,除非您从一开始就非常仔细地设计数据库结构,否则您几乎肯定会覆盖值或遇到未处理的异常。
其次,同样重要的是:ObjectID 自然具有优化的插入公式,可以很好地创建索引。插入新文档时,创建的 ObjectID 在数学上尽可能接近先前的 ObjectID,从而优化内存和索引功能。自己重新创建这个非常方便的物品可能会更麻烦,而不值得。
最后,尽管这并不那么重要,但覆盖 _id 会使使用标准 ObjectID 方法变得更加困难。
现在,我至少可以想到一个可以覆盖 ObjectID 的积极因素:
如果存在 _id 肯定不会在您的数据库中使用的情况,那么它可以为您节省大量内存,因为索引在 MongoDB 中非常昂贵。