工作中遇到的问题:百万条数据的查询、删除、修改效率提高的一些思考,解决方案(一)

本文探讨了在处理百万级地图数据更新时,通过建立索引、多线程并行处理,实现高效的大数据更新与入库管理流程。重点介绍了如何在大数据场景下优化更新过程,确保性能稳定和数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高德地图把全国的地图按照1:2.5万的比例尺划分为102955个图幅,以图幅为单位进行数据的编辑、更新与发布,每个图幅的数据在进行更新的时候会有一个对应的版本号进行识别,每个图幅都会有一个唯一的ID号作为标识,并且可以通过地理坐标计算得到其相应的坐标。

最近在工作中,需要将数据生产部门提供的地图数据中的 路网数据进行入库管理,并且实现实时的更新,10W多个图幅的道路数据总共有百万条。

按照数据生产部门的需求,每条道路数据后面需要加上版本号信息,但是道路数据本身并没有版本信息,因此,图幅号需要由外部进行写入。

当有新的数据以图幅的形式发布以后,就需要实时的将数据库中的数据进行更新,更新的过程就包括老数据的删除、新数据的插入、版本号的写入。每一次更新无法确定更新的数据量,因此,在设计的时候需要考虑在最大数据量时,按照增量入库的方式进行入库时的效率问题。

业务流程:

1、得到更新的图幅数据;

2、按照图幅ID删除数据库中对应图幅数据对应图幅的老数据;

3、插入新数据;

4、按照图幅ID更新版本信息。

问题描述:

由于整个库中有百万条记录,因此在按图幅ID删除和更新版本信息时会出现效率低下的问题。

思考过程:

首先想到的是多线程去做,一开始想到如果能开10W多个线程同时去连接postgres数据库进行并行处理那效果是好的,但是一台机器一定是无法扛住如此大的访问量,后来问了一下有经验的人,一般开10个进程就可以了,后人家又提到了可以把那个字段建个索引(没有经验真是硬伤,这么简单的问题都想不到)偷笑

所以,其它解决方案很简单:按图幅ID建个索引,开多线程并行处理。

解决的方法和代码片段放到下一篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值