在MongoDb中生成用户友好ID

时间:2012-03-03 16:41:18

标签: php mysql mongodb

我正在研究这个项目。这就像一个社交网络,我们可以有用户,帖子,图片等,然后出现了这个问题。我们习惯于Mysql和“几乎神奇”的自动增量字段,现在我们不能再依赖它了。我知道Mongo中的_id对象提供了一种识别文档的简便方法,因为它保证了文档的唯一性。但关键不是用户友好,这就是我们需要的,所以我们可以制作网址:

http://website.com/posts/{post_id}
http://website.com/{user_id}

我开发了一个解决方案,但我不认为这是最好的方法。我首先创建一个只有一列的mysql表。此列存储user_id,它是一个自动增量字段。对于mongo上的每个新记录,我在这个mysql表中插入一个新行并获取带有“LAST_INSERT_ID”函数的user_id,现在我可以使用数字ID在我的mongo集合中插入我的数据。而其他好处是我可以擦除我的mysql表,因为id已经存储在mongo中了一百万行。 我做错了吗?

3 个答案:

答案 0 :(得分:8)

为什么不为用户使用slugs作为帖子和用户名?这应该是人类可读的。

答案 1 :(得分:7)

首先,我认为在生成的id mongo提供的内容上使用任意自动递增数字没有任何好处。不仅不仅仅是一个任意的id,而且你必须保持序列。

也就是说,为什么不让mongo管理id,并为你的URL使用另一个唯一标识符。如果您的用户拥有“用户名”,我假设您已经确定该系列在整个系列中都是独一无二的。只需通过该唯一属性进行查询,而不是通过id查找。

这也允许用户更改其唯一标识符,而无需重新映射数据库中的关联。

对于帖子,只需从标题中生成一个独特的slug。

答案 2 :(得分:5)

您也可以在Mongo而不是MySQL中创建id,...这里有一些关于如何实现它的文档和文章

http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

http://shiflett.org/blog/2010/jul/auto-increment-with-mongodb