2

我一直在开发一个需要同时进行定期写入和大量读取的应用程序。

该应用程序存储了一些大小不是很大的文本列,其中一个映射是表中最大的列。

在 Scala 中使用 Phantom-DSL(下面的 Datastax Java 驱动程序),当数据大小增加时,我的应用程序崩溃。

这是我的应用程序的日志。

[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 日志

我已将 Cassandra 日志发布在 pastebin 中,因为它们非常大,无法嵌入答案中。

我似乎无法理解这次崩溃的原因。我尝试增加超时并关闭行缓存。

据我了解,这是一个基本问题,可以通过针对这种特殊情况调整 cassandra 来解决。

我的 cassandra 使用来自不同的数据源。所以写入不是很频繁。但是读取的大小很大,因为一次可能需要超过 300K 行,然后需要通过 HTTP 传输。

4

2 回答 2

1

日志显示显着的 GC 压力(ParNew 为 5 秒)。

当您说“读取量很大,可能一次需要超过 300K 行”时,您的意思是您在单个查询中提取 300k 行吗?Datastax 驱动程序支持本机分页 - 将获取大小设置为显着降低(500 或 1000),并允许它对这些查询进行分页,而不是尝试一次加载所有 300k 行?

于 2015-10-12T21:10:01.417 回答
0

地图(和一般的集合)对 Cassandra 堆空间的要求可能非常高。更改数据模型以用另一个表替换地图可能会解决您的 gc 问题。但由于缺乏有关您使用 Cassandra 的更多详细信息,这是很多猜测。

于 2015-10-12T10:56:45.283 回答