gpt4 book ai didi

java - 在 cassandra 中将 json 存储为文本与 blob 的优缺点是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:46 25 4
gpt4 key购买 nike

对我来说,blob 的一个问题是,在 java 中,ByteBuffer(在 cassandra 中映射到 blob)不是可序列化的,因此不适用于 EJB。

考虑到 json 相当大,在 cassandra 中存储 json 的更好类型是什么。是文本还是 blob?

在决定 blob 还是 json 时,json 的大小是否重要?

如果是像oracle这样的任何其他数据库,通常使用blob/clob。但是在 Cassandra 中,每个单元可以容纳 2GB 大小,这有关系吗?

请将此问题视为在这种情况下在文本与 blob 之间进行选择,而不是根据有关是否对 json 使用单列的建议进行排序。

最佳答案

我认为在 Cassandra 中将 literal JSON 数据存储为 BLOB 没有任何好处。充其量您的存储成本是相同的,并且一般而言,API 在处理 BLOB 类型方面不如处理字符串/文本方便。

例如,如果您使用他们的 Java API然后,为了使用参数化的 PreparedStatement 将数据存储为 BLOB,您首先需要将其全部加载到 ByteBuffer 中,例如通过打包您的 JSON 数据到 InputStream

除非您要处理非常大 的 JSON 片段,这迫使您无论如何都要传输数据,否则访问 BLOB 类型需要做一些额外的工作.你会从中得到什么?基本上什么都没有。

但是,我认为问“我应该将 JSON 存储为文本,还是 gzip 并将压缩后的数据存储为 BLOB”有一些好处。

这个问题的答案取决于您如何配置 Cassandra 和您的 table 。特别是,只要您使用的是 Cassandra 1.1 版或更高版本,您的表就会默认启用压缩。这可能就足够了,尤其是当您的 JSON 数据在每一行中都相当统一时。

但是,Cassandra 的内置压缩适用于整个表,而不是单个行。因此,您可以通过在存储之前手动压缩 JSON 数据,将压缩后的字节写入 ByteBuffer,然后将数据作为 BLOB 传送到 Cassandra 来获得更好的压缩率。

所以它本质上归结为存储空间、编程便利性和 CPU 使用率之间的权衡。我将按如下方式决定此事:

  1. 最小化消耗的存储量是您最大关注的问题吗?
    • 如果是,则压缩JSON数据并将压缩后的字节存储为BLOB
    • 否则,继续#2。
  2. Cassandra 的内置压缩是否可用并已为您的表启用?
    • 如果否(如果您不能启用压缩),压缩 JSON 数据并将压缩后的字节存储为 BLOB
    • 否则,继续#3。
  3. 您将在每一行中存储的数据是否相对统一?
    • 可能对于 JSON 数据,答案是"is",在这种情况下,您应该将数据存储为文本并让 Cassandra 处理压缩;
    • 否则继续#4。
  4. 您想要效率还是方便?
    • 效率;压缩 JSON 数据并将压缩后的字节存储为 BLOB
    • 方便;压缩JSON数据,base64压缩数据,然后将base64编码的数据存储为文本。

关于java - 在 cassandra 中将 json 存储为文本与 blob 的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31339150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com