0

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

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

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

内存:8GB

堆大小:4GB

四核 Intel Xeon 处理器 @3.00 GHz

并发写入 = 并发读取 = 16(在 cassandra.yaml 文件中)

数据模型

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

CF1:

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

行键1

行键2

CF2(宽列系列):

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

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

键空间2

CF1:

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

行键1

行键2

CF2(宽列系列):

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

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

CF3(反柱系列):

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

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

4

1 回答 1

0

解决问题的可能方法:

  1. 按照这篇博文中的建议增加了分配给年轻一代的空间:http: //tech.shift.com/post/74311817513/cassandra-tuning-the-jvm-for-read-heavy-workloads

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

  3. 按照我之前的帖子中的建议,将 cassandra.yaml 中的写入超时减少到 2 秒: Cassandra 写入性能随着时间的推移连续流数据而严重下降

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

于 2014-02-23T16:15:15.770 回答