Postgres公式ページにも書いてありますが、オートコミットを使うと遅くなります。どれくらいか、というのを調べました。
#!/usr/bin/python
import psycopg2
import sys
conn_string = "host='localhost' dbname='my_database' user='postgres' password = 'postgres'"
print("Connecting to database\n ->%s" % (conn_string))
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
print("Connected!\n")
これで接続したところからスタートします。適当にテーブルを作ります。列名はt0, time, v0, v1としています。テーブルが空の状態から1000回同じデータを入れてみます。
import time
import numpy as np
import pandas as pd
# init, drop if exists
cursor.execute('DROP TABLE IF EXISTS table1')
cursor.execute('CREATE TABLE table1 (t0 text, time timestamptz, v0 integer, v1 integer);')
Autocomitt OFF
conn.autocommit = False
start_time = time.time()
for i in range(1000):
cursor.execute('''INSERT INTO table1 (t0, time, v0, v1)
VALUES (%s, %s, %s, %s)''',
('test', '2017-10-10 09:10:15', 1, 0))
elapsed_time = time.time() - start_time
print("elapsed time: {}".format(elapsed_time) + "[sec]")
conn.commit()
elapsed time: 0.07536649703979492[sec]
Autocomitt ON
conn.autocommit = True
start_time = time.time()
for i in range(1000):
cursor.execute('''INSERT INTO table1 (t0, time, v0, v1)
VALUES (%s, %s, %s, %s)''',
('test', '2017-10-10 09:10:15', 1, 0))
elapsed_time = time.time() - start_time
print("elapsed time: {}".format(elapsed_time) + "[sec]")
elapsed time: 10.754042863845825[sec]
オートコミットON ・・・ 10.8秒
オートコミットOFF・・・ 0.075秒
ということで、1000回挿入で10倍ほどの差が出ることが分かりました。
0 件のコメント:
コメントを投稿