Я получаю данные json с шины обмена сообщениями и выгружаю этот json в базу данных. Я неплохо работал с psycopg2, делающим ~ 3000 записей в секунду в postgres. По ряду причин мы с тех пор перешли на SQL Server 2016, и мои записи упали примерно до 100 в секунду.
У меня есть функция с именем insert_into (), которая вставляет json в базу данных. Все, что я действительно сделал с моей функцией insert_into (), это изменил библиотеку на pyodbc и строку подключения. Кажется, что мое замедление связано с настройкой, а затем разрывом соединения при каждом вызове моей функции ('conn' в приведенном ниже коде). Если я переместу строку, которая устанавливает соединение, за пределы моей функции insert_into, моя скорость вернется. Мне просто интересно две вещи:
- Как правильно настроить такие подключения с точки зрения SQL Server?
- Это даже лучший способ сделать это в postrgres?
Для SQL Server сервер 2016, использует драйвер 17 ODBC, аутентификация SQL.
Медленно для SQL Server:
def insert_into():
conn = None
try:
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=server1;DATABASE=json;UID=user;PWD=pass')
cur = conn.cursor()
for i in buffer_list:
command = 'INSERT INTO jsonTable (data) VALUES (%s)' % ("'" + i + "'")
cur.execute(command)
cur.close()
conn.commit()
except (Exception, pyodbc.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
Fast для SQL Server:
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=server1;DATABASE=json;UID=user;PWD=pass')
def insert_into():
#conn = None
try:
cur = conn.cursor()
for i in buffer_list:
command = 'INSERT INTO jsonTable (data) VALUES (%s)' % ("'" + i + "'")
cur.execute(command)
cur.close()
conn.commit()
except (Exception, pyodbc.DatabaseError) as error:
print(error)
This daemon runs 24/7 and any advice on setting up a fast connection to MSSQL will be greatly appreciated.