gpt4 book ai didi

python - 你如何使 Python/PostgreSQL 更快?

转载 作者:太空狗 更新时间:2023-10-29 22:06:11 25 4
gpt4 key购买 nike

现在我有一个日志解析器读取 515mb 的纯文本文件(一个文件代表过去 4 年的每一天)。我的代码目前是这样的:http://gist.github.com/12978 .我使用过 psyco(如代码中所示),我也在编译它并使用编译后的版本。它每 0.3 秒执行大约 100 行。该机器是标准的 15"MacBook Pro(2.4ghz C2D,2GB RAM)

这是否有可能运行得更快,或者这是对语言/数据库的限制?

最佳答案

不要浪费时间分析。时间总是在数据库操作上。尽可能少做。只需最少的插入次数。

三件事。

一个。不要一遍又一遍地选择以符合日期、主机名和人员维度。一次将所有数据提取到 Python 字典中,并在内存中使用它。不要重复单例选择。使用 Python。

两个。不要更新。

具体来说,不要这样做。这是糟糕的代码有两个原因。

cursor.execute("UPDATE people SET chats_count = chats_count + 1 WHERE id = '%s'" % person_id)

它被一个简单的 SELECT COUNT(*) FROM ... 取代。从不更新以增加计数。只需计算带有 SELECT 语句的行数。 [如果您不能使用简单的 SELECT COUNT 或 SELECT COUNT(DISTINCT) 执行此操作,则您丢失了一些数据——您的数据模型应始终提供正确的完整计数。永不更新。]

还有。切勿使用字符串替换来构建 SQL。完全愚蠢。

如果由于某种原因 SELECT COUNT(*) 不够快(首先进行基准测试,然后再做任何蹩脚的事情),您可以将计数结果缓存在另一个表中。在所有负载之后。执行 SELECT COUNT(*) FROM whatever GROUP BY whatever 并将其插入到计数表中。不要更新。曾经。

三个。使用绑定(bind)变量。总是。

cursor.execute( "INSERT INTO ... VALUES( %(x)s, %(y)s, %(z)s )", {'x':person_id, 'y':time_to_string(time), 'z':channel,} )

SQL 永远不会改变。绑定(bind)的值会改变,但 SQL 永远不会改变。这要快得多。永远不要动态构建 SQL 语句。绝不。

关于python - 你如何使 Python/PostgreSQL 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/136789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com