我已经有了MongoDB,CouchDB,Redis,东京内阁和其他NoSQL数据库的经验。最近我偶然发现了Riak,这对我来说很有意思。为了开始使用它,我决定在NoSQL世界中编写一个小的推特克隆,即“hello world”。为了获得完整的克隆,有必要按时间顺序排列推文。在阅读Riak文档后,我发现Map-Reduce是这份工作的正确工具。在我的开发环境中,它工作得很好,但生产性能如何,有数百个并行查询?有没有其他的,也许更快的方法来排序数据,或者有可能以有序的形式存储数据(如Cassandra)?如何在Riak中对数据进行排序/订购?
更新: 我想我已经找到了另一个解决这个问题 - 一个简单的链表。因此,一种可能的实现方式可能是,每个用户都可以获得他/她自己的“时间轴桶”,其中存储了数据本身的链接(微博分别存储在“微博”桶中)。如你所知,这个时间轴桶必须包含一个名为“first”的键,它链接到最新的时间轴对象,并且是列表的起点。要在时间轴中插入新的推文,只需在时间轴栏中插入一个新项目,将此新项目的“下一个”链接设置为“第一个”项目,然后将新项目设置为“第一个”。
简而言之:插入一个项目,你会在一个链表做...
与叽叽喳喳,个人时间轴只抱显示给用户20个鸣叫。要收到最后20条推文,只需要2条查询。为了加快速度,第一个查询使用Riak的链接行走功能获取最新的20个对象,标记为“next”。最后,第二个和最后一个查询使用第一个查询计算的键来接收推文本身(使用map/reduce)。
要删除用户的鸣叫你刚刚取消关注,我会用了Riak 1.0的二级索引的能力来接收相关的时间表对象/鸣叫。
由于Riak 1.4排序和分页可用于辅助索引:http://basho.com/basho-announces-availability-of-riak-1-4/ – nacmartin