大数据仓库的非关系数据库设计

时间:2020-07-11 12:52:33

标签: mongodb cassandra hbase non-relational-database

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

由于它确实需要近乎实时的响应,并且该表可以按指数增长,因此,访问格式非常简单且易于修复,因此为此用例设计了一个非关系数据库。这就是为什么我在考虑使用HBase,Cassandra或MongoDB。

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

输入仅是一个user_id,并且数据库表包含所有可用的已购买商品。最佳的数据库表设计策略是什么?

{user_id:int
   {purchased_item: item1
                    item2
                    item3
   }
}

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

赞赏您是否可以分享实际应用程序中的最佳实践示例。或我能阅读的任何好的文章/文档/博客。

1 个答案:

答案 0 :(得分:1)

如果您考虑接近实时,我肯定会考虑使用Cassandra,尤其是用于历史记录详细存储!

我将使用Cassandra做以下事情:

创建表购买(user_id uuid,purchase_id uuid,item_id uuid,item_details文本,item_name文本,购买时间戳记的时间,PRIMARY KEY((user_id),purchase_id,item_id));

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

通过将主键由分区键,user_id,聚类键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

相关问题