将值用作列名时,HBase性能是否有任何差异?

时间:2014-09-22 06:58:57

标签: hbase

在HBase中,当我在列中存储值或使用值本身作为列名时,性能或任何其他方面是否有任何差异?

例如:

<table>:<Column-Family>:<Column-Name>=<value>
vs
<table>:<Column-Family>:<Column-Name>:<value>=1

在什么情况下建议使用什么?

2 个答案:

答案 0 :(得分:0)

这取决于数据以及您需要从中提取的内容!如果您的数据库中包含设备列表及其相关传感器,请执行以下操作:

  

ID - 标签 - 传感器

     

1 - K200 - 1,2
  2 - K300 - 1,2,3

     

ID - 标签 - SENSOR_1 - SENSOR_2 - SENSOR_3

     

1 - K200 - 1 - 1 - 0
  2 - K300 - 1 - 1 - 1

在我看来,第一个设计更好,你不必存储0不像第二个设计,但它取决于你需要提取什么信息。如果您只想检查哪个设备正在集成SENSOR TYPE 1,那么第二个设计会更好,因为您要读取每一行的列,而第一个设计则需要处理数据...但如果您'只是询问每种设备可用的传感器类型,第一种设计更好......尝试从数据中列出您需要知道的内容,根据这一点,您可以考虑设计!

答案 1 :(得分:0)

这取决于桌子的设计和必要性,更通用的目的
<table>:<Column-Family>:<Column-Name>=<value>

更常用于通用存储,但在某些情况下 <table>:<Column-Family>:<Column-Name>:<value>=1
可以更适合这样的场景:
- 您需要将值与列名称一起过滤 - 您希望拥有一个具有多个值的列,并避免序列化 - 您需要经常非常快地检查列是否具有特定值

有更多的案例可以从后来的设计中获益,但又一次又回到了你需要的地方