在过去的几天里,我玩了一点 riak。初始设置比我想象的要容易。现在我有一个 3 节点集群,所有节点都在同一个虚拟机上运行以进行测试。
我承认,我的虚拟机的硬件设置降级了很多(1 CPU,512 MB RAM),但我仍然对 riak 的缓慢性能感到非常惊讶。
地图缩减
玩了一下 map reduce,我在一个桶里有大约 2000 个对象,每个对象的 json 大小约为 1k - 2k。我使用了这个地图功能:
function(value, keyData, arg) {
var data = Riak.mapValuesJson(value)[0];
if (data.displayname.indexOf("max") !== -1) return [data];
return [];
}
仅执行返回其结果的 http 请求就花费了 2 秒多的时间,这还不包括我的客户端代码反序列化来自 json 的结果所花费的时间。删除 3 个节点中的 2 个似乎将性能略微提高到略低于 2 秒,但这对我来说似乎仍然很慢。
这是可以预料的吗?对象的字节大小并没有那么大,一个桶中的 2000 个对象也没有那么多。
插入
批量插入大约 60.000 个与上述大小相同的对象需要相当长的时间,实际上并没有真正起作用。
我在 riak 中插入对象的脚本在 40.000 左右死亡,并说它无法再连接到 riak 节点。在 riak 日志中,我发现了一条错误消息,表明该节点内存不足并死亡。
问题
这真的是我第一次尝试 riak,所以我肯定有可能搞砸了。
- 有什么可以调整的设置吗?
- 硬件设置是否过于受限?
- 也许我用于与 riak 交互的 PHP 客户端库是这里的限制因素?
- 在同一台物理机器上运行所有节点是相当愚蠢的,但如果这是一个问题 -我怎样才能更好地测试 riak 的性能?
- map reduce真的那么慢吗?我在 riak 邮件列表中读到了 map reduce 对性能的影响,但是如果 Map Reduce 很慢,你应该如何对几乎实时所需的数据执行“查询”?我知道riak没有redis快。
如果有更多 riak 经验的人可以帮助我解决其中一些问题,那真的会对我有很大帮助。