假设我们有一个允许人们喜欢或不喜欢图片的应用程序。
这看起来像一个数据密集型应用程序,因为你会期望有大量的(dis)类请求,所以假设我们选择Node.js。
由于我们不希望人们投票超过一次,我们需要一种将picId和userId关联起来的方法。可以这样做:
- 与关系数据库,通过使用一个表,其中picId和userId是键,
- 使用NoSQL,通过为每个用户创建一个'文件'并存储她投票的所有picid…或者反过来,为每张图片创建一个文件,并在那里存储所有投票的userid。
数据库的这一部分将被密集地读取和写入,因为对于每个投票,您首先需要检查用户是否已经投票,然后写入新的投票,并更新pic的总投票数。
哪一个是最好的选择(仅基于技术原因)?
假设您使用MongoDB (NoSQL面向文档的DB),并且您有唯一的用户名。你可以这样做:
- 为图像创建模型
ImageModel
(猫鼬模型),为用户创建模型UserModel
- 将图像存储到数据库中(您可以使用引用来查找它们)
- 在您的
ImageModel
中,您有一个like
和dislike
数组,其中包含喜欢或不喜欢您的图片的用户的用户名
这样,喜欢/不喜欢的数量将是数组的长度,您将能够轻松地找到您的用户喜欢或不喜欢的内容。
然而,如果您想创建一个社交网络应用程序,面向文档的数据库并不是最好的选择,因为它们不实现关系,您将很难将信息和用户链接起来。SQL数据库也不是很好,因为它们不能为大型应用程序提供足够的性能,所以我建议你看看NoSQL Graph或Graph- document DB,如OrientDB或Neo4j
我希望它能帮助你,对不起我的英语(请随时纠正我);)