我承认,我的虚拟机的硬件设置非常降级(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交互的PHP客户端库是限制因素?
>在同一物理机上运行所有节点是相当愚蠢的,但如果这是一个问题 – 我如何更好地测试riak的性能?
地图减少真的那么慢吗?我阅读了关于riak邮件列表中的缩图功能的性能指标,但是如果Map Reduce的速度很慢,那么您应该对几乎实时所需的数据执行“查询”呢?我知道riak不像redis那么快。
如果有更多的riak经验的人可以帮助我解决一些这些问题,那么真的会帮助我很多。
Riak的内部设计实际上是针对整个存储桶进行优化的。这是因为桶不被认为是顺序表,而是分布在节点集群上的密钥空间。这意味着随机访问非常快 – 可能是O(log n),但不要引用我 – 而串行访问非常非常慢。串行访问,Riak目前设计的方式,必然意味着要求所有节点的数据。
顺便说一下,Riak术语中的“水桶”令人困惑,令人失望,没有实现你可能想到的方式。 Riak称之为一个桶,实际上只是一个命名空间。在内部只有一个桶,并且以桶名作为前缀存储密钥。这意味着无论桶数多小,枚举一个大小为n的单个桶中的密钥将需要m次,其中m是所有桶中的密钥总数。
这些限制是Basho的实施选择,不一定是设计缺陷。 Cassandra实现与Riak完全相同的分区模型,但支持高效的顺序范围扫描和跨大量密钥的mapreduce。 Cassandra也实现真正的桶。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。