我们有一个典型的场景:
1列族,单列少于10列。
当我们收到客户端的请求时,我们需要在数据库中写入这个列家族的10000条记录,并且我们将它们分批写入(一批1000条)。这通常持续5-10分钟,这取决于集群中的节点数和复制因子。
在接下来的几个小时内开始写入后,我们将收到很多更新(每条记录都更新2次)。
因此,我们在一天中的一段时间内(一小时)有大量的写/更新,而在那之后的更新非常少。
的问题是:需要采取哪些步骤来提高写/更新性能。例如,我注意到了memtable_flush_queue_size和类似的配置字段,但是我对cassandra没有足够的经验来确切地知道该做什么。
任何建议都有帮助,
伊万
发布于 2014-02-18 21:27:57
这可能有助于更好地理解:
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
发布于 2014-02-18 23:25:06
除了Maciej的优点之外,我还要在一个更高的级别上补充,使用批处理来批量加载普通写操作是一种反模式。它的主要作用是使你的工作量更“暴增”,这是不好的。只有当您有需要一起完成一致的写入时,才使用批处理。
对于大容量负载,请考虑在源上分批,并使用sstableloader,但我建议在大约1亿行级别之前不要投入这些工作。
发布于 2014-02-18 19:00:31
卡桑德拉是一个日志结构的数据库。因此,无论是更新还是新写,它的行为都是相同的。如果一致性不是很关键,您可以将写一致性级别设为1,这应该会有所帮助。以及,您使用的是CQL还是节俭的客户端。如果您使用的是节约,它是同步的,这意味着每个客户端线程将在一个请求上被阻塞。使用更多客户端线程。
https://stackoverflow.com/questions/21826271
复制相似问题