我正在为从不同来源生成的数据开发一个hbase存储。通常,来自同一源的列更有可能在同一时间被检索到。预期的写/读比率大致在1/10到1/100之间(取决于不同的源)。
所以我有两个选择:
多列族:只需创建一个表和多个列族,来自同一源的各种数据就会形成一个列族。
多个表:为每个源创建一个表(具有一个列族)。
以下是我的一些理解,如果有什么不对劲请指正。
多表解决方案适用于动态添加新源。而多列族解决方案可能会有停机时间。
如果不同源的rowkey具有不同的分布(例如,int user\u id vs image guid)或基数,那么最好拆分为不同的表?
我们可能需要同时从不同的源中检索同一行键的列。这样,多列族可能会更快(不确定)?
在做决定之前,我有什么建议或需要考虑其他因素吗?有没有典型的多表/多列族优于其他的情况?
谢谢
1条答案
按热度按时间2w3kk1z51#
你的观点是正确的,只要遵循简单的规则:
如果来自不同来源的数据是相关的,并且具有相同的键,或者可以将键转换为相同的键,则将其放在不同列族的同一表中。你会得到更好的扫描和更好的数据整理。
如果数据不能粘在一起,就把它放到单独的表中。一个大表只会导致问题:扫描时间更长,而且大多数列族都是空的。