Redis 数据库选择,以实现在实时会话中检索前10个投票问题的程序

Redis 数据库选择,以实现在实时会话中检索前10个投票问题的程序,redis,cassandra,nosql,Redis,Cassandra,Nosql,我正在实施一项计划,让人们在网络研讨会上提问并投票表决。在一个小时的网络研讨会上,这些问题总共可以达到500万个。每个问题可以有1-100票。我正在探索选择合适的数据库和处理引擎来计算前10个问题的选项。据我所知,cassandra可以满足一些需求,如快速写入和增量数据。我可以根据questionid(主键)和timeuuid(集群键)(每次投票)进行分区。我还可以为每个问题的计票设置一个反静态文件。 我被困的地方是在所有这些分区中查找前10个问题。Cassandra不支持此查询。有谁能分享一下

我正在实施一项计划,让人们在网络研讨会上提问并投票表决。在一个小时的网络研讨会上,这些问题总共可以达到500万个。每个问题可以有1-100票。我正在探索选择合适的数据库和处理引擎来计算前10个问题的选项。据我所知,cassandra可以满足一些需求,如快速写入和增量数据。我可以根据questionid(主键)和timeuuid(集群键)(每次投票)进行分区。我还可以为每个问题的计票设置一个反静态文件。 我被困的地方是在所有这些分区中查找前10个问题。Cassandra不支持此查询。有谁能分享一下这方面的想法吗


谢谢

我会给redis举个例子。它可以在单个排序集或排序集+散列中实现

您可以将投票保留在排序集和问题的
分数中,作为
成员
。无论何时增加投票,您都会要求增加问题的分数(投票)。当您想获取您使用的前n个问题时

这里是一个单排序集的演示

127.0.0.1:6379> ZINCRBY votes 1 "my question"
"1"
127.0.0.1:6379> ZINCRBY votes 1 "my question"
"2"
127.0.0.1:6379> ZINCRBY votes 1 "my question"
"3"
127.0.0.1:6379> ZINCRBY votes 1 "my another question"
"1"
127.0.0.1:6379> ZINCRBY votes 1 "my another question"
"2"
127.0.0.1:6379> ZINCRBY votes 1 "yet another question"
"1"
127.0.0.1:6379> ZINCRBY votes 1 "my question"
"4"
127.0.0.1:6379> ZINCRBY votes 1 "yet another questionssss"
"1"
127.0.0.1:6379> ZREVRANGE votes 0 2 WITHSCORES
1) "my question"
2) "4"
3) "my another question"
4) "2"
5) "yet another questionssss"
6) "1"
127.0.0.1:6379>

另一个组合是使用哈希排序集。问题保留在散列中。您需要为散列中的问题生成id。当您
ZINCRBY
时,您使用问题id作为成员。然后,当您需要获取投票数最高的n个问题时,您可以使用
ZREVRANGE
获取ID,然后使用获取给定ID的问题。

谢谢@Ersoy,您是否看到在排序列表中存储4000万条目的任何挑战?根据您的需要,排序集中的元素总数不是问题。集合可以保存十亿个元素。ZINCRBY和ZREVRANGE都可以在日志(n)复杂度下工作(它不是o(1))-因此这不会是一个问题,但您可能需要通过填充一些虚拟数据来进行基准测试。对于incrby和range查询,1000万和1000万的排序集的响应时间可能不同@务实的