我一直在开发一个同时需要定期写入和大量读取的应用程序。
应用程序存储了几个文本列,这些列的大小不是很大,其中的映射是表中最大的列。
在Scala (下面是Datastax Java驱动程序)中使用Phantom-DSL时,我的应用程序在数据大小时崩溃。
这是我的应用程序中的一个日志。
[error] - com.websudos.phantom - All host(s) tried for query failed (tried: /127.0.0.1:9042 (com.datastax.driver.core.OperationTimedOutException: [/127.0.0.1:9042] Operation timed out))这是cassandra logs。
我把Cassandra日志放在一个粘贴盒里,因为它们太大了,不能嵌入答案中。
我似乎不能理解这次崩溃的原因。我已经尝试增加超时并关闭行缓存。
据我所知,这是一个基本问题,可以针对这种特殊情况通过调整cassandra来解决。
我的cassandra使用来自不同的数据源。所以写操作并不是很频繁。但是读取的大小很大,因为一次可能需要超过300K行,然后需要通过HTTP传输。
发布于 2015-10-13 05:10:01
日志显示显著的GC压力(ParNew为5秒)。
当您说“读取很大,因为一次可能需要超过300K行”时,您的意思是在单个查询中提取300k行吗?Datastax驱动程序支持本机分页-将fetch大小设置得更低(500或1000),并允许它在这些查询中分页,而不是试图在一次传递中加载所有300k行?
发布于 2015-10-12 18:56:45
映射(以及一般的集合)对Cassandra堆空间的要求可能非常高。更改数据模型以将映射替换为另一个表可能会解决您的gc问题。但由于缺乏关于您的Cassandra使用的更多细节,这是许多猜测。
https://stackoverflow.com/questions/33075119
复制相似问题