Quando utilizzare un database nosql come mongodb su mysql?

12

Sono nuovo del concetto di database nosql e non l'ho mai usato. Basandomi su ciò che ho letto e sul poco che ho capito, non vedo ancora come possano essere particolarmente utili se non puoi creare riferimenti tra i dati, se non c'è il concetto di chiave esterna.

Come faccio a peresempio interrogare qualcosa di semplice come "trova tutti i commenti postati da questo utente", "trova tutte le foto che appartengono a un'entità album" ecc.

I sistemi nosql si allontanano dal modello di dati relazionali statici, ma consentono comunque di tenere traccia di tali riferimenti, c'è qualcosa di analogo alle chiavi esterne che è possibile utilizzare nelle query?

    
posta akomada 15.02.2015 - 22:10
fonte

3 risposte

18

Usi generali

  • Se si dispone di strutture dati che non sono chiaramente definite nel momento in cui si effettua il sistema. Tendo a mantenere le impostazioni dell'utente in nosql, ad esempio. Un altro esempio era un sistema in cui gli utenti dovevano essere in grado di aggiungere campi in fase di esecuzione - molto doloroso in un RDBMS e una brezza in NoSQL.

  • Se la struttura del modello è in gran parte centrata su uno o pochi oggetti del modello e la maggior parte delle relazioni sono in realtà oggetti figlio degli oggetti del modello principale. In questo caso scoprirai che avrai un bisogno abbastanza piccolo di join effettivi. Ho trovato che il sistema di gestione dei contatti può essere implementato abbastanza bene in nosql per esempio. Una persona può avere più indirizzi, telefoni ed e-mail. Invece di metterli in una tabella separata, diventano tutti parte dello stesso modello e tu hai un oggetto di una persona.

  • Se vuoi trarre vantaggio dal clustering dei tuoi dati su più server invece di avere un server monolitico, che è comunemente richiesto da RDBMS.

  • Cache. Anche se si desidera mantenere un RDBMS come database principale, può essere utile utilizzare un database NoSQL per memorizzare i risultati delle query nella cache o conservare i dati, ad esempio i contatori.

  • Archiviazione di documenti. Se vuoi archiviare documenti coerenti, in un database alcuni dei database NoSQL (come MongoDB) sono effettivamente specializzati nell'archiviazione di quelli.

E i join?

Onestamente, all'inizio la cosa del no join mi sembrava abbastanza spaventosa. Ma il trucco è smettere di pensare in SQL. Devi effettivamente pensare con l'oggetto che hai in memoria quando esegui la tua applicazione. Questi dovrebbero più o meno essere salvati nel database NoSQL come area.

Poiché è possibile memorizzare il grafico dell'oggetto completo, con oggetti figlio, la maggior parte della necessità di join viene eliminata. E se trovi che ne hai bisogno, dovrai mordere il proiettile e recuperare entrambi gli oggetti e unirti al codice dell'applicazione.

Fortunatamente, la maggior parte dei driver può fare la tua adesione, se imposti correttamente lo schema.

Per ulteriori letture in realtà raccomando Martin Fowler .

    
risposta data 16.02.2015 - 00:27
fonte
2

Utilizzerei senz'altro tale database durante le fasi di pianificazione di un progetto (prima dello sviluppo, prima ancora del design) per registrare dati la cui struttura, relazioni e caratteristiche non sono ancora conosciute e soggette ad analisi. Proverò a fare in modo che tutto si adatti a un modello relazionale dopo.

    
risposta data 15.02.2015 - 22:40
fonte
0

In alcuni casi, non avrai bisogno di chiavi esterne. Ad esempio:

Find all the comments posted by this user

può essere semplice come caricare la parte comments di un documento corrispondente a un utente. Si chiama denormalizzazione : invece di avere due set con un join, hai un documento e tutto il necessario è all'interno del documento. Una query, nessun join, rendimento migliore .

Tuttavia, in alcune circostanze, ciò potrebbe comportare la duplicazione dei dati , quindi il collegamento da uno a un altro documento potrebbe essere adatto. In questo caso, potresti essere interessato alla normalizzazione di MongoDB, chiave esterna e iscrizione , Riferimenti sui database pagina e in particolare la funzione DBRefs.

    
risposta data 15.02.2015 - 22:26
fonte

Leggi altre domande sui tag