我使用以下内容,据我所见,我的性能没有受到任何影响:
import psycopg2
import psycopg2.extras
local_conn_string = """
host='localhost'
port='5432'
dbname='backupdata'
user='postgres'
password='123'"""
local_conn = psycopg2.connect(local_conn_string)
local_cursor = local_conn.cursor(
'cursor_unique_name',
cursor_factory=psycopg2.extras.DictCursor)
我在代码中进行了以下输出来测试运行时(并且我正在解析很多行。超过 30.000.000)。
Parsed 2600000 rows in 00:25:21
Parsed 2700000 rows in 00:26:19
Parsed 2800000 rows in 00:27:16
Parsed 2900000 rows in 00:28:15
Parsed 3000000 rows in 00:29:13
Parsed 3100000 rows in 00:30:11
我不得不提到我不“复制”任何东西。但是我正在将我的行从远程 PostGreSQL 移动到本地行,并且在此过程中创建了更多的表来更好地索引我的数据,因为 30.000.000+ 在常规查询中处理起来有点太多了。
注意:时间是向上计数的,不是针对每个查询的。
我相信这与 mycursor
的创建方式有关。
编辑1:
我正在使用以下内容来运行我的查询:
local_cursor.execute("""SELECT * FROM data;""")
row_count = 0
for row in local_cursor:
if(row_count % 100000 == 0 and row_count != 0):
print("Parsed %s rows in %s" % (row_count,
my_timer.get_time_hhmmss()
))
parse_row(row)
row_count += 1
print("Finished running script!")
print("Parsed %s rows" % row_count)
这my_timer
是我制作的一个计时器类,该parse_row(row)
函数格式化我的数据,将其传输到我的本地数据库,并在数据被验证为已移动到我的本地数据库后最终从远程数据库中删除。
编辑2:
即使在解析了大约 4.000.000 个查询之后,解析我的数据库中每 100.000 行大约需要 1 分钟:
Parsed 3800000 rows in 00:36:56
Parsed 3900000 rows in 00:37:54
Parsed 4000000 rows in 00:38:52
Parsed 4100000 rows in 00:39:50