我不认为将文字JSON数据存储在Cassandra中有任何好处。充其量,您的存储成本是相同的,并且通常API在处理类型方面不太方便,因为它们用于处理字符串/文本。BLOB
BLOB
例如,如果您使用的是他们的Java API,那么为了将数据存储为使用参数化,您首先需要将其全部加载到,例如通过将JSON数据打包到.BLOB
PreparedStatement
ByteBuffer
InputStream
除非您正在处理非常大的 JSON 片段,这些片段迫使您无论如何都要流式传输数据,否则要访问该类型需要做相当多的额外工作。你会从中得到什么?基本上什么都没有。BLOB
但是,我认为问“我应该将JSON存储为文本,还是将其gzip并将其存储为BLOB
?”是有一些优点的。
答案可以归结为你如何配置Cassandra和你的桌子。特别是,只要您使用的是 Cassandra 版本 1.1 或更高版本,您的表就会默认启用压缩。这可能就足够了,特别是如果 JSON 数据在每行中相当统一的情况下。
但是,Cassandra 的内置压缩是在表范围内应用的,而不是应用于单个行。因此,通过在存储之前手动压缩 JSON 数据,将压缩的字节写入 ,然后将数据作为 .ByteBuffer
BLOB
因此,它基本上归结为在存储空间与编程便利性与CPU使用率方面的权衡。我将按以下方式决定此事:
-
最小化存储消耗量是您最关心的问题吗?
- 如果是,请压缩 JSON 数据并将压缩的字节存储为
BLOB
;
- 否则,请继续执行 #2。
-
Cassandra 的内置压缩是否可用并为您的表启用?
- 如果不是(并且无法启用压缩),请压缩 JSON 数据并将压缩的字节存储为
BLOB
;
- 否则,请继续执行 #3。
-
您将要存储的数据在每行中是否相对统一?
- 对于JSON数据,答案可能是“是”,在这种情况下,您应该将数据存储为文本并让Cassandra处理压缩;
- 否则,请继续阅读 #4。
-
您想要效率还是便利?
- 效率;压缩 JSON 数据并将压缩的字节存储为 .
BLOB
- 方便;压缩 JSON 数据,将压缩数据 base64,然后将 base64 编码的数据存储为文本。