nosql - 如何实现经常更新且需要维护顺序的持久排序列表

标签 nosql rdbms sortedlist sortedset

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

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

我目前的想法是:

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

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

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

Redis Sorted Sets听起来很有希望,但我没有经验。

我还有什么其他选择?

最佳答案

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

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 这样的一些存储似乎完全缺乏内置的排序功能,因此在投资之前查看特定的解决方案是值得的。

关于nosql - 如何实现经常更新且需要维护顺序的持久排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196460/

相关文章:

database - 多组信息的redis架构

sql - 是否所有 RDBMS 都有可与 Oracle 相媲美的数据字典?

c# - 需要经过排序的字典,旨在查找键小于或大于搜索值的值

c# - SortedList of Lists 中最长的列表

mysql - NewSQL 一降一换?

android - NoSQL DB for Android 除了 MongoDB 和 CouchDB?

MongoDB 搜索 "null"是否比搜索 "does not exist"更快?

stored-procedures - 编写长存储过程是数据库设计和编码风格不好的标志吗?

rdbms - 如何找到 "nearby"结果?

.net - 在 SortedList 中循环 - 为什么这样更快?