用于插入和读取流数据的理想Cassandra参数/设置

时间:2014-02-11 11:28:50

标签: cassandra datastax-enterprise pycassa datastax

我将流数据插入到2个单独的键空间中,数据插入第一个键空间中的2个列族(标准)和第二个键空间中的3个列族(2个标准和1个计数器)。

这些列系列的数据插入速率得到了很好的控制,并且在纯写入时它可以正常工作[60%的CPU利用率和大约8-10的CPU负载率]。接下来,我尝试通过Pycassa API连续读取这些列族的数据,同时写入并行发生,我注意到写入性能严重下降。

建议哪些系统设置用于并行写入+从2个键空间读取?目前,数据目录位于每个节点上具有RAID10的单个物理驱动器上。

RAM:8GB

HeapSize:4GB

四核英特尔至强处理器@ 3.00 GHz

Concurrent Writes = Concurrent Reads = 16(在cassandra.yaml文件中)

数据模型

Keyspace1 :我在时间戳(T)中插入时间序列数据作为列名称,在一列中存储24小时的数据。

CF1:

    Col1    |   Col2    |   Col3(DateType)  |   Col(UUIDType4)  |   

RowKey1

RowKey2

CF2(宽柱系列):

RowKey1(T1,V1)(T2,V3)(T4,V4)......

RowKey2(T1,V1)(T3,V3).....

Keyspace2

CF1:

    Col1    |   Col2    |   Col3(DateType)  |   Col4(UUIDType)  |   ...  Col10

RowKey1

RowKey2

CF2(宽柱系列):

RowKey1(T1,V1)(T2,V3)(T4,V4)......

RowKey2(T1,V1)(T3,V3).....

CF3(计数器列族):

计算存储在CF2中的每个事件的发生。

仅从Keyspace 1和2,CF2(宽列族)连续读取数据。重申一下,读写是并行发生的。查询的数据量使用multiget从1到8个rowkeys逐步增加,并重复此过程。

1 个答案:

答案 0 :(得分:0)

克服这个问题的可能方法:

  1. 根据此博客文章的建议,增加分配给年轻一代的空间: http://tech.shift.com/post/74311817513/cassandra-tuning-the-jvm-for-read-heavy-workloads

  2. 进行小型架构更新并删除不必要的二级索引。这减少了压缩开销。

  3. 按照我在上一篇文章中的建议,将cassandra.yaml中的写入超时时间减少到2秒: Severe degradation in Cassandra Write performance with continuous streaming data over time

  4. 读取客户端仍需要更新以避免在高工作负载下使用multiget。上述改进显着改善了性能。