我正在为从不同来源生成的数据开发HBase存储。通常,来自同一源的列更有可能同时检索。预期的写/读取比大约在1/10到1/100(取决于不同的来源)。
所以我有两个选择:
- 多列家族:只需创建一个表和多个列系列,来自同一来源的每种数据都会形成一个列族。
- 多个表:为每个源创建一个表(带一个列家族)。
这是我的一些理解,请纠正我,如果有任何错误。
- 多桌解决方案可用于动态添加新来源。虽然多列族解决方案可能有停机时间。
- 如果不同来源的Rowkey具有不同的分布(例如INT User_id vs Image GUID)或基数,也许最好分为不同的表?
- 我们可能有一些要求同时从同一rowkey中检索不同来源的列。这样,多列家族可能会更快(不确定)?
做出决定之前,我需要考虑其他任何因素?是否有典型的案例多桌/多柱 - 家庭优于另一个?
谢谢
您的观点是正确的,只需遵循简单的规则:
如果来自不同源的数据是相关的,并且具有相同的键或密钥可以转换为同一键,请将其放在不同列族的同一表中。您将获得更好的扫描和更好的数据安排。
如果数据不能粘在一起,请将其放在单独的表格上。一张大桌子只会引起问题:您将进行更长的扫描,并且大多数专栏家庭将是空的。