我有一个SQL查询,包含大约500k行和47列,我想这个查询被转储到一个csv文件,所以我可以导入到一个新的数据库托管到另一个服务器上的表之后,我的代码没有使用任何花哨的库,这将导致一些开销到过程中,但尽管如此,写大约需要15分钟才能完成。我相信我的代码有问题,但不能定义什么可以加快速度。连接使用python中的cx_oracle
驱动程序。
import config
from pathlib import WindowsPath
import csv
con = cx_Oracle.connect(f'{config.USER_ODS}/{config.PASS_ODS}@{config.HOST_ODS}:{config.PORT_ODS}/{config.SERVICENAME_ODS}')
sql = 'SELECT * FROM ods.v_hsbc_ucmdb_eim'
cur = con.cursor()
output = WindowsPath('result.csv')
with output.open('w',encoding="utf-8") as f:
writer = csv.writer(f, lineterminator="\n")
cur.execute(sql)
col_names = [row[0] for row in cur.description]
writer.writerow(col_names)
for row in cur:
writer.writerow(row)
1条答案
按热度按时间2lpgd9681#
您说从数据库读取数据并写入文件系统大约需要1毫秒/行。当然,有些数据库和文件系统可以更快地处理行。假设Oracle DB可能很忙碌,并且网络带宽有限,则您报告的吞吐量似乎完全合理。您没有指定这47列主要是整数还是BLOB二进制大型对象/文本。
如果您认为在您的环境中更高的吞吐量是可行的,那么请向我们展示将数据库性能与可用网络带宽隔离开来的计时结果。RTT往返时间(ping)也会很有意义。“是关注DB磁盘/ CPU处理能力的好方法,而网络延迟不是等式的一部分。