Mongodb - 具有count()的唯一ID

时间:2014-04-25 12:15:20

标签: php mongodb mongodb-php

我建立了一个网站,其中包含产品的推荐链接以及与mongodb合作。 我们都知道,长的_id字段在Urls中看起来很难看,例如http://website.com/p/532600d9a715ea980a00002b/u/532af835a715eae43f00002c

我在这里阅读了一些帖子,并用谷歌搜索了一段时间,并想知道为什么人们不能生成这个简单的唯一ID:

  1. 计算集合中的当前文档
  2. 将数字加1
  3. 将字段附加到文档中,例如'独特'
  4. 所以每个文档都有一个以1开头的唯一编号,网址看起来像http://website.com/p/1/u/2

    我不会删除任何文件。

    此解决方案的问题在哪里?

1 个答案:

答案 0 :(得分:1)

这种方法的合理变体,即增加计数器并指定该数字,为part of the official documentation

您的方法存在的问题是计数是一项相对昂贵的操作。此外,它的甚至没有碰撞安全,因为两个线程可以同时计数并获得相同的数字,因此第二个插入将失败。

一般来说,序列会产生瓶颈,因为您需要单点协调。对于写入较多的系统,操作数量为加倍(每次插入时额外$inc)。更糟糕的是,序列会向外部泄漏大量信息(即数据库中的条目数)。

如果你正在经营网上商店,博客等,你可能希望你的网址更加漂亮,描述性和SEO友好,如/products/displays/27-inch/iiyama-2734FW

如果您构建的网络应用程序无论如何都不会向搜索引擎显示网址,我相信/users/433/users/532af835a715eae43f00002c都不是您客户的理由选择或不选择您的申请。也许一个明智的顾客会,但他们拒绝前一个选择......