Riak表现 – 意想不到的结果
在最后的日子里,我和riak打了一下。最初的设置比我想象的容易一些。现在我有一个3节点集群,为了测试,所有节点都运行在同一个vm上。
我承认,我的虚拟机的硬件设置非常降级(1 CPU,512 MB RAM),但是我仍然对riak的性能表现感到非常惊讶。 地图缩小 用地图减少一点我在一个桶中有大约2000个对象,每个约1k – 2k的大小作为json。我用这个地图函数: function(value,keyData,arg) { var data = Riak.mapValuesJson(value)[0]; if (data.displayname.indexOf("max") !== -1) return [data]; return []; } 而且为了执行http请求返回结果花费了2秒钟,而不是计算我的客户端代码中的时间,以排除json的结果。删除3个节点中的2个似乎略微提高了两秒钟的性能,但这对我来说似乎还是很慢。 这是预期的吗?对象的字节不是很大,一个桶中的2000个对象也不是那么大。 插 批量插入大约60.000个与上述相同大小的对象花了相当长的时间,实际上没有真正的工作。 我在riak中插入对象的脚本在大约40.000左右死亡,并说它不能连接到riak节点。在riak日志中,我发现一个错误消息,表示该节点已经用完了内存并且死亡。 题 这真的是我在riak的第一枪,所以有一定的机会,我搞砸了一些东西。 有什么设置可以调整吗? 如果有更多的riak经验的人可以帮助我解决一些这些问题,那么真的会帮助我很多。
这个答案有点迟了,但是我想指出,Riak的mapreduce实现主要是为了处理链接而不是整个桶。
Riak的内部设计实际上是针对整个存储桶进行优化的。这是因为桶不被认为是顺序表,而是分布在节点集群上的密钥空间。这意味着随机访问非常快 – 可能是O(log n),但不要引用我 – 而串行访问非常非常慢。串行访问,Riak目前设计的方式,必然意味着要求所有节点的数据。 顺便说一下,R??iak术语中的“水桶”令人困惑,令人失望,没有实现你可能想到的方式。 Riak称之为一个桶,实际上只是一个命名空间。在内部只有一个桶,并且以桶名作为前缀存储密钥。这意味着无论桶数多小,枚举一个大小为n的单个桶中的密钥将需要m次,其中m是所有桶中的密钥总数。 这些限制是Basho的实施选择,不一定是设计缺陷。 Cassandra实现与Riak完全相同的分区模型,但支持高效的顺序范围扫描和跨大量密钥的mapreduce。 Cassandra也实现真正的桶。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |