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

Non-Relational Database Design For Big Data Warehouse

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

由于确实需要近乎实时的响应,而且table可以呈指数级增长,另一方面,访问格式非常简单固定,为此设计了一个非关系型数据库案件。这就是我考虑使用 HBase、Cassandra 或 MongoDB.

的原因

我想使用 UserId 作为此次购买的主键 Table,像(HBase 或 Cassandra)这样的宽列存储或像 MongoDB 这样的文档数据库是否更适合这种情况?

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

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

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

如果您能分享任何来自实际应用程序的最佳实践示例,我们将不胜感激。或者任何我能读懂的好东西article/document/blogs。

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

我会使用 Cassandra 做以下事情:

创建 TABLE 购买(user_id uuid,purchase_id uuid,item_id uuid,item_details 文本,item_name 文本,time_of 购买时间戳, 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