2012-03-03 47 views
5

有我正在处理的这个项目。这就像一个社交网络,我们可以有用户,帖子,图片等,然后出现这个问题。我们习惯于使用Mysql和“几乎不可思议的”自动增量字段,现在我们不能再依靠它了。我知道Mongo中的_id对象为识别文档提供了一种简单的方法,因为它保证了唯一性。但关键不是用户友好的,这就是我们所需要的,所以我们可以像网址:在MongoDb中生成用户友好的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

您希望用户记住一个整数?唯一一个我认识的人是得到了xkcd成名的兰德尔,而他只有超过1000人。只要使用mongo IDs-用户不会记住它们。 – 2012-03-03 16:58:41

+1

“用户友好”代表人类可读和可理解的内容。我不需要用户记住它,但因为其他原因我需要它。 – 2012-03-03 17:22:54

回答

7

首先,我没有看到使用任意自动递增数字来生成id mongo提供的好处。不仅仅是一个随意的身份证,而且你必须保持这个序列。

这就是说,为什么不让mongo管理这个id,并为你的URL使用另一个唯一的标识符。如果你的用户有一个'用户名',我假设你已经确定这是唯一的整个集合。只需查询该独特的属性,而不是通过id查找。

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

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

8

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

+0

不得不问,什么是slu?? – raffian 2012-03-05 19:27:24

+2

维基百科定义:“slug是一个URL的一部分,它使用人类可读的关键字[1] [2]标识一个页面,例如”Slug_(web_publishing)“,而不是一个不透明的标识符,如ID号数据库中的内容(例如“27077911”).Slugs用于构建易于输入,描述性和易于记忆的干净URL(通常用于固定链接)。 例如,在此URL中: http: //example.org/2011/introduction-to-blogging slu is是“介绍到博客”。“ – dicarsio 2012-03-06 17:44:32