Итак, в настоящее время я пытаюсь создать новое приложение, используя flask -restful для бэкэнда, и я все еще учусь, поскольку все это довольно ново для меня. Я уже настроил все с несколькими различными таблицами mySQL, подробно описанными далее, и со всеми взаимосвязями между ними, и все, кажется, работает нормально, за исключением того, что процесс вставки новых данных довольно медленный.
Вот (упрощенное) объяснение текущей настройки у меня есть. По сути, у меня прежде всего есть одна таблица «Полеты».
class FlightModel(db.Model):
__tablename__ = "Flights"
flightid = db.Column(db.Integer, primary_key = True, nullable=False)
[Other properties]
reviewid = db.Column(db.Integer, db.ForeignKey('Reviews.reviewid'), index = True, nullable = False)
review = db.relationship("ReviewModel", back_populates="flight", lazy='joined')
Эта таблица затем указывает на таблицу «Обзоры», в которой я храню глобальный обзор, оставленный пользователем.
class ReviewModel(db.Model):
__tablename__ = "Reviews"
reviewid = db.Column(db.Integer, primary_key = True, nullable = False)
[Other properties]
depAirportReviewid = db.Column(db.Integer, db.ForeignKey('DepAirportReviews.reviewid'), index=True, nullable = False)
arrAirportReviewid = db.Column(db.Integer, db.ForeignKey('ArrAirportReviews.reviewid'), index=True, nullable = False)
airlineReviewid = db.Column(db.Integer, db.ForeignKey('AirlineReviews.reviewid'), index=True, nullable = False)
flight = db.relationship("FlightModel", uselist=False, back_populates="review", lazy='joined')
depAirportReview = db.relationship("DepAirportReviewModel", back_populates="review", lazy='joined')
arrAirportReview = db.relationship("ArrAirportReviewModel", back_populates="review", lazy='joined')
airlineReview = db.relationship("AirlineReviewModel", back_populates="review", lazy='joined')
Затем можно оставить более подробный обзор различных аспектов полетов, сохраненный в еще одной таблице (например, в следующей таблице DepAirportReviews: всего на этом уровне три таблицы).
class DepAirportReviewModel(db.Model):
__tablename__ = "DepAirportReviews"
reviewid = db.Column(db.Integer, primary_key = True, nullable = False)
[Other properties]
review = db.relationship("ReviewModel", uselist=False, back_populates="depAirportReview", lazy='joined')
Процесс вставки медленный (обычно для вставки требуется 1 секунда за полет, что является проблемой, когда я пытаюсь выполнить массовую вставку нескольких сотен из них).
Я понимаю, что это из-за всех этих взаимосвязей и это подразумевает все поездки в базу данных, чтобы получить разные идентификаторы для разных таблиц. Это правильно? Могу ли я что-нибудь сделать, чтобы решить эту проблему, или мне нужно будет изменить дизайн таблиц, чтобы удалить некоторые из этих связей?
Спасибо за любую помощь!
РЕДАКТИРОВАТЬ: отображение SQL выполнено прямо показал, что я ожидал: всего 7 простых запросов выполняются для каждой вставки, каждый занимает ~ 300 мс. Это довольно долго, я думаю, это в основном из-за времени, чтобы добраться до сервера. Ничего не поделаешь, кроме удаления некоторых внешних ключей, верно?