SQLAlchemy кэш объектного уровня - PullRequest
0 голосов
/ 17 октября 2018

Я переключаю свое приложение с SQLObject на SQLAlchemy, потому что его разработка и сообщество гораздо более активны.

Два ORM совершенно разные.SQLObject не имеет транзакций и имеет собственный кеш.SQLAlchemy имеет кэш сеанса, но срок его действия истекает после session.commit.Включение автоматической фиксации исключает любой кэш.

Срок действия кэша после session.commit значительно снижает производительность.

Я рассмотрел кэширование в "собачьих кучах", но похоже, что он кэширует конкретные запросы, а не объекты.Я ищу кеширование на уровне объекта, которое сохраняется после session.commit.То есть, если я делаю order.Item, он должен проверить кеш на предмет order.ItemID и, если его там нет, перейти в базу данных и добавить order.Item в кеш.

Edit:

Я только что обнаружил флаг expire_on_commit:

    Session = sqlalchemy.orm.sessionmaker(bind=engine, expire_on_commit=False)

Создатель SQLAlchemy сказал this :

Итак, долгое время, через 0,4по умолчанию было «никогда и даже невозможно».Срок действия коммита не истек, в то время я думал, что было бы безумно выбрасывать все те великолепные данные, которые вы загрузили, если вы этого абсолютно не хотите.

В SQLObject у меня был отключен кеш, поэтому у меня уже есть объекты, срок действия которых истекает вручную.Поэтому отключение expire_on_commit должно сделать переход более естественным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...