我在 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_ms
to ,但没有帮助。20000
cassandra.yaml
有谁知道为什么当大小超过 ~16MB 时,写入似乎会以这种方式失败?
更新:
我将 Cassandra 更新到 v3.7,同样的观察,但错误消息现在显示Operation failed - received 0 responses and 1 failures
。
您将需要增加到commitlog_segment_size_in_mb
更高的值。尝试64MB
一下。
它增加了提交记录段的大小。此属性确定最大突变大小( max_mutation_size_in_kb
),定义为段大小的一半。默认情况下为 32MB,这使得您的记录溢出了最大突变大小。
来自文档:
(默认值:32MB)设置各个提交日志文件段的大小。在所有数据刷新到 SSTable 后,提交日志段可以被归档、删除或回收。此数据量可能包括系统中每个表的提交日志段。默认大小通常适合大多数提交日志归档,但如果您想要更细的粒度,8 或 16 MB 是合理的。
此属性确定最大突变大小,定义为片段大小的一半。如果突变的大小超过最大突变大小,则拒绝该突变。在增加提交日志段的大小之前,请调查为什么突变比预期大。查找访问模式和数据模型的根本问题,因为增加提交日志段大小是一种有限的修复方法。