百万到亿级数据的快速条件查询 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sli
V2EX    问与答

百万到亿级数据的快速条件查询

  •  
  •   sli 2017-07-12 15:16:01 +08:00 8613 次点击
    这是一个创建于 3012 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个分析系统, 需要按照日期和一个 index 来查询所有符合条件的 id. 再去重,然后通过 ID 来拿相对的属性.

    现有的架构是用 Hbase 来存储数据, 以date_index 为 rowkey, id 作为 qualifier, 查询直接拿 key 去 get, 简单测试发现取得数据的速度达不到要求. 获取两条数据花费接近两分钟... 实际查询需要获取上百条...

    再之前的做法是以id为 rowkey, date_index 作为 qualifier 然后使用 Hbase 的 ColumnPrefixFilter 来过滤再取所有的 rowkey, 但是查 doc 发现 filter 会做全表扫描... 鉴于数据量每天的增长大概在百万级, 这个性能会随着运行时间越来越差...

    现在的想法是用 ElasticSearch 来做, 直接把属性也索引进去, 求问有没有什么更好的做法...

    20 条回复    2017-07-13 19:22:32 +08:00
    F281M6Dh8DXpD1g2
        1
    F281M6Dh8DXpD1g2  
       2017-07-12 16:01:28 +08:00   1
    为啥不预先算好
    apoclast
        2
    apoclast  
       2017-07-12 16:11:02 +08:00   1
    elasticsearch 可以, 不过亿级略微困难
    sli
        3
    sli  
    OP
       2017-07-12 16:16:26 +08:00
    @liprais 因为查询的这个日期是可选的, 没法预测时间范围...也想过全都提前算好, 把所有可能的时间范围都算一遍...到后期的话, 这个量也是起飞的...
    sli
        4
    sli  
    OP
       2017-07-12 16:19:05 +08:00
    @apoclast 困难是说不太能做到实时么?
    server
        5
    server  
       2017-07-12 16:23:56 +08:00   1
    没有耕坏的地,只有累死的牛,es 还怕这个!!!
    zhmin
        6
    zhmin  
       2017-07-12 18:58:54 +08:00 via iPhone   1
    我觉得是你的 rowkey 没设计好,可以试试用日期和 index 拼接起来,构建 rowkey。亿级的数量,对于 hbase 完全扛得住
    funky
        7
    funky  
       2017-07-12 19:21:56 +08:00   1
    上 OLAP kylin
    rrfeng
        8
    rrfeng  
       2017-07-12 19:42:05 +08:00   1
    两条数据是只 date 范围加 index 联合获取到的 ID 去重之后只有 2 条?
    这个关键在于 index 的区分度啊,不是什么系统能解决的

    另外觉得这个 HBase 比 ES 靠谱。
    rrfeng
        9
    rrfeng  
       2017-07-12 19:42:15 +08:00
    加机器…
    sli
        10
    sli  
    OP
       2017-07-12 20:25:11 +08:00 via iPhone
    @zhmin 现在 rowkey 就是 date 加 index,然后把 id 作为列名,试了下这么取的话,挺慢的...而且 hbase 的 sharding 是按行的,这百万个列全在一个 region,取的时候可能没有真的利用到分布式存储,取连续的行的时候,压力全在一台机子上...
    sli
        11
    sli  
    OP
       2017-07-12 20:26:45 +08:00 via iPhone
    @rrfeng 是按照 date 加 index 这种 rowkey 的方式取了两行,两个一百万列的行,然后取列名去重之后大概还是百万个 ID...
    sli
        12
    sli  
    OP
       2017-07-12 20:27:11 +08:00 via iPhone
    @funky 谢谢,明天我试试
    MasterC
        13
    MasterC  
       2017-07-12 20:29:28 +08:00
    impala
    sli
        14
    sli  
    OP
       2017-07-12 20:30:59 +08:00 via iPhone
    @MasterC 谢谢,我试试
    zhmin
        15
    zhmin  
       2017-07-12 21:51:01 +08:00 via iPhone
    @sli 这个过程是 hbase 查询数据慢,还是去重慢。如果是去重慢,是不是可以加 spark 优化?
    zhmin
        16
    zhmin  
       2017-07-12 21:59:58 +08:00 via iPhone
    @sli 抱歉,问题没看清楚。
    sli
        17
    sli  
    OP
       2017-07-12 22:33:10 +08:00 via iPhone
    @zhmin 是 hbase 取数据慢,spark 可能不太适合这个,hbase 里存的算是对于源数据经过计算之后的中间结果,是在中间结果上做 aggregation 然后展示,要求尽可能实时展示结果...数据量小的话没问题,百万条数据的话 Hbase 就不太能胜任了...
    slixurd
        18
    slixurd  
       2017-07-12 23:47:32 +08:00   1
    ElasticSearch 能做到千万级数据 TP99 几十毫秒的性能
    不过也取决于磁盘速度,最好能上 SSD/内存
    sli
        19
    sli  
    OP
       2017-07-13 03:05:10 +08:00 via iPhone
    @slixurd 谢谢,今儿试试看
    hienchu
        20
    hienchu  
       2017-07-13 19:22:32 +08:00 via iPhone
    如果是对属性做统计的话,es 在亿级别完全没问题。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     977 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:16 PVG 03:16 LAX 12:16 JFK 15:16
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86