对于30亿甚至更大数据的增量更新,选用什么大数据方案比较好?

数据源比方说是机场的航班数据,量在每天1亿。需要每天运行spark任务将航班数据转换为一定格式的结果数据(每天的结果数据有1亿,已经存在的结果数据30亿)。然后以结果数据的id做增量更新(原始结果有的话 更新,没有的话插入,将每天的1亿更新到30亿里)

这种场景用mysql 或者 oracle的话有对应的语法,比如oracle的mergeinto 一次就做完,但是mysql 和oracle 难以支撑这么大的数据量。

hbase 又不支持 merge into这种语法,需要将结果数据全量加载进来再和每天处理的数据作比对,这个过程很慢而且对内存的压力很大。

请问专家,这种场景该如何选型解决?

3回答

美国队长美国队长  研发工程师 , Alibaba
atpeace331routerstp月光满楼等赞同了此回答
可以从你的底层存储方式着手,比如你的30亿数据是否可以划分成3层,内存区,热存储区,冷数据区,新的数据过来,先放内存,然后后台进程自动对内存中的数据跟热区数据进行比对是否存在,设置数据降级机制,哪些数据可能用的比较少可以先从内存中降级到热存储区如果你想用hbase的话,建议你根...显示全部

可以从你的底层存储方式着手,比如你的30亿数据是否可以划分成3层,内存区,热存储区,冷数据区,新的数据过来,先放内存,然后后台进程自动对内存中的数据跟热区数据进行比对是否存在,设置数据降级机制,哪些数据可能用的比较少可以先从内存中降级到热存储区
如果你想用hbase的话,建议你根据你的业务场景事先分配好region,1天的数据过来再插入之前可以用bloomfilter这个高效率的判断是否存在而不需要全部数据都加载到内存中,然后利用批量bulkload的方式,当然你要注意你的memstore设置大小,你的hstore设置大小
不管哪种数据插入方式肯定都后台去执行的插入操作。
个人想法,有错地方还请指出

收起
 2017-07-05
浏览4425
z630860668 邀答
JhonJhon  技术经理 , 智慧农信
atpeace331gossipyboy赞同了此回答
在数据字段上加入哈希值 通过分组验证插入 分组策略自定义 从实际上取消数据库的读运算 减少数据库的读压力,插入也是分组的 一般在数据库上做了分区 ,有多个的缓冲池 可以大大加速插入...显示全部

在数据字段上加入哈希值 通过分组验证插入 分组策略自定义 从实际上取消数据库的读运算 减少数据库的读压力,插入也是分组的 一般在数据库上做了分区 ,有多个的缓冲池 可以大大加速插入

收起
 2017-07-05
浏览4266
redgreatredgreat  数据库管理员 , leadcom
gossipyboy赞同了此回答
在用kettle的insert/update,抽取源数据的每天新增/变动量,跨库新增至目标数据库,缺点就是速度很慢,有时还莫名其妙的丢数据不更新!显示全部

在用kettle的insert/update,抽取源数据的每天新增/变动量,跨库新增至目标数据库,缺点就是速度很慢,有时还莫名其妙的丢数据不更新!

收起
 2017-07-05
浏览4168

提问者

z630860668研发工程师, 网易

问题状态

  • 发布时间:2017-07-05
  • 关注会员:5 人
  • 问题浏览:7108
  • 最近回答:2017-07-05
  • 关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
    © 2019  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30