Cassandra:大文件的 blob 创建问题

Cassandra: Issue with blob creation for large file

我们正在尝试将文件加载到 Cassandra 的 blob 列中。当我们加载 1-2 MB 的文件时,一切正常。加载大文件时,比如大约 50 MB,出现以下错误:

Cassandra 在一致性写入查询期间失败LOCAL_QUORUM(需要 1 个响应,但只有 0 个副本响应,1 个失败)

单节点开发DB。任何提示或支持将不胜感激。

50mb 对于一个单元格来说已经相当大了。虽然有点过时但仍然准确:http://cassandra.apache.org/doc/4.0/faq/#can-large-blob

Cassandra 中没有流出单元格的机制,因此需要在内存中将单元格内容序列化为单个响应。您可能在某个地方遇到了限制或错误,这会引发异常并导致查询失败(检查 cassandras system.log,可能是其中的异常,可以更好地描述发生的情况)。

如果您有 CQL 集合或记录的批次,则还有其他下限。 http://docs.datastax.com/en/cql/3.3/cql/cql_reference/refLimits.html

您可以尝试将 blob 分成多个部分。我实际上建议像 64kb,并在客户端迭代它们并生成一个流(以防止在您这边将其完全加载到内存中)。

CREATE TABLE exampleblob (
  blobid text,
  chunkid int,
  data blob,
  PRIMARY KEY (blobid, chunkid));

然后 SELECT * FROM exampleblob WHERE blobid = 'myblob'; 并遍历结果。插入变得更加复杂,因为你必须有逻辑来分割你的文件,这也可以以流方式完成,并且在你的应用程序端提高内存效率。

另一种选择是将 blob 上传到 S3 或某些分布式文件存储,使用文件的哈希值作为 bucket/filename。在 Cassandra 中,只需将文件名存储为对它的引用。