首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cassandra中优化写入性能

在cassandra中优化写入性能
EN

Stack Overflow用户
提问于 2014-02-17 10:18:11
回答 4查看 8.5K关注 0票数 5

我们有一个典型的场景:

1列族,单列少于10列。

当我们收到客户端的请求时,我们需要在数据库中写入这个列家族的10000条记录,并且我们将它们分批写入(一批1000条)。这通常持续5-10分钟,这取决于集群中的节点数和复制因子。

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

因此,我们在一天中的一段时间内(一小时)有大量的写/更新,而在那之后的更新非常少。

的问题是:需要采取哪些步骤来提高写/更新性能。例如,我注意到了memtable_flush_queue_size和类似的配置字段,但是我对cassandra没有足够的经验来确切地知道该做什么。

任何建议都有帮助,

伊万

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-18 21:27:57

  1. 增加JVM内存( java 6+上最多12 GB )-这将自动增加内存的大小并减少刷新间隔。这也意味着频繁更新将合并到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

票数 12
EN

Stack Overflow用户

发布于 2014-02-18 23:25:06

除了Maciej的优点之外,我还要在一个更高的级别上补充,使用批处理来批量加载普通写操作是一种反模式。它的主要作用是使你的工作量更“暴增”,这是不好的。只有当您有需要一起完成一致的写入时,才使用批处理。

对于大容量负载,请考虑在源上分批,并使用sstableloader,但我建议在大约1亿行级别之前不要投入这些工作。

票数 1
EN

Stack Overflow用户

发布于 2014-02-18 19:00:31

卡桑德拉是一个日志结构的数据库。因此,无论是更新还是新写,它的行为都是相同的。如果一致性不是很关键,您可以将写一致性级别设为1,这应该会有所帮助。以及,您使用的是CQL还是节俭的客户端。如果您使用的是节约,它是同步的,这意味着每个客户端线程将在一个请求上被阻塞。使用更多客户端线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21826271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档