Domanda

voglio provare MongoDB w mongoengine /. Sono nuovo di Django e basi di dati e sto avendo un attacco con chiavi esterne, entra a far parte, Importazioni circolari (è il nome). So che avrei potuto finalmente lavorare con questi problemi, ma Mongo sembra proprio come una soluzione più semplice per quello che sto facendo. La mia domanda è che sto usando un sacco di applicazioni pluggable (Imagekit, Haystack, registrazione, ecc) e voleva sapere se queste applicazioni continueranno a lavorare se faccio l'interruttore. Ci sono dei mal di testa noti che farò incontrare, in tal caso potrei continuare a sbattere la testa con MySQL.

È stato utile?

Soluzione

Non c'è alcun motivo per cui non è possibile utilizzare uno dei RDBMS standard per tutte le applicazioni standard di Django, e quindi Mongo per la vostra applicazione. Non vi resta che sostituire tutte le modalità standard di elaborazione cose dal Django ORM con farlo nel modo Mongo.

Quindi, è possibile mantenere urls.py e il suo pattern matching accurato, vista sarà ancora ottenere i parametri e modelli possono ancora prendere gli oggetti.

Perderai querysets perché ho il sospetto che sono troppo strettamente legati ai modelli RDBMS - ma sono solo pigramente valutati liste davvero. Basta ignorare la documentazione Django sulla scrittura models.py e il codice la vostra logica di business database in un paradigma di Mongo.

Oh, e non avrete l'interfaccia Django Admin per un facile accesso ai dati.

Altri suggerimenti

Si potrebbe voler controllare django-nonrel , che è un giovane ma promettente tentativo di un backend NoSQL per Django. La documentazione è carente in questo momento, ma funziona benissimo se si lavora fuori.

Ho usato mongoengine con Django, ma è necessario creare un file come mongo_models.py per esempio. In questo file è possibile definire i documenti Mongo. È quindi creare moduli per soddisfare ogni documento Mongo. Ogni modulo ha un metodo di salvataggio che inserisce o aggiorna cosa memorizzati in Mongo. forme Django sono progettati per spina in qualsiasi back-end dei dati (con un po 'di mestiere)

ATTENZIONE: Se si è molto ben definito e di dati che possono essere descritti nei documenti o modelli allora non usare Mongo strutturato. La sua non è progettato per questo e qualcosa di simile PostGreSQL funzionerà molto meglio.

  • I usare PostgreSQL per i dati relazionali o ben strutturati perché il suo bene per questo. Piccola orma di memoria e una buona risposta.
  • Io uso Redis alla cache o operano in code di memoria / liste perché è molto buono per questo. grande prestazione fornendo avete la memoria di farvi fronte.
  • Io uso Mongo per memorizzare i documenti di grandi dimensioni JSON e per eseguire Mappa e riduco su di loro (se necessario) perché è molto buono per questo. Assicurarsi di utilizzare l'indicizzazione su alcune colonne se è possibile per velocizzare le ricerche.

Do not cerchio per riempire un buco quadrato. Non sarà riempirlo.

Ho visto troppi messaggi in cui qualcuno ha voluto scambiare un DB relazionale per Mongo Mongo perché è una parola buzz. Non fraintendetemi, Mongo è davvero grande ... quando lo si utilizza in modo appropriato. Mi piace usare in modo appropriato Mongo

Upfront, non funzionerà per qualsiasi Django app esistenti che le navi IT di modelli. Non c'è alcun backend per la memorizzazione dei dati di modello di Django in MongoDB o altri depositi NoSQL al momento e, backend di database a parte, i modelli stessi sono un po 'un punto controverso, perché una volta che si arriva a utilizzare qualcuno app (django.contrib apps incluse) che le navi modello-modello-vista triadi, ogni volta che è necessario un modello leggermente diverso per i vostri scopi si hanno o per modificare il codice dell'applicazione (sbagliato pianura), modificare dinamicamente i contenuti di moduli Python importati in fase di esecuzione (magica), forcella la sorgente di applicazione del tutto (ingombrante) o fornire ulteriori impostazioni (buona, ma è un incontro raro, con django.contrib.auth probabilmente di essere l'unico esempio noto di un'applicazione che consente di specificare in modo dinamico quale modello userà, come è il caso con l'utente profilo modelli attraverso l'impostazione AUTH_PROFILE_MODULE).

Questo suono cattivo forza, ma che cosa significa veramente è che si dovrà implementare database SQL e NoSQL in parallelo e passare da una base app-to-app - come Spacedman suggerito - e se MongoDB è il migliore in forma per una certa applicazione, l'inferno, basta rotolare il proprio applicazione personalizzata.

Ci sono un sacco di belle Djangonauts con depositi NoSQL sulle loro menti. Se avete seguito i corsi d'acqua dalle presentazioni Djangocon ultimi, ogni anno ci sono stati importanti discussioni su come Django dovrebbe sfruttare depositi NoSQL. Sono abbastanza sicuro che, in questo anno o il prossimo, qualcuno si refactoring del applicazioni e modelli di API per spianare la strada per un design pulito che può finalmente unificare tutti i diversi sapori di depositi NoSQL come parte del core di Django.

Recentemente ho provato questo (anche se senza Mongoengine). Ci sono un numero enorme di insidie, IMHO:

  • Nessun interfaccia di amministrazione.
  • Nessun Auth django.contrib.auth si basa sull'interfaccia DB.
  • Molte cose si basano su django.contrib.auth.User. Ad esempio, la classe RequestContext. Questo è un enorme ostacolo.
  • Nessun Registrazione (si basa sulla interfaccia di DB e django.contrib.auth)

In sostanza, cercare attraverso l'interfaccia di Django per i riferimenti a django.contrib.auth e vedrai quante cose saranno spezzato.

Detto questo, è possibile che MongoEngine fornisce un supporto per sostituire / augment django.contrib.auth con qualcosa di meglio, ma ci sono tante cose che dipendono da esso che è difficile dire come si sarebbe patch di scimmia qualcosa più di tanto .

trabocchetto primaria (per me): senza fughe

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top