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

来源:互联网 发布:java软件开发图形界面 编辑:程序博客网 时间:2024/06/02 07:20

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

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

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

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

业务流程:

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

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

3、插入新数据;

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

问题描述:

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

思考过程:

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

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

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

0 0
原创粉丝点击