首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向大数据仓库的非关系型数据库设计

面向大数据仓库的非关系型数据库设计
EN

Stack Overflow用户
提问于 2020-07-11 20:52:34
回答 1查看 52关注 0票数 0

假设我需要为Spotify设计一个表,在那里我需要快速检索用户已经购买的项目(歌曲或专辑),以便为用户播放。场景很简单:当用户点击购买歌曲时,数据库需要将购买的特定歌曲快速更新到用户帐户。

由于它确实需要近乎实时的响应,并且表可能呈指数级增长,另一方面,访问格式非常简单和固定,因此为此用例设计了一个非关系数据库。这就是为什么我在考虑使用HBase、Cassandra或MongoDB。

我想使用UserId作为这个采购表的主键,宽列存储(HBase或Cassandra)或文档数据库(如MongoDB )在这种情况下工作得更好吗?

输入只是一个user_id和数据库表响应,其中包含所有可用的已购买商品。最好的数据库表设计策略是什么?

代码语言:javascript
复制
{user_id:int
   {purchased_item: item1
                    item2
                    item3
   }
}

第二个表将用于搜索可供购买的特定艺术家、专辑、流派和歌曲。

如果您能分享任何来自真实应用程序的最佳实践示例,我将不胜感激。或者任何我能读到的好文章/文档/博客。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-12 14:56:21

如果你正在考虑接近实时,我肯定会考虑使用Cassandra,特别是对于历史详细的存储!

我使用Cassandra会做的事情是:

创建购买表( user_id uuid,purchase_id uuid,item_id uuid,item_details text,item_name text,time_of购买时间戳,主键((User_id),purchase_id,item_id));

这将允许您以多种方式对数据进行聚类,首先使用user_id,然后使用purchase_id来记录每次购买的所有商品!

通过使用由Partition key、user_id、clustering、purchase_id和item_id组成的主键,我们可以先对purchase_id中的项进行分组,然后再对user_id中的项进行分组。

https://cassandra.apache.org/doc/latest/data_modeling/intro.html https://docs.datastax.com/en/landing_page/doc/landing_page/current.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62849389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档