4

我需要显示按上次访问排序的社区成员。有数百万个社区,每个社区都可以拥有数百万个成员。该列表应该是可滚动的。由于按上次访问时间排序,因此订单经常更新。

在 RDBMS 中,这个功能可以简单地通过普通的 B 树索引来完成。但是如何使用 NoSQL 方法来做到这一点?

我目前的想法是:

由于需要重新排序,使用链接的固定长度存储桶的标准 NoSQL 可滚动列表方法没有多大帮助。

Cassandra保持按列名排序的值。所以理论上我可以使用上次访问时间作为列键,但是对于每次更新,我都需要删除现有列并插入听起来不太有效的新列。

Apache Lucene不是 NoSQL 存储,但也是一种选择,因为它创建了排序索引。但我不确定它如何针对大规模更新进行扩展。

Redis Sorted Sets听起来很有前途,但我还没有经验。

我还有什么其他选择?

4

1 回答 1

1

如果您在对象中保留最后修改日期,您可以在许多 NoSQL 数据库中的查询时进行排序:

MongoDB(参见索引文档):

db.collection.find({ ... spec ... }).sort({ key: 1 })
db.collection.ensureIndex( { "username" : 1, "timestamp" : -1 } )

弹性搜索也对查询进行排序

{
  "sort" : [
      { "date" : {"order" : "asc"} }
  ],
  "query" : {
      ...
  }
}

像 CouchDB 这样的一些存储似乎完全缺乏内置的排序功能,因此在投资之前查看特定的解决方案是值得的。

于 2013-04-23T21:30:44.583 回答