最近我尝试了一下Riak。初始设置比我想象的要容易得多。现在我有一个由3个节点组成的集群,为了测试而在同一个虚拟机上运行。
我承认,我的虚拟机硬件配置非常降低(1 CPU,512 MB RAM),但我仍然对Riak的性能缓慢感到相当惊讶。
Map Reduce
通过玩弄map reduce,我在一个bucket中有大约2000个对象,每个对象大小约为1k-2k,格式为json。我使用了以下map函数:
function(value, keyData, arg) {
var data = Riak.mapValuesJson(value)[0];
if (data.displayname.indexOf("max") !== -1) return [data];
return [];
}
仅执行 HTTP 请求并返回结果就需要超过 2 秒的时间,不包括客户端代码反序列化 JSON 结果所需的时间。移除三个节点中的两个似乎略微提高了性能,使其降至接近 2 秒以下,但这对我来说仍然太慢了。
这是正常现象吗?这些对象的字节大小并不大,而一个存储桶中有 2000 个对象也并不算多。
插入
批量插入约 60,000 个与上述相同大小的对象需要很长时间,实际上并没有真正工作。
我的脚本在插入对象到 riak 时在大约 40,000 个左右死亡,并表示无法再连接到riak 节点。在 riak 日志中,我发现了一个错误消息,指示节点已用尽内存并死机。
问题
这是我第一次尝试 riak,所以肯定有可能是我弄错了什么。
- 有哪些设置可以调整?
- 硬件设置是否太受限制?
- 也许我用于与 riak 交互的 PHP 客户端库是限制因素?
- 在同一台物理机上运行所有节点相当愚蠢,但如果这是一个问题-我该如何更好地测试 riak 的性能?
- Map Reduce 真的那么慢吗?我在 riak 邮件列表中读到了 Map Reduce 对性能的影响,但如果 Map Reduce 很慢,您应该如何实现几乎实时需要的数据“查询”?我知道 riak 不像 redis 一样快。
如果有经验丰富的 riak 用户能够帮助回答这些问题,那将对我非常有帮助。