我有一个数据模型,用户在服务器中签入,向他的ID发送他已应用的标签列表。例如:
- User: 1, Tags: "ios8.1", "v1.1", "location_enabled", "likes_pizza"
- User: 2, Tags: "android5.0", "v1.1", "location_disabled", "likes_pizza"
预计将有数百万个并发写入(数百万个移动设备发送其标签,因此我需要一个高度可扩展的数据库)。
另一方面,我有一个网页面板显示所有不同标签的列表,它应该显示每个标签的用户数量。在这个例子中:
- "ios8.1" = 1 user
- "android5.0" = 1 user
- "v1.1" = 2 users
- "location_enabled" = 1 user
- "location_disabled" = 1 user
- "likes_pizza" = 2 users
网页面板还应该允许查询具有标签“v1.1”和“location_enabled”的用户列表
我应该使用哪种数据模型?是否可以使用MongoDB,或者使用其他数据库引擎会更好吗?
我想过几个选择:
1)用户的文档/表结构是:ID,其他用户字段。我有另一个文档/表格标签:ID,Tag_name。最后我有一个与两者相关的表:ID_user,ID_Tag。这是典型的关系数据库结构。每次用户编写新标签时,我都必须删除该用户的User_Tags表中的所有条目,找到Tags表中的所有标签ID,并在User_Tags表中创建新关系.....但这似乎是善良的每个用户查询的大量工作。我正在使用MySQL的这个数据库模型,我有很多并发问题,比如因为数据库被锁定而被丢弃的请求。
2)User的文档包含标签数组:ID,标签:[...]。当用户更新他的标签时,它只会覆盖标签数组......但是我不知道如何有效地获取要在网络面板中显示的不同标签的列表。
答案 0 :(得分:0)