卡桑德拉随机读取速度

时间:2010-06-17 12:44:31

标签: nosql cassandra thrift

我们仍在为我们的数据存储评估Cassandra。作为非常简单测试,我在本地计算机的Keyspace1 / Standard1列系列中插入了4列的值,总计大约100字节的数据。然后我按行键尽快读回来。我能以160,000 /秒的速度读回来。大。

然后我用X.Y形式的键输入了一百万个类似的记录,其中X在(1..10)和Y在(1..100,000)中,我查询了一个随机记录。性能下降到每秒26,000个查询。这仍然远高于我们需要支持的查询数量(约1,500 /秒)

最后,我将1000万条记录从1.1上升到10.1000000,并随机查询1000万条记录中的一条。性能非常糟糕,每秒60次查询,而我的磁盘像疯了一样晃来晃去。

我还验证了如果我要求数据的一个子集,比如介于3,000,000和3,001,000之间的1,000条记录,它首先会缓慢返回,然后当它们缓存时,它每秒最多加速20,000次查询并且我的磁盘停止快要疯了。

我已经读到人们正在Cassandra中存储数十亿条记录并以每秒5-6k的速度获取它们,但是我只能以10mil的记录接近它。知道我做错了什么吗?我需要从默认设置中更改一些设置吗?我正在使用超频的Core i7机箱,配备6g的内存,所以我不认为这是机器。

这是我的代码,用于获取我正在产生8个线程的记录,以通过行键从一列请求一个值:

ColumnPath cp = new ColumnPath(); cp.Column_family =“Standard1”; cp.Column = utf8Encoding.GetBytes(“site”); string key =(1 + sRand.Next(9))+“。” +(1 + sRand.Next(1000000)); ColumnOrSuperColumn logline = client.get(“Keyspace1”,key,cp,ConsistencyLevel.ONE);

感谢您的任何见解

4 个答案:

答案 0 :(得分:4)

纯随机读取是关于缓存的最坏情况行为,您的操作系统(以及Cassandra,如果您设置密钥或行缓存)试图这样做。

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

答案 1 :(得分:3)

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

答案 2 :(得分:-1)

看起来你没有足够的RAM来存储内存中的所有记录。

如果您更换到磁盘,那么您遇到了麻烦,预计性能会显着下降,尤其是在您随机阅读的情况下。

您还可以尝试对其他一些热门替代品进行基准测试,例如RedisVoltDB

答案 3 :(得分:-6)

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