полностью абстрактный источник данных для объекта? - PullRequest
2 голосов
/ 01 ноября 2011

Заранее извиняюсь, если этот вопрос слишком общий или существует решение, которое я не нашел в процессе поиска.

Я работал на простом REST-сервере с web.py, и моим бэкэндом был mysql, поэтому я использовал декларативные объекты sqlalchemy. Все работает на удивление хорошо, но я оказался довольно тесно связан с использованием базы данных, которую поддерживает sqlalchemy в то время. Если бы я захотел перейти на mongodb или что-то еще, мои декларативные классы, специфичные для sqlalchemy, пришлось бы переписать или удалить.

Мне было интересно, есть ли какой-нибудь проект (или, в более общем случае, пример шаблона проектирования), который позволил бы вам подключить любой бэкэнд. Я уверен, что потребовалось бы приличное количество кода, чтобы переключиться с SQL-сервера на Mongo-сервер (например), но если бы были какие-то хорошо известные стратегии, чтобы минимизировать боль, мне было бы очень любопытно услышать о них.

Большое спасибо за любые ответы!

1 Ответ

0 голосов
/ 01 ноября 2011

Это может помочь вам выбрать ORM для MongoDB:

MongoDB ORM для Python?

Мне трудно поверить, что любой переход от реляционной базы данных к NoSQL под капотом ORM будет беспрепятственно работать для любого нетривиального проекта. Однако, если вам действительно необходимо выполнить миграцию в какой-то момент, есть некоторые ORM, которые имеют семантику, аналогичную SQLAlchemy (Ming выглядит многообещающе, но я еще не использовал ее).

Возможно, вы захотите взглянуть на архитектуру StackOverflow, описанную в High Scalability . В двух словах, базы данных SQL могут продвинуться очень далеко.

Также взгляните на Дело против фреймворков ORM в архитектурах с высокой масштабируемостью и подумайте, хотите ли вы использовать ORM, когда вам нужно уменьшить масштаб.

Можно также использовать оба: базу данных SQL, где вам нужны транзакции, базу данных NoSQL для ведения журнала, события и другие поля, в которых базы данных NoSQL хороши.

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