Cassandra “操作超时 - 仅收到 0 个响应。” 写的时候

lig*_*ght 5 php cassandra

我在 Windows 10 上使用 Datastax PHP Cassandra 驱动程序和 Cassandra 2.2.5。这是一个单节点集群,密钥空间复制

{
    'class': 'SimpleStrategy',
    'replication_factor': 1
}
Run Code Online (Sandbox Code Playgroud)

这是我要插入的表:

CREATE TABLE MyDocuments (
    "label" varchar,
    "fileName" varchar,
    "blob" blob,
    "createdTime" bigint,
    "lastUpdateTime" bigint,
    PRIMARY KEY("label", "fileName")
);
Run Code Online (Sandbox Code Playgroud)

当我尝试插入一个包含 16419KB 大 blob 的行时,它给了我这个错误消息Operation timed out - received only 0 responses. 根本没有插入该行。

插入一行 16379KB 的 blob 工作正常。

日志文件不显示任何内容。当操作失败时,Datastax / Cassandra 文件夹中的任何日志文件都不会附加任何内容。

经过几个小时的谷歌搜索,我仍然不知道为什么会发生这种情况。我曾尝试在设置 ( ) 中增加write_request_timeout_in_msto ,但没有帮助。20000cassandra.yaml

有谁知道为什么当大小超过 ~16MB 时,写入似乎会以这种方式失败?

更新:

我将 Cassandra 更新到 v3.7,同样的观察,但错误消息现在显示Operation failed - received 0 responses and 1 failures

3ma*_*uek 5

您将需要增加到commitlog_segment_size_in_mb更高的值。尝试64MB一下。

它增加了提交记录段的大小。此属性确定最大突变大小( max_mutation_size_in_kb),定义为段大小的一半。默认情况下为 32MB,这使得您的记录溢出了最大突变大小。

来自文档

(默认值:32MB)设置各个提交日志文件段的大小。在所有数据刷新到 SSTable 后,提交日志段可以被归档、删除或回收。此数据量可能包括系统中每个表的提交日志段。默认大小通常适合大多数提交日志归档,但如果您想要更细的粒度,8 或 16 MB 是合理的。

此属性确定最大突变大小,定义为片段大小的一半。如果突变的大小超过最大突变大小,则拒绝该突变。在增加提交日志段的大小之前,请调查为什么突变比预期大。查找访问模式和数据模型的根本问题,因为增加提交日志段大小是一种有限的修复方法。