栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Django中优化Postgresql数据库写入的性能?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Django中优化Postgresql数据库写入的性能?

通过您的应用程序去和处理每一行是 很多 慢,直接将数据加载到服务器。即使使用优化的代码。另外,插入/在一个时间更新一行是 很多 又慢于处理的一次。

如果导入文件在服务器本地可用,则可以使用

COPY


。否则,您可以
copy
在标准界面中使用meta命令
psql
。您提到了JSON,为此,您必须将数据转换为合适的平面格式,例如CSV。

如果只想向表中添加新行:

COPY tbl FROM '/absolute/path/to/file' FORMAT csv;

或者,如果您想插入/更新一些行:

首先,请为temp_buffers使用足够的RAM
(如果可以的话,至少暂时使用),这样就不必将temp表写入磁盘。请注意,必须在访问 会话中的任何临时表之前完成
此操作

SET LOCAL temp_buffers='128MB';

内存中的表示要比数据的on.disc表示占用更多的空间。因此,对于一个100 MB的JSON文件..减去JSON开销,再加上一些Postgres开销,128
MB可能足够,也可能不够。但是您不必猜测,只需进行测试并进行测量:

select pg_size_pretty(pg_total_relation_size('tmp_x'));

创建临时表:

CREATE TEMP TABLE tmp_x (id int, val_a int, val_b text);

或者,仅复制现有表的结构:

CREATE TEMP TABLE tmp_x AS SELECT * FROM tbl LIMIT 0;

复制值(应该花 几秒钟 ,而不是几小时):

COPY tmp_x FROM '/absolute/path/to/file' FORMAT csv;

从那里使用简单的旧SQL进行INSERT / UPDATE。在计划复杂的查询时,您甚至可能想要在临时表上添加一两个 索引 并运行

ANALYZE

ANALYZE tmp_x;

例如,要更新现有行,并匹配

id

UPDATE tblSET    col_a = tmp_x.col_aUSING  tmp_xWHERe  tbl.id = tmp_x.id;

最后,删除临时表:

DROP TABLE tmp_x;

或者在会话结束时自动将其删除。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/652998.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号