Cassandra:大型文件的blob创建问题

Cassandra:大型文件的blob创建问题,cassandra,blob,Cassandra,Blob,我们正在尝试将文件加载到Cassandra中的blob列中。当我们加载1-2MB的文件时,它会正常运行。加载大文件时,例如大约50 MB,出现以下错误: 一致性本地仲裁写入查询期间Cassandra失败(需要1个响应,但只有0个副本响应,1个失败) 它是一个单节点开发数据库。任何提示或支持将不胜感激 50mb对于一个单元来说相当大。虽然有点过时,但它仍然准确: Cassandra中没有从单元格中流出的机制,因此单元格内容需要在内存中作为单个响应序列化。您可能在某个地方遇到了一个限制或bug,导致

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

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


它是一个单节点开发数据库。任何提示或支持将不胜感激

50mb对于一个单元来说相当大。虽然有点过时,但它仍然准确:

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

如果您有一个CQL收集或记录的批处理,则有其他下限。

你可以试着把你的斑点分成几个部分。实际上,我建议使用64kb,在客户端,对它们进行迭代并生成一个流(以防止将其完全加载到内存中)

然后从exampleblob中选择*,其中blobid='myblob'并遍历结果。插入变得更加复杂,因为你必须有逻辑来分割你的文件,这也可以通过流媒体方式来完成,而且在你的应用程序端要节省内存


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

感谢Chris的输入。我能够从system.log中找到错误&更改配置以使其正常工作。将commitlog\u segment\u size\u(单位:mb)增加到文件大小的两倍。基于块的方法几乎可以,但有一些缺陷。例如,不能保证所有的块都会通过SELECT调用返回。如果你有太多的块(例如,100K),而你不知道你可能有多少块-你在一个大麻烦bcs你不能设置限制。顺便说一句,更新的faq链接是:如果对读/写操作都使用quorum(或本地q),那么将返回所有块。您可以设置fetch大小(默认值为5000,在本例中应该更低),然后当您在客户端对驱动程序页面进行迭代时,它不会一次将它们全部提取出来。
CREATE TABLE exampleblob (
  blobid text,
  chunkid int,
  data blob,
  PRIMARY KEY (blobid, chunkid));