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交互的PHP客户端库是限制因素?
>在同一物理机上运行所有节点是相当愚蠢的,但如果这是一个问题 – 我如何更好地测试riak的性能
地图减少真的那么慢吗?我阅读了关于riak邮件列表中的缩图功能性能指标,但是如果Map Reduce的速度很慢,那么您应该对几乎实时所需的数据执行“查询”呢?我知道riak不像redis那么快。

如果有更多的riak经验的人可以帮助我解决一些这些问题,那么真的会帮助我很多。

这个答案有点迟了,但是我想指出,Riak的mapreduce实现主要是为了处理链接而不是整个桶。

Riak的内部设计实际上是针对整个存储桶进行优化的。这是因为桶不被认为是顺序表,而是分布在节点集群上的密钥空间。这意味着随机访问非常快 – 可能是O(log n),但不要引用我 – 而串行访问非常非常慢。串行访问,Riak目前设计的方式,必然意味着要求所有节点的数据。

顺便说一下,R​​iak术语中的“水桶”令人困惑,令人失望,没有实现你可能想到的方式。 Riak称之为一个桶,实际上只是一个命名空间。在内部只有一个桶,并且以桶名作为前缀存储密钥。这意味着无论桶数多小,枚举一个大小为n的单个桶中的密钥将需要m次,其中m是所有桶中的密钥总数。

这些限制是Basho的实施选择,不一定是设计缺陷。 Cassandra实现与Riak完全相同的分区模型,但支持高效的顺序范围扫描和跨大量密钥的mapreduce。 Cassandra也实现真正的桶。

相关文章

校园网上订餐系统系统主要功能模块包括公告内容(公告栏、轮...
从今天开始,正式进入项目阶段。本次的项目是跟着黑马的瑞吉...
在可预见的将来,IT不会萎缩,只会越发展越庞大,最终会渗透...
vulntarget-b靶场最详细通关记录。
MongoDB是一个开源、高性能、支持海量数据存储的。
【NoSQL数据库技术与应用】课本代码、课后答案(持续更新)