吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 354|回复: 14
收起左侧

[经验求助] 关于本地超200W的数据如何进行快速的增删改查对比等操作

[复制链接]
调味包 发表于 2024-10-5 20:11
200吾爱币
本帖最后由 调味包 于 2024-10-7 18:39 编辑

如何有效的快速增删改查本地数据库的内容,更新频次是每周一次,我目前能想到的就是python批量操作csv文本进行读写,麻烦就麻烦再每次都得将最新数据更新到表单内,没有的进行插入,各位大佬有什么好的建议吗?

最佳答案

查看完整内容

因为你就需要一个字段(a1)对比,所以是很简单的一个东西 可以使用任意后端语言如python,golang,java 写个脚本 2个方案:使用数据库和不使用数据库 1.无需数据库 如果你确定 现在以及将来 200w+的数据 永远跑不满你内存的话, 直接一次性读取数据库数据到内存,如建立一个map, key是a1,所有值是value.通过key对比,直接替换.然后把map dump出来.下次对比直接读之前的文件到内存,对比,再保存. 用时限制是写到磁盘的时间.基 ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pzx521521 发表于 2024-10-5 20:11
调味包 发表于 2024-10-8 08:37
是的,如链接的里面的内容一样,有的则进行修改,没有的则进行插入,数据库我也不知道有那些内容。只能是 ...

因为你就需要一个字段(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级数据,复杂查询(比如需要多字段且需对多字段内容处理后对比是否一致)
Kristine_He 发表于 2024-10-5 22:03
使用sqlite,mysql,sqlserver等专业数据库管理工具,合理建立表结构,高效的索引,单机200w的数据增删改查非常快,不是csv所能达到的效果。
pzx521521 发表于 2024-10-6 09:25
最新数据更新到表单内,没有的进行插入
主要是如何判断是不是同一条数据
200w的数据量 很小, 任何数据库都没问题的, 甚至直接读内存都是ok的
注意批量插入就好了
 楼主| 调味包 发表于 2024-10-6 17:37
Kristine_He 发表于 2024-10-5 22:03
使用sqlite,mysql,sqlserver等专业数据库管理工具,合理建立表结构,高效的索引,单机200w的数据增删改查 ...

目前就是使用的python操作数据库,需要插入或者对比数据格式我是以csv文件来保存的
 楼主| 调味包 发表于 2024-10-6 17:39
pzx521521 发表于 2024-10-6 09:25
最新数据更新到表单内,没有的进行插入
主要是如何判断是不是同一条数据
200w的数据量 很小, 任何数据库都 ...

主要是如何判断是不是同一条数据,目前难点就在这,数据量过大,每次插入或修改前都需要跟数据库内容做比对,完了才能确定是插入,还是修改,我感觉过程有点漫长,用py写了一个工具,目前还在完善中,缺少数据库表单字段的规划,后期可能还需要增加字段
pzx521521 发表于 2024-10-6 20:32
调味包 发表于 2024-10-6 17:39
主要是如何判断是不是同一条数据,目前难点就在这,数据量过大,每次插入或修改前都需要跟数据库内容做比 ...

最好能举个例子  如何判断是不是一条数据
现在是全部数据从数据库读出来python判断
还是
用sql来判断

可以看情况使用   用关系型数据库/NoSql型数据库/其他方式
理论上来说200w条总数据量不超10GB的话,直接放内存处理是最快的
(python直接dump二进制文件比数据库快)
10G+以上必须上磁盘就是要用数据库了
cnzefe 发表于 2024-10-6 20:53
感觉优化判断是否同记录的问题,python处理200w应该问题不大,还是放出具体业务逻辑,大神们也好看看怎么优化。
 楼主| 调味包 发表于 2024-10-7 18:37
pzx521521 发表于 2024-10-6 20:32
最好能举个例子  如何判断是不是一条数据
现在是全部数据从数据库读出来python判断
还是

https://www.123865.com/s/1XvlVv-CuzQA?提取码:52pj  这是模拟的数据  sheet1为数据库内容已有,sheet2为需要更新的数据,目前只是少量数据做测试,后期字段可能还要添加一些
 楼主| 调味包 发表于 2024-10-7 18:38
cnzefe 发表于 2024-10-6 20:53
感觉优化判断是否同记录的问题,python处理200w应该问题不大,还是放出具体业务逻辑,大神们也好看看怎么优 ...

https://www.123865.com/s/1XvlVv-CuzQA?提取码:52pj  这是模拟的数据  sheet1为数据库内容已有,sheet2为需要更新的数据,目前只是少量数据做测试,后期字段可能还要添加一些
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 10:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表