Frage

Ich möchte MongoDB w / mongoengine versuchen. Ich bin neu in Django und Datenbanken, und ich bin eine Passung mit Fremdschlüssel hat, schließt sich, Circular Imports (Sie es nennen). Ich weiß, ich könnte schließlich durch diese Fragen arbeiten, aber Mongo scheint wie eine einfachere Lösung für das, was ich tue. Meine Frage ist, ich habe viel steckbare Apps mit (Imagekit, Heuhaufen, Registrierung, etc.) und wollte wissen, ob diese Anwendungen zu Arbeit fortsetzen wird, wenn ich den Schalter. Gibt es bekannte Kopfschmerzen, dass ich begegnen, wenn so dass ich nur halten könnte meinen Kopf mit MySQL hämmern.

War es hilfreich?

Lösung

Es gibt keinen Grund, warum Sie nicht eine der Standard-RDBMS für alle Standard-Django-Anwendungen verwenden können, und dann Mongo für Ihre Anwendung. Sie müssen nur alle Standard-Möglichkeiten der Verarbeitung Dinge aus dem Django ORM ersetzen müssen sie die Mongo Weg mit zu tun.

So Sie urls.py und seine saubere Musterabgleich halten können, Ansichten noch Parameter erhalten, und Vorlagen können noch Objekte nehmen.

Sie werden querysets verlieren, weil ich sie vermuten, sind zu eng mit den RDBMS-Modelle gebunden - aber sie sind nur faul Listen wirklich ausgewertet. Ignorieren Sie die Django docs models.py und Code Ihre Datenbank Business-Logik in einem Mongo Paradigma auf das Schreiben.

Oh, und Sie werden die Django-Admin-Oberfläche für den einfachen Zugriff auf Ihre Daten nicht haben.

Andere Tipps

Sie möchten, um überprüfen django-nonrel , die eine junge, aber vielversprechend Versuch einer NoSQL-Backend für Django. Dokumentation fehlt im Moment, aber es funktioniert großartig, wenn Sie es gerade trainieren.

Ich habe mongoengine mit django verwendet, aber Sie müssen eine Datei wie mongo_models.py zum Beispiel erstellen. In dieser Datei definieren Sie Ihre Mongo Dokumente. Anschließend erstellen Sie bildet jedes Mongo Dokument übereinstimmen. Jede Form hat eine Speichermethode, die Einfügungen oder Aktualisierungen, was in Mongo gespeichert. Django Formen sind entworfen, um Stecker in jedes Datum zurück Ende (mit etwas craft)

ACHTUNG: Wenn Sie haben sehr gut definiert und Daten strukturiert, die dann in den Dokumenten oder Modellen beschrieben werden können Mongo nicht verwenden. Es ist nicht ausgelegt für die und so etwas wie PostGreSQL funktioniert viel besser.

  • Ich benutze PostGreSQL für relationale oder gut strukturierte Daten, weil seine gut dafür. Kleiner Speicherbedarf und eine gute Antwort.
  • Ich benutze Redis zu Cache oder arbeiten in Speicherwarteschlangen / Listen, weil seine sehr gut dafür. große Leistung bieten Sie den Speicher mit ihm fertig werden müssen.
  • Ich benutze Mongo große JSON Dokumente zu speichern und Karte auszuführen und reduzieren auf sie (falls erforderlich), weil seine sehr gut dafür. Achten Sie darauf, die Verwendung Indizierung auf bestimmte Spalten, wenn Sie Lookups beschleunigen können.

Do umkreisen nicht ein quadratisches Loch zu füllen. Es wird nicht füllen.

Ich habe viele Beiträge auch gesehen, wo jemand eine relationale DB für Mongo weil Mongo ist ein Schlagwort tauschen wollte. Versteh mich nicht falsch, Mongo ist wirklich toll ... wenn Sie es in geeigneter Weise verwendet werden. Ich liebe es mit Mongo angemessen

Upfront, wird es nicht für jede bestehende Django App arbeiten, dass die Schiffe es Modelle. Es gibt keine Backend für Djangos Modelldaten in mongodb oder anderen NoSQL Speichern zur Zeit Speicher und Datenbank-Backends zur Seite, Modelle selbst etwas von einem strittigen Punkt ist, denn wenn man in jemandes App zu verwenden bekommen (django.contrib Apps enthalten), dass Schiffe Modell-template-Ansicht Triaden, wenn Sie ein etwas anderes Modell für Ihre Zwecke benötigen Sie entweder den Anwendungscode zu bearbeiten haben (einfach falsch), dynamisch bearbeiten die Inhalte der importierten Python-Module zur Laufzeit (magisch), Gabel die Anwendungsquelle insgesamt (umständlich) oder zusätzliche Einstellungen zur Verfügung stellen (gut, aber es ist eine seltene Begegnung mit django.contrib.auth wahrscheinlich das einzigen weithin bekannte Beispiel für eine Anwendung ist, die Sie dynamisch angeben es, wie es verwendet werden, welches Modell erlaubt es der Fall mit Benutzern Profil Modelle durch die AUTH_PROFILE_MODULE Einstellung).

Das klingt schlecht, aber was es wirklich bedeutet, ist, dass Sie SQL und NoSQL-Datenbanken parallel werden müssen implementieren und von einer App-to-App-Basis gehen - wie Spacedman vorgeschlagen - und wenn mongodb ist die beste fit für eine bestimmte App, die Hölle, nur Ihre eigenen App rollen.

Es gibt eine Menge von feinen Djangonauts mit NoSQL Einlagerungen auf ihren Köpfen. Wenn Sie die Ströme aus den letzten DjangoCon Präsentationen folgte, ist jedes Jahr gibt es wichtige Diskussionen darüber, wie Django sollte NoSQL Speicher nutzen. Ich bin mir ziemlich sicher, in diesem Jahr oder im nächsten, jemand die Anwendungen und Modelle API Refactoring den Pfad zu einem klaren Design zu ebnen, kann schließlich unify all die verschiedenen Aromen von NoSQL Speichern als Teil des Django Kern.

Das habe ich vor kurzem versucht (wenn auch ohne Mongoengine). Es gibt eine große Anzahl von Fallen, IMHO:

  • No Admin-Interface.
  • Keine Auth django.contrib.auth beruht auf der DB-Schnittstelle.
  • Viele Dinge vertrauen auf django.contrib.auth.User. Zum Beispiel ist die Request Klasse. Dies ist ein riesiges Hindernis.
  • Keine Anmeldung (Stützt sich auf der DB-Schnittstelle und django.contrib.auth)

Im Grunde sucht durch die django-Schnittstelle für Verweise auf django.contrib.auth und Sie werden sehen, wie viele Dinge gebrochen werden.

Das sagte, ist es möglich, dass MongoEngine eine gewisse Unterstützung bietet eine bessere ersetzen / augment django.contrib.auth mit etwas, aber es gibt so viele Dinge, die davon abhängen, dass es schwer zu sagen ist, wie Sie Affe Patch etwas würde so viel .

Primary pitfall (für mich): kein JOIN

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top