我需要显示按上次访问排序的社区成员。有数百万个社区,每个社区都有数百万成员。该列表应该是可滚动的。由于按上次访问时间排序,订单会经常更新。
在RDBMS中,这个功能可以通过普通的B树索引来完成。但是我怎么能用NoSQL方法呢?
我目前的想法是:
Standart NoSQL可滚动列表方法使用链接的固定长度的桶因为重新排序的要求而没有多大帮助。
Cassandra保持按列名排序的值。因此理论上我可以使用上次访问时间作为列键,但是对于每次更新,我需要删除现有列并插入一个听起来不太有效的新列。
Apache Lucene不是NoSQL存储,但也是一个选项,因为它创建了排序索引。但我不确定它是如何扩展大规模更新的。
Redis Sorted Sets听起来很有希望,但我没有经验。
我还有其他选择吗?
答案 0 :(得分:1)
如果你在对象中保留最后一个修改日期,你可以在许多NoSQL db中查询时排序:
MongoDB(见docs on indexes):
db.collection.find({ ... spec ... }).sort({ key: 1 })
db.collection.ensureIndex( { "username" : 1, "timestamp" : -1 } )
Elastic search has sorting in queries:
{
"sort" : [
{ "date" : {"order" : "asc"} }
],
"query" : {
...
}
}
像CouchDB这样的存储似乎完全没有内置的排序功能,因此在投资之前先看一下特定的解决方案是值得的。