gpt4 book ai didi

Python postgreSQL 非常慢

转载 作者:行者123 更新时间:2023-11-29 12:15:47 26 4
gpt4 key购买 nike

我正在做一个 x 的 for 循环,它是通过 1 个表的 30-50 个 URL 的列表,以查看是否有任何 URL 匹配 ---(它花费了超过 5 秒 )

关于本系统:

  • 这是来自 Heroku.com 的免费数据库,我将其用作测试
  • 正如它在我使用的代码中所说的“postgreSQL
  • 我正在使用 flask_sqlalchemy
  • 我正在运行此本地托管,因此前​​端和后端是我的笔记本电脑,i5 1.9ghz 和 8g 内存。
  • 时间戳差异大约是 5 秒 只是为了检查这 50 个条目 与 1 个用户在线 本地

python 代码。

from flask_sqlalchemy import SQLAlchemy 
app.config['SQLALCHEMY_DATABASE_URI'] = "postgres://***"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = "True"
db = SQLAlchemy(app,session_options={"autoflush": False})

class test1(db.Model):
id = db.Column(db.Integer, primary_key = True)
url = db.Column(db.String(255))
code = db.Column(db.String(255))


def __init__ (self,url,code):
self.url = url
self.code = code

x = [url1,url2,url3,url4,....url50]

t2 = datetime.time(datetime.now())
print("before : ",t2)

for key in x:

y = test1.query.filter(test1.url == key).all()
if y:
print('----i got it')
else:
print('no')

t3 = datetime.time(datetime.now())
print("after forloop : ",t3)

我在聊天室里问过很多人,很多人都有自己不同的怀疑,但没有人能证实为什么一个简单的过程会有这么大的延迟。

最佳答案

您正在为每个测试创建单独的查询,这需要将新的 SQL 语句发送到数据库服务器。

对于位于同一台服务器上的本地数据库来说,这不是什么大问题。但是在 Heroku 上,数据库位于同一台服务器上。数据库位于云中的其他位置,如果这两个位置彼此靠近或相距很远,则取决于您的具体配置。

从非洲连接到任何 Heroku 托管的 Postgres 数据库会因延迟而变慢。您进行的查询数量会加剧这种延迟。

您可以使用一个简单的命令来测试延迟有多少:

time psql postgresql://*** -c select 1;

真实用户 组件之间的区别大致在于一个非常简单的查询到达数据库服务器和返回响应所需的往返时间给你。

如果您部署在 Heroku 上时遇到查询的巨大延迟,那么您的数据库实例和网络 Dyno 可能位于两个不同的区域。至少将其中之一搬迁到同一地区。如果您从自己的机器连接到数据库,那么您还会看到很大的延迟。

在命令行上,运行 heroku info 命令来检查您的应用所在的区域(查找 Region 行)。或者检查您应用程序的 Heroku 控制面板上的设置选项卡。查看Heroku Regions documentation欲了解更多信息,请继续阅读 migrating apps如果您想将其移动到另一个区域。

如果您想将数据库 移动到与您的应用程序相同的区域,我相信您必须重新创建它。创建并下载完整备份,删除数据库附加组件,重新创建它,它应该在与应用程序相同的区域中创建。然后从备份中恢复数据库。

即使您的应用程序 dyno 和数据库位于同一区域,您仍然会看到比在本地计算机上安装 Flask 和 Postgres 时看到的更长的延迟。您将看到多少延迟还取决于具体的 Heroku Postgres plan you pick . Hobby 层(免费)仅允许 20 个连接并且没有内存缓存,因此您需要更频繁地重新使用连接并且您不能指望具有缓存表的服务器对一系列相关查询有用的信息。

关于Python postgreSQL 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497843/

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