【发布时间】:2012-08-18 00:14:21
【问题描述】:
我正在开发应该使用 Apache Cassandra 来存储数据的 Web 应用程序。 我需要存储每个项目的评分,然后获取评分最高的项目列表。
所以任务 - 以排序顺序存储项目的一些附加信息,以摆脱客户端排序或使用 ORDER BY 排序。
其中一个可能的选项是创建索引列族:
userId {
100_ItemId1 : null,
90__ItemId2 : null,
80__ItemId3 : null,
80__ItemId4 : null
}
注意: userId 是行的键,100、90、80 - 是评分值
但是这里是删除的问题,我们应该知道之前的评级值来删除索引,它可能需要在列族中存储反转的信息:
reversed_userId{
ItemId1 : 100_ItemId1,
ItemId2 : 100_ItemId2,
...
}
您能否说有一些模式可以有效地存储订购的物品?
P.S:我不会使用 OrderPreservingPartitioner,因为它可以应用于整个 KeySpace,并且会损坏负载平衡和性能。
【问题讨论】:
-
有多少项?插入、删除和查询的相对频率是多少?
-
见this answer,因为它足够相似,可以给你正确的想法。
-
@ChrisGerken items 的数量:~ 50 个 每个用户,因此每行有 ~50 列。 插入的数量:每天约 10 个。 查询量:每天最多约 2000-5000 个。 删除的数量:每天约 5-10 个。此外,用户的数量约为 10 000 - 20 000。