我试图看到其他类似的问题,但他们并没有给我正在寻找的答案。我的主要目标是将大型数据集存储到Google云端。我试图将大约1000个插入语句存储到谷歌云中,并且进展顺利。
另一方面,存储超过200.000插入语句证明是挑战比我想象的。在我的代码中,我有这个功能:
def insert_to_gcloud(information):
db = psycopg2.connect(database="database",
user="user",
password="password",
host="host",
port=1234)
cur = db.cursor()
cur.execute("".join(information))
db.commit()
db.close()
我使用批量插入(假设更快),其中第一个索引包含insert语句和其余值。然后我使用"" .join()将其变成一个字符串。举一个简单的例子:
INSERT INTO tbl_name(a,b,c)VALUES(1,2,3),(4,5,6),(7,8,9);
["INSERT INTO tbl_name (a,b,c) VALUES",
"(1,2,3)," ,
"(4,5,6)," ,
"(7,8,9);" ]
首先,我尝试执行200.000插入语句,但是大约1分钟后我收到了关于EOF的错误。我想这是发送大,所以我做了一个块功能。基本上,它根据我的需要将数组划分为适当的大小。 (reference)
然后使用简单的for循环一次存储每个块:
for i in range(len(chunk_block)):
insert_to_gcloudd(chunk_block[i])
好像它有效,但我让它跑了一晚,用了237分钟,我收到了这条消息:
psycopg2.OperationalError:服务器意外关闭了连接 这可能意味着服务器异常终止 处理请求之前或处理时。
我的下一个测试是将块块存储到文件中,读取并记录文件。如果服务器再次意外关闭,我可以检查日志。想到,在我看来,这不是一个很好的方法,但我在这里没有想法。
所以对我的问题,我可以尝试任何选择吗?也许我还可以使用其他工具?