Как улучшить производительность Python SQLAlchemy с AWS Lightsail? - PullRequest
1 голос
/ 18 марта 2020

Я действительно удивлен медленной вставкой строк с использованием SQLAlchemy с AWS Lightsail до такой степени, что считаю, что, должно быть, я что-то делаю не так.

Я могу выполнять SQL команды через MySQL Workbench, и они обрабатываются за доли секунды, и я могу использовать локальную базу данных sqlite и снова очень быстро. Та же самая вставка с использованием Lighsail занимает> 14 секунд, и 1500 строк не кажутся чрезмерными. Я ценю, что у кого-то не было бы 1500 электронных писем, это был только быстрый пример.

Я все делаю неправильно и есть более эффективный способ добавления / фиксации / использования Lightsail или производительность действительно плохая?

# sqlite example
# Adding:  0:00:00.254232

# aws (Lightsail Database) 
# Adding:  0:00:14.022152

Мой код просто базовый c, используя простой пример из учебника:

from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref, sessionmaker

import datetime

Base = declarative_base()

class Person(Base):
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    addresses = relationship('Address', backref='person',
                                lazy='dynamic')

class Address(Base):
    __tablename__ = 'address'
    id = Column(Integer(), primary_key=True)
    email = Column(String(50))
    person_id = Column(Integer(), ForeignKey('person.id'))

address_list = []
for email in range(1,1500):
    a = Address(email=str(email)+"@hotmail.com")
    address_list.append(a)

p = Person(name='foo', addresses=address_list)
# engine = create_engine("mysql+pymysql://username:password@lrds.amazonaws.com/awstest")
engine = create_engine("sqlite:///testing.sqlite")
Base.metadata.create_all(engine, checkfirst=True)

Session = sessionmaker(bind=engine)

time_start = datetime.datetime.now()
session = Session()
session.add(p)
session.commit()
time_end = datetime.datetime.now()
time_difference = time_end - time_start
print("Adding: ", time_difference)
print(p.addresses.count())

# sqlite example
# Adding:  0:00:00.254232

# aws (Lightsail Database) 
# Adding:  0:00:14.022152
...