这是问题的设置:
我正在使用HBase的项目中存储有关图书可用性的信息。我需要回答的一个问题(以及大部分时间都会发生的问题)是:在一系列日期中给我所有可用的书籍。为了解决这个问题,我提出了一个模式,对于每本书的ISBN,我都有一个列系列,每年的每一天都有一个限定符,在那里我存储了当天有多少本书。这样我每行就有365列,并且使用ColumnRangeFilter我可以在给定的日期范围内返回任何书籍(提供它的ISBN)的书籍可用性。
这就是问题本身:
行可以拥有的列限定符数量是否有限制?或者至少是最好的做法?因为现在我每行只有365个列限定符,但是如果这个项目成功,那么每行有大约10000个限定符。我想知道这种架构是否适合这种情况。
答案 0 :(得分:4)
虽然实际上没有这种限制,但您必须设计您的模型,并牢记您的用例。恕我直言,如果你需要在广泛的数据范围内进行原子操作而不是拥有更多列数较少的行,那么你最好拥有更宽的行。这种方法的优点是,您可以根据用例要求,在多个列上进行原子操作。这也将允许同时访问行的读者查看该行的整个更新。
但我认为这种方法可能存在缺点。您可能会面临一些性能问题,因为行不会跨区域分割,因此将始终由单个服务器提供服务,从而为该服务器增加额外负载。为了避免这类事情,你可能会想到有多个列族,如果你的情况可能的话。
答案 1 :(得分:3)
据我所知,每行声明的列数没有特殊限制。一切都在变化,但至少人们会讨论'数百万列'的情况,这绝对不是你的情况。好的,行数有限,但距离你的数字还很远。
这是“太宽”行的另一个潜在问题。如果您没有指定精确限定符,则任何扫描都将导致整行,因此您可以获得比实际需要更多的数据。想想像“这个月”这样的范围。同样,您是否真的想使用慢行内扫描来获取行内所需的列?
我建议改为考虑更好的行键设计。 希望这会以某种方式帮助你。