我将流数据插入到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逐步增加,并重复此过程。
答案 0 :(得分:0)
克服这个问题的可能方法:
根据此博客文章的建议,增加分配给年轻一代的空间: http://tech.shift.com/post/74311817513/cassandra-tuning-the-jvm-for-read-heavy-workloads
进行小型架构更新并删除不必要的二级索引。这减少了压缩开销。
按照我在上一篇文章中的建议,将cassandra.yaml中的写入超时时间减少到2秒: Severe degradation in Cassandra Write performance with continuous streaming data over time
读取客户端仍需要更新以避免在高工作负载下使用multiget。上述改进显着改善了性能。