好友
阅读权限30
听众
最后登录1970-1-1
|
因为你就需要一个字段(a1)对比,所以是很简单的一个东西
可以使用任意后端语言如python,golang,java 写个脚本
2个方案:使用数据库和不使用数据库
1.无需数据库
如果你确定 现在以及将来 200w+的数据 永远跑不满你内存的话,
直接一次性读取数据库数据到内存,如建立一个map, key是a1,所有值是value.通过key对比,直接替换.然后把map dump出来.下次对比直接读之前的文件到内存,对比,再保存.
用时限制是写到磁盘的时间.基本和条数无关.只和所有数据大小有关.8G数据,固态的话1分钟差不多了
2.如果你数据量大,内存不够
就用你现在的数据库就行,学习新数据库成本太大
需要的是写一个脚本把csv转为sql,需要注意一下几点
1.把a1设成唯一.这需要你数据库的数据a1不会重复,重复的话写个sql找一下删一下就好了
2.取一批(注意是一批,不要一条一条的)插入/更新.
3.无需更新部分字段,因为这要你拿出来,python对比,太麻烦了.直接更新全部字段即可
如下sql:
`
INSERT INTO users (A1, name, email)
VALUES (1, 'Alice', 'alice@example.com')
ON DUPLICATE KEY UPDATE
name = VALUES(name),
email = VALUES(email);
INSERT INTO users (A1_2, name, email)
VALUES (1, 'Alice', 'alice@example.com')
ON DUPLICATE KEY UPDATE
name = VALUES(name),
email = VALUES(email);
//第三条...
//第N条...
`
因为数据库的瓶颈在传输上,所以要批量插入/更新,同时要选一个合适的batchsize,就是一次更新多少条
感觉mysql/postgres/其他非内存数据库 性能差距不大
时间上也是看新的csv有多大,
1G新数据CSV的话
如果是普通机械硬盘(HDD),可能需要 10-30 分钟。
如果是固态硬盘(SSD),可能需要 5-15 分钟。
ps:
MPP数据库你并用不上,那是针对PB级数据,复杂查询(比如需要多字段且需对多字段内容处理后对比是否一致) |
|