2012-03-04 3 views
4

Я разрабатываю многопользовательскую игру на Python с флеш-интерфейсом, и я использую ее как возможность узнать больше о способе работы NoSQL.Совместное использование Redis и RDBMS (надеюсь, сотрудничество) в приложениях Flask

Redis, похоже, подходит для некоторых вещей, которые мне нужны для этого приложения, включая хранение серверных сессий и других временных данных, например. какие игры продолжаются, кто в сети и т. д. Есть также несколько хороших рецептов Flask/Redis, которые до сих пор делали очень легкими.

Однако в модели данных все еще есть некоторые вещи, которые я предпочел бы жить в традиционной РСУБД, включая учетные записи пользователей, журналы завершенных игр и т. Д. Это не значит, что Редис не может этого делать, но я просто что RDBMS больше подходит им, и поскольку Redis хочет все в памяти, кажется, имеет смысл «складировать» некоторые из этих данных на диске.

Единственное, на что у меня не совсем хорошая стратегия, заключается в том, как сделать эти два хранилища данных счастливыми вместе. Использование ORM, таких как SQLAlchemy и/или redisco, кажется справедливым, потому что ORM захотят владеть всеми данными, которые являются частью их модели данных, и неизбежно возникают моменты, когда мне нужно, чтобы классы из одного ORM знали о классы из другой (например, «пользователи находятся в РСУБД, но игры находятся в Redis, а в играх есть пользователи, участвующие в них.)

Есть ли у кого-нибудь опыт развертывания веб-приложений python с использованием магазина NoSQL, такого как Redis для некоторых вещи и РСУБД для других? Если да, то есть ли у вас какие-либо стратегии для их совместной работы?

ответ

3

У вас не должно возникнуть проблемы с использованием ORM, потому что в конце концов он просто хранит строки, числа и другие значения. вы можете провести игру и сохранить свое состояние в Redis, включая игроков I Ds из таблицы SQL player, поскольку идентификатор представляет собой просто уникальное целое число.

+0

ОК, сохранение первичных ключей из хранилища SQL звучит разумно. Моя отправная точка заключалась в использовании redisco в качестве ORM для модели данных Redis, и я начал теряться, когда у меня были классы модели данных, сопоставленные Redisco, со ссылками на классы модели данных с отображением SQLalchemy. Думаю, мне, наверное, лучше всего, если я просто заберу один ORM или другой, и обработаю уникальный идентификатор от одного в качестве внешнего ключа в другом. – tonycpsu

+0

Используйте оба ORM, если они вам нравятся. Но для перекрестных ссылок между ORM, не используйте явные внешние ключи, используйте простые целочисленные поля и «вручную» устанавливайте их с помощью первичного ключа ссылочного объекта. –

+0

Это звучит довольно чисто - я дам ему шанс. Благодарю. – tonycpsu

Смежные вопросы