在cassandra中调整写入性能

Iva*_*gin 6 cassandra nosql

我们有这个典型的场景:

1列系列,列数少于10个.

当我们收到客户的请求时,我们需要在数据库中写入10 000 000个此列族的记录,我们正在批量编写它们(一批1000个).这通常持续5-10分钟,具体取决于群集中的节点数和复制因子.

在接下来的几个小时内开始写入后,我们将收到大量更新(每条记录更新2次).

所以我们在一天(一小时)的一段时间内有很多写/更新,之后很少.

问题是:提高写入/更新性能的步骤.我注意到例如memtable_flush_queue_size和类似的配置字段,但我没有足够的cassandra经验来确切知道该做什么.

任何建议都有帮助,

伊万

Mac*_*las 12

  1. 增加JVM内存(java 6+上最大12 GB) - 这将自动增加memtables的大小并减少刷新间隔.这也意味着频繁更新将在RAM中合并在一起,而不是在压缩过程中 - 这也将减少磁盘使用量.像往常一样有缺点 - cassandra需要更多的时间来启动,因为提交日志会变得更大(当memtable被刷新到SSTable时它会被删除)
  2. 非常重要:为数据和提交日志使用单独的磁盘.您可以将SSD用于数据.它没有提交提交日志,因为它是顺序写入.
  3. 将复制因子更改为1将在集群中产生更少的负载,因为每个节点都必须处理其数据而不是另外的副本,但是您可能会丢失数据 - 我不会推荐它.

这可能有助于更好地理解:

http://maciej-miklas.blogspot.de/2012/09/cassanrda-tuning-for-frequent-column.html

http://maciej-miklas.blogspot.de/2012/08/cassandra-11-reading-and-writing-from.html