在关系数据建模和文档数据建模之间挣扎

时间:2016-08-15 01:46:55

标签: mysql couchbase data-modeling

我目前正在努力进行数据建模。某些表中有超过100万条记录,通过GROUP BYCOUNT查询输出需要相当长的时间。所以我转移到Couchbase,因为它支持我在查询数据时发现的视图和索引。

我发现MySQL非常有用,它有很大的优势。比如我在用户表中有一个用户和一些与这个用户相关的文章,还有很多其他用户喜欢和评论这篇文章。我通常做一个JOIN,所以输出会给我带有用户名和个人资料图片的文章。输出还附有其他用户的详细信息和赞和评论。因此,如果用户上传新的个人资料图片或更改了他的电子邮件地址,我只需要更新users表中的列。

在Couchbase中,我尝试创建文档,因为我将数据存储在MySQL中,因此文章文档的作者为user_id,评论文档包含commenter_idarticle_id。现在我发现在极限和排序启用的视图或索引中加入它们是非常困难的。因此,我将用户的profile_imgfirst_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字段。

任何人都有任何线索我应该走哪条路?