基于内存数据库做大数据运算是否靠谱? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
whats
V2EX    程序员

基于内存数据库做大数据运算是否靠谱?

  •  
  •   whats 2022-11-01 09:09:45 +08:00 3600 次点击
    这是一个创建于 1075 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景:从不同数据源(大数据集群、API 接口、文件等)抽取结构化数据,执行交并差,格式转换、分行分列等运算。数据源和算法可自由组合,过程用 DAG 图表示,是逐步分析的过程,存在多个中间结果。目前的做法是将原始数据及运算过程中间结果抽取到 MPP 库,借助 MPP 库运算。

    存在的问题:
    1 ) MPP 库入库性能一般,导致整个 DAG 图的执行效率偏低。
    2 ) 运算过程产生了大量临时表,需要定期清理。
    3 ) MPP 库的部分 SQL 语句运算效率并不理想。

    初步优化思路:
    1 ) 将中间运算过程放到内存数据库运算,大部分情况不需要持久化中间结果数据。
    2 ) 将最终结果持久化 MPP 库,供后续使用

    问题:
    1 ) 该优化思路是否合理?有没其他更靠谱的方式?
    2 ) 有没推荐的内存数据库选型?
    16 条回复    2022-11-02 08:40:42 +08:00
    kele1997
        1
    kele1997  
       2022-11-01 09:22:32 +08:00
    spark 临时表
    jeesk
        2
    jeesk  
       2022-11-01 09:40:17 +08:00
    flink 试一试
    sunmacarenas
        3
    sunmacarenas  
       2022-11-01 09:55:52 +08:00 via Android
    SAP HANA 可以尝试一下,不过成本非常高
    linfx7
        4
    linfx7  
       2022-11-01 09:58:53 +08:00
    trino 或者 presto 试一试
    F281M6Dh8DXpD1g2
        5
    F281M6Dh8DXpD1g2  
       2022-11-01 10:03:02 +08:00 via iPhone
    内存放不下的咋办
    1996wang
        6
    1996wang  
       2022-11-01 10:03:30 +08:00
    1.整个过程不要求实时计算,那么直接原始数据入 mpp 库,整个 dag 在 mpp 里执行.就是数仓那一套.
    2.整体要实时计算,可以试试 flink,最后把结果写入 mpp,供后续使用. 至于中间结果,可以就一整套 flink sql(这种中间状态会变大,不可控),或者中间结果打入 redis,flink 实时异步关联
    Exception615
        7
    Exception615  
       2022-11-01 10:10:16 +08:00
    计算的过程交给 MPP 感觉不太合适,大数据量的批处理还是 spark 比较合适,支持的数据源种类也多
    lookStupiToForce
        8
    lookStupiToForce  
       2022-11-01 11:16:25 +08:00
    不说数据量?
    你内存要够大到几个 T 的地步,那确实一般情况随便上内存数据库做运算只把最后结果落盘啊?但数据量一大起来,几个 T 也不够看的
    w0017
        9
    w0017  
       2022-11-01 11:39:08 +08:00
    spark-redis 了解下。
    whats
        10
    whats  
    OP
       2022-11-01 11:57:13 +08:00
    @lookStupiToForce 对数据量做了限制,超出内存大小的计算直接拒绝,内存一般可以配置到 1TB 以上
    tulumu
        11
    tulumu  
       2022-11-01 11:58:57 +08:00
    如果是简单 etl, 建议实时就 flink sql +udf, 离线就 hive/spark, 想方便就还继续 mpp 数据库吧, 毕竟一把梭
    ConfusedBiscuit
        12
    ConfusedBiscuit  
       2022-11-01 12:03:06 +08:00
    内存数据库的方案我玩过,先说结论,玩好了效果很好

    用的是 Hive Transform + Python 脚本 + Python 内置的 SQLite 模块做内存数据库。只要控制好每个节点数据量(比如根据某个 id hash 到不同 reducer ,这样就能承载很大的总数据量),效果就非常好,比我那个项目以前的方案强很多。当时这个方案由于效果太好还在公司内有些反响
    lookStupiToForce
        13
    lookStupiToForce  
       2022-11-01 12:28:05 +08:00
    @whats #9
    除了 spark 和 flink ,
    补充一个 Apache Ignite (这个才是和 redis 一类的真内存数据库,支持内存数据表 session 持久化,支持 acid )

    https://stackoverflow.com/questions/36036910/apache-spark-vs-apache-ignite

    不过所有内存的东西不落盘都不靠谱,即便你能用上持久化内存也一样,所以你得切分清楚哪些东西是进了内存库后往里读 /往外写了一半全丢了也不要紧
    motecshine
        14
    motecshine  
       2022-11-01 13:11:40 +08:00
    ramdisk 可以试试
    fenghao
        15
    fenghao  
       2022-11-02 06:51:11 +08:00
    使用内存数据库肯定是一个好的解决方案,redis 咋样?但我看你的需求在大量计算而非 IO ,不知道具体怎么样,可能 bottleneck 并不在 IO 上。
    whats
        16
    whats  
    OP
       2022-11-02 08:40:42 +08:00
    @fenghao 因为不涉及复杂的计算,目前的方式,时间反而耗在 IO 上比较
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     876 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 21:49 PVG 05:49 LAX 14:49 JFK 17:49
    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