3.2.4 数据查询方式2

使用Filter很方便的进行查询到需要的数据行, 但是需要全表查询, 然后对查询到的结果进行过滤, 查询效率不高. 实际使用中并不是很普遍使用.

实际使用中, 只要 rowKey 设计得当, 完全可以通过startRow, stopRow 方式查询, 不用全表查询, 从而提高查询的效率.


我们原来的rowkey是这样设计的:

0001_110_2018-01-01 11:01:08_120_0120_0
0001_119_2018-01-02 11:01:08_110_0120_0
...

0001 : 分区只和 call1 和通话年月有关

所以, 如果按照顺序来取的话, 我们只能查询到 110 作为主叫, 110 作为被叫无法通过 startRow和endRow的方式查找出来.

如果当 110 是被叫的时候, 如果把它放在 call1 的位置, 而不是放在 call2 的位置就可以通过startRow和endRow的方式来查询了.


所以, 可以这样设计:

每当有一条通话记录的时候, 我们可以向 HBase 中插入两条记录:

  1. 主叫在 call1 的位置, 被叫在 call2 的位置. flag 置为 0

  2. 主叫在 call2 的位置, 被叫在 call1 的位置. flag 置为 1

虽然增加了存储了, 但是能提供查询速度(相比使用过滤器), 就是典型的用空间换时间.

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-01-14 05:27:28

results matching ""

    No results matching ""