gpt4 book ai didi

java - Hbase 按列限定符排序

转载 作者:可可西里 更新时间:2023-11-01 14:29:04 25 4
gpt4 key购买 nike

我有一个包含几百万条记录的 Hbase 表。每条记录都有几个描述记录的属性,每个属性都存储在列限定符中。(主要是 int 或字符串值)我有一个要求,我应该能够看到根据列限定符(或者将来甚至不止一个)分页和排序的记录。这样做的最佳方法是什么?我已经使用协处理器(主要是来自华为的 hindex)研究了二级索引,但它似乎与我的用例不完全匹配。我还考虑过将所有数据复制到多个表中,每个表对应一个排序属性,这些属性将包含在 rowkey 中,然后将查询重定向到这些表。但这似乎很乏味,因为我已经有了一些所谓的属性..

感谢您的任何建议。

最佳答案

您需要您的 NoSQL 数据库像 RDBMS 一样工作,考虑到您的数据量,如果您坚持使用它,您的生活会简单得多,除非您期望指数增长 :) 此外,您没有提到是否您的数据得到更新,这对于做出正确的决定非常重要。

话虽如此,您有很多选择,这里有一些:

  • 如果您可以等待结果:编写一个 MapReduce 任务来进行扫描、排序并检索前 X 行,对于每种排序类型您真的需要超过 1000 页(20-50k 行)吗?。另一种选择是使用类似 Hive 的东西.

  • 如果您可以聚合数据并“缩减”数据集:编写一个 MapReduce 任务以定期将最新的聚合数据导出到 SQL 表(它将处理查询)。我已经这样做了几次,效果非常好,但这取决于您的要求。

  • 如果您有足够的存储空间:编写一个 MapReduce 任务以定期为每个属性重新生成(或附加数据)一个新表(按行键排序)。您不需要多个表,只需在每种情况下的行键中使用一个前缀,或者,如果您不需要表并且不会有很多查询,只需将排序后的数据写入 csv 文件并将它们存储在HDFS,您的前端应用可以轻松读取它们。

  • 手动维护二级索引:它不太能容忍模式更新和新属性,但对于接近实时的结果非常有用。为此,您必须更新代码以写入具有良好缓冲区的辅助表,以帮助提高性能,同时避免热点区域。想想这种类型的行键:[4B SORT FIELD ID (4 chars)] [8B SORT FIELD VALUE] [8B timestamp],只有一列存储主表的行键。要检索按任何字段排序的数据,只需使用 SORT FIELD ID 作为起始行 + 起始排序字段值作为分页基准执行扫描(忽略它以获取第一页,然后设置检索到的最后一页),即您将拥有主表的行键的方式,您可以对其执行 multiget 以检索完整数据。请记住,您需要一个小脚本来扫描主表并将数据写入现有行的索引表。

  • 依靠您提到的通过协处理器进行的任何自动二级索引,尽管我根本不喜欢这个选项。

关于java - Hbase 按列限定符排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20975405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com