gpt4 book ai didi

java - 使用 HBase 列或使用 Avro 序列化数据哪个更好?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:03 26 4
gpt4 key购买 nike

我正在开发一个项目,该项目使用 HBase 存储用户的键/值信息。我们正在重新设计我们正在使用的 HBase 模式。正在讨论的两个选项是:

  1. 使用 HBase 列限定符作为键的名称。这会使行变宽,但非常稀疏。
  2. 将所有数据转储到一个列中,并使用 Avro 或 Thrift 将其序列化。

这两种方法的设计权衡是什么?一个比另一个更可取吗?他们有什么理由不使用 Avro 或 Thrift 存储数据吗?

最佳答案

总而言之,我倾向于为每个键使用不同的列。

1) 显然,您强制要求客户端使用 Avro/Thrift,这是另一个依赖项。这种依赖性意味着您可以消除某些工具的可能性,例如 BI 工具,它希望在不进行转换的情况下在数据中找到值。

2) 在 avro/thrift 方案下,您几乎被迫通过网络传输全部值(value)。根据一行中有多少数据,这可能无关紧要。但是,如果您只对“城市”字段/列限定符感兴趣,您仍然需要获取“付款”、“信用卡信息”等。这也可能会带来安全问题。

3) 如果需要,使用 Avro/Thrift 进行更新将更具挑战性。示例:您决定添加一个“hasIphone6”键。 Avro/Thrift:您将被迫删除该行并使用添加的字段创建一个新行。在列方案下,附加了一个新条目,只有新列。对于单行,不大,但是如果你对十亿行这样做,就需要一个大的压缩操作。

4) 如果已配置,您可以在 HBase 中使用压缩,这可能会超过 avro/thrift 序列化,因为它可以跨列族进行压缩,而不仅仅是针对单个记录。

5) 像 HBase 这样的 BigTable 实现非常适合非常宽、稀疏的表,因此不会像您预期的那样影响性能。

关于java - 使用 HBase 列或使用 Avro 序列化数据哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14588540/

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