我目前在数据建模上苦苦挣扎。某些表格中有超过100万条记录,需要相当长的时间才能通过GROUP BY
和COUNT
查询输出。所以我转移到Couchbase,因为它支持查看和索引,我发现查询数据更快。在关系数据建模和文档数据建模之间挣扎
MySQL中有一个很大的优势,我发现它非常有用。比如我在用户表中有一个用户和一些与这个用户相关的文章,也有一些来自许多其他用户的与本文相关的喜欢和评论。我通常做一个JOIN,所以输出会给我带有用户名和个人资料图片的文章。输出还附有其他用户的详细信息,包括喜欢和评论。因此,如果用户上传新的个人资料图片或更改了他的电子邮件地址,我只需要更新users表中的列。
在Couchbase中,我试图创建文档,因为我将数据存储在MySQL中,因此文章文档的作者为user_id
,评论文档有commenter_id
和article_id
。现在我发现在启用了限制和排序的情况下将它们加入视图或索引非常困难。所以我复制了用户的profile_img
和first_name
和last_name
到所有相关文件。所以,当我加载文章文档具有以下结构:
{ "article_id": 1234, "text": "A good article", "author_id": 1, "first_name": "John", "last_name": "Smith", "profile_img": "0bf34ee0a.jpg", "likes": [ { "user_id": 1, "first_name": "John", "last_name": "Smith", "profile_img": "0bf34ee0a.jpg" }, { "user_id": 2, "first_name": "Paul", "last_name": "Einstein", "profile_img": "1789ab00ef.jpg" } ] "comments": [ { "user_id": 1, "first_name": "John", "last_name": "Smith", "text": "This is my article", "profile_img": "0bf34ee0a.jpg" }, { "user_id": 2, "first_name": "Paul", "last_name": "Einstein", "text": "i like it", "profile_img": "1789ab00ef.jpg" } ] }
这无疑救了我的查询时间。 (否则,我必须先查询文章,从文章和喜欢和评论中提取用户ID,并根据用户ID查询用户附加用户详细信息到文章以及喜欢和评论)。但是这给我带来了另一个问题,如果用户更新他的个人资料图片,我必须抓取所有文章才能找到他的user_id
并更新profile_img
字段。
任何人都有我应该走哪条路线的线索?
我不明白这里复杂的只是存储的用户ID,关键词,全文检索或'solr'整合。我看不到一个数百万行的mysql解决方案是如何对索引进行调整并不是一个尖锐的快速解决方案。特别是如果你避免blob – Drew
你不能只是采取SQL建模,并将其转换为任何NoSQL /文档数据库解决方案。 一个严肃的解决方案应该涉及到对数据的重新思考。 这主要是因为这些平台倾向于解决不同的问题。 –