假设我需要为Spotify设计一个表,在那里我需要快速检索用户已经购买的项目(歌曲或专辑),以便为用户播放。场景很简单:当用户点击购买歌曲时,数据库需要将购买的特定歌曲快速更新到用户帐户。
由于它确实需要近乎实时的响应,并且表可能呈指数级增长,另一方面,访问格式非常简单和固定,因此为此用例设计了一个非关系数据库。这就是为什么我在考虑使用HBase、Cassandra或MongoDB。
我想使用UserId作为这个采购表的主键,宽列存储(HBase或Cassandra)或文档数据库(如MongoDB )在这种情况下工作得更好吗?
输入只是一个user_id和数据库表响应,其中包含所有可用的已购买商品。最好的数据库表设计策略是什么?
{user_id:int
{purchased_item: item1
item2
item3
}
}第二个表将用于搜索可供购买的特定艺术家、专辑、流派和歌曲。
如果您能分享任何来自真实应用程序的最佳实践示例,我将不胜感激。或者任何我能读到的好文章/文档/博客。
发布于 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
https://stackoverflow.com/questions/62849389
复制相似问题