MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да напишем приложение на Python, което поддържа множество бази данни

Django поддържа множество бази данни така че всичко, от което се нуждаете, е някакъв код, който да управлява превключването между тях.

Ако сте прочели документите, ще видите, че Django ви позволява да предоставите свой собствен персонализиран клас „рутер“, който решава коя база данни да се използва за дадена заявка:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# използване на маршрутизатори

Тъй като казвате, че искате да изберете коя db "в предния край", тогава вероятно всеки потребител на вашия сайт може да избере различен бекенд на база данни. Това представлява проблем, защото db рутерът не знае нищо за текущата http заявка и потребител.

Предлагам ви да използвате този междинен софтуер „ThreadLocal“, за да съхраните текущия обект на заявка, така че да имате достъп до него от вашия персонализиран рутер:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py

Да приемем, че запазвате избрания от потребителя бекенд в сесията като request.session['db_name'] - вашият рутер ще изглежда така:

from django_tools.middlewares import ThreadLocal

class RequestRouter(object):
    def db_for_read(self, model, **hints):
        request = ThreadLocal.get_current_request()
        return request.session.get('db_name', 'default')

    def db_for_write(self, model, **hints):
        request = ThreadLocal.get_current_request()
        return request.session.get('db_name', 'default')

    def allow_relation(self, obj1, obj2, **hints):
        return True

    def allow_syncdb(self, db, model):
        return True



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Предотвратете дублиране на влизане с FOSUserBundle

  2. Множество бази данни в MongoDB за SaaS

  3. Грешка във връзката с Mongolab

  4. Как да актуализирате стойности с помощта на pymongo?

  5. Скорост на актуализиране на Mongo