Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 卡桑德拉随机读取速度_Nosql_Cassandra_Thrift - Fatal编程技术网

Nosql 卡桑德拉随机读取速度

Nosql 卡桑德拉随机读取速度,nosql,cassandra,thrift,Nosql,Cassandra,Thrift,我们还在为我们的数据存储评估Cassandra。作为一个非常简单的测试,我在本地机器上的Keyspace1/Standard1列族中插入了4列的值,总计约100字节的数据。然后我用行键尽可能快地把它读回。我能以每秒160000的速度读回它。太好了 然后我输入一百万条类似的记录,所有记录的键都是X.Y,其中X在(1..10)中,Y在(1..100000)中,我查询了一条随机记录。性能下降到每秒26000个查询。这仍然远远高于我们需要支持的查询数量(约1500/秒) 最后,我将1000万条记录从1.

我们还在为我们的数据存储评估Cassandra。作为一个非常简单的测试,我在本地机器上的Keyspace1/Standard1列族中插入了4列的值,总计约100字节的数据。然后我用行键尽可能快地把它读回。我能以每秒160000的速度读回它。太好了

然后我输入一百万条类似的记录,所有记录的键都是X.Y,其中X在(1..10)中,Y在(1..100000)中,我查询了一条随机记录。性能下降到每秒26000个查询。这仍然远远高于我们需要支持的查询数量(约1500/秒)

最后,我将1000万条记录从1.1增加到10.1000000,并随机查询1000万条记录中的一条。每秒60次查询的性能糟糕透顶,我的磁盘像疯了一样颠簸

我还验证了,如果我要求提供数据的一个子集,比如3000000到3001000之间的1000条记录,它首先返回速度很慢,然后在缓存时返回速度很慢,它的查询速度高达每秒20000次,我的磁盘不再疯狂

我读过很多书,人们在Cassandra中存储了数十亿条记录,并以每秒5-6k的速度获取它们,但我无法用仅有的10mil记录实现这一点。知道我做错了什么吗?是否需要更改默认设置?我在一个有6G内存的超频核心i7盒上,所以我认为这不是机器

下面是我获取记录的代码,我将这些记录生成8个线程,通过行键从一列中请求一个值:

ColumnPath cp=新ColumnPath(); cp.Column_family=“标准1”; cp.Column=utf8Encoding.GetBytes(“站点”); 字符串键=(1+sRand.Next(9))+“+”(1+sRand.Next(1000000)); column或supercolumn logline=client.get(“Keyspace1”,key,cp,consistentylevel.ONE)


感谢您提供的任何见解

看起来您没有足够的RAM将所有记录存储在内存中

如果您交换到磁盘,那么您就有麻烦了,而且性能预计会显著下降,特别是当您进行随机读取时


您还可以尝试基准测试其他一些流行的替代方案,如或。

纯随机读取是操作系统(以及Cassandra,如果您设置了键或行缓存)尝试执行的缓存的最坏情况


如果您查看Cassandra source发行版中的contrib/py_stress,它有一个可配置的stdev来执行随机读取,但有些键比其他键更热。这将更能代表大多数现实世界的工作负载。

添加更多Cassandra节点并为它们提供大量内存(-Xms/-Xmx)。您拥有的Cassandra实例越多,数据将跨节点进行分区,并且更有可能存储在内存中或更容易从磁盘访问。您在尝试扩展单个工作站级CPU时会受到很大限制。另外,检查默认的-Xms/-Xmx设置。我认为默认值是1GB。

当然可以处理这种级别的读取性能,也可以使用服务器集群进行写入和操作。作为内存中的解决方案,您需要构建一个足够大的集群,将所有数据保存在RAM中。

我们肯定无法将它们全部放在内存中,但10mil记录似乎并不多。人们是如何处理数十亿条记录的?关键是要尽可能多地保存在RAM中,而不是磁盘上。要处理数十亿条记录,您需要将它们分布在多台机器上,并将它们作为一个整体使用。这是一篇非常好的文章[1],介绍了如何在Riak(另一种流行的NoSQL解决方案)中实现这一点。本文中讨论的许多方面也适用于卡桑德拉,因为它们建立在相同的基本思想之上。[1] :不幸的是,我们会有随机访客以随机间隔到达我们的站点-没有我们提前知道的分发以获得更多缓存命中。在这种情况下,我们仅仅局限于磁盘速度吗?没有什么是真正随机的。你在现实生活中的表现很可能比你的测试要好。也就是说,卡桑德拉真的用完了盒子上的所有内存吗?60次读取/秒在您的硬件上是如此糟糕,以至于您可能有安装问题(这取决于您的磁盘有多糟糕)。另外,确保Cassandra没有像使用物理内存一样使用交换,这会导致Cassandra和操作系统都试图以相互竞争的方式优化内存中的页面,从而产生病态的性能问题。