3

这是问题的设置:

我正在一个项目中使用 HBase 来存储有关书籍可用性的信息。我需要回答的一个问题(也是大部分时间都会发生的问题)是:给我在一个日期范围内的所有可用书籍。为了解决这个问题,我提出了一个模式,对于每一本书 ISBN,我都有一个列族,其中包含一年中每一天的一个限定符,并且在那里我存储了那一天有多少本书。这样,我每行有 365 列,并且使用 ColumnRangeFilter 我可以返回给定日期范围内任何书籍(如果它是 ISBN)的书籍可用性。

这就是问题本身:

一行可以拥有的列限定符的数量是否有限制?或者至少是一个最佳实践?因为现在我每行只有 365 个列限定符,但如果这个项目成功,则每行有大约 10000 个限定符。我想知道这个模式是否适合这种情况。

4

2 回答 2

4

尽管实际上没有这种限制,但您必须在设计模型时牢记您的用例。恕我直言,如果您需要对广泛的数据进行原子操作,而不是拥有更多的行数和较少的列数,那么您最好拥有更宽的行。这种方法的优点是您可以根据用例的需要对多个列进行原子操作。这也将允许同时访问一行的读者查看该行的整个更新。

但我认为这种方法可能存在缺点。您可能会遇到一些性能问题,因为行不会跨区域拆分,因此将始终由单个服务器提供服务,从而在该服务器上增加额外的负载。为了避免这种情况,如果可能的话,您可能会考虑拥有多个列族。

于 2013-06-28T23:35:32.753 回答
3

据我所知,声明的每行列数没有特殊限制。一切都在变化,但至少人们讨论“数百万列”的情况,这绝对不是你的情况。好的,行大小有限制,但离你的数字很远。

这是“太宽”行的另一个潜在问题。如果您未指定确切的限定符,则任何扫描都会产生整行,因此您可以获得比实际需要更多的数据。想想像“本月”这样的范围。同样,您真的想使用慢速行内扫描来获取行内所需的列吗?

我建议改为考虑更好的行键设计。希望这会以某种方式帮助你。

于 2013-06-28T14:44:38.720 回答