risposta-alla-domanda-sullo-sviluppo-web-bd.com

Quando usare CouchDB su MongoDB e viceversa

Sono bloccato tra questi due database NoSQL.

Nel mio progetto creerò un database all'interno di un database. Ad esempio, ho bisogno di una soluzione per creare tabelle dinamiche.

Quindi gli utenti possono creare tabelle con colonne e righe. Penso che sia MongoDB che CouchDB andranno bene per questo, ma non sono sicuro di quale sia. Avrò anche bisogno di un efficiente paging.

603
Luke101

Di C, A & P (coerenza, disponibilità e tolleranza delle partizioni) quali 2 sono più importanti per te? Riferimento rapido, il Guida visiva ai sistemi NoSQL

  • MongodB: coerenza e tolleranza delle partizioni
  • CouchDB: disponibilità e tolleranza delle partizioni

Un post del blog, Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Confronto tra Membase e Neo4j ha ' Miglior utilizzo ' scenari per ogni database NoSQL confrontato. Citando il link,

  • MongoDB: se hai bisogno di query dinamiche. Se si preferisce definire indici, non mappare/ridurre le funzioni. Se hai bisogno di buone prestazioni su un grande DB. Se si desidera CouchDB, ma i dati cambiano troppo, riempiendo i dischi.
  • CouchDB: per accumulare, a volte cambiando i dati, su cui devono essere eseguite le query predefinite. Luoghi in cui il controllo delle versioni è importante.

Un confronto recente (febbraio 2012) e più completo di Riyad Kalla,

  • MongoDB: SOLO replica master-slave
  • CouchDB: Master-Master Replication

Un post sul blog (ottobre 2011) da qualcuno che ha provato entrambi,A MongoDB Guy Learns CouchDBha commentato che il paging del CouchDB non è altrettanto utile.

A dated (Jun 2009) benchmark by Kristina Chodorow ( parte della squadra dietro MongoDB ),

Vorrei andare per MongoDB.

Spero che sia d'aiuto.

503
user799188

Le risposte sopra tutto complicano la storia.

  1. Se si prevede di avere un componente mobile, o se gli utenti desktop devono lavorare offline e quindi sincronizzare il proprio lavoro su un server, è necessario disporre di CouchDB.
  2. Se il tuo codice verrà eseguito solo sul server, allora vai con MongoDB

Questo è tutto. A meno che tu non abbia bisogno dell'abilità (impressionante) di CouchDB di replicare su dispositivi mobili e desktop, MongoDB ha il vantaggio in termini di prestazioni, community e tooling al momento.

197
Ewan Makepeace

Domanda molto vecchia ma è su Google e non mi piacciono molto le risposte che vedo, ecco le mie.

C'è molto di più per Couchdb rispetto alla possibilità di sviluppare CouchApps. La maggior parte delle persone usa CouchDb in un'architettura web classica a 3 livelli.

In pratica, il fattore decisivo per la maggior parte delle persone sarà il fatto che MongoDb consente l'esecuzione di query ad-hoc con una sintassi simile a SQL mentre CouchDb non lo fa (devi creare una mappa/ridurre le visualizzazioni che spegne alcune persone anche se si creano queste viste è amichevole per lo sviluppo di applicazioni rapide - non hanno nulla a che fare con le stored procedure).

Per affrontare i punti sollevati nella risposta accettata: CouchDb ha un ottimo sistema di versionning, ma non significa che sia adatto (o più adatto) per i luoghi in cui il versionning è importante. Inoltre, couchdb è di tipo "heavy-write friendly" grazie alla sua natura "solo-append" (scrive le operazioni di ritorno in pochissimo tempo garantendo che nessun dato sarà mai perso).

Una cosa molto importante che non viene menzionata da nessuno è il fatto che CouchDb si basa su indici b-tree. Ciò significa che se hai 1 "riga" o 20 miliardi, il tempo di interrogazione rimarrà sempre al di sotto di 10 ms. Questo è un cambio di gioco che rende CouchDb un database a bassa latenza e di facile lettura, e questo non dovrebbe essere trascurato.

Per essere onesti ed esaustivi, il vantaggio che MongoDb ha su CouchDb è l'attrezzatura e il marketing. Hanno strumenti di prima classe per tutti i principali linguaggi e piattaforme che rendono semplice l'on-boarding e questo aggiunto alle query ad hoc rende la transizione da SQL ancora più semplice.

CouchDb non ha questo livello di strumenti - anche se ci sono molte librerie disponibili oggi - ma CouchDb è esposto come API HTTP ed è quindi abbastanza facile creare un wrapper nella tua lingua preferita per parlarne. A me personalmente piace questo approccio in quanto evita il rigonfiamento e consente di prendere solo ciò che si desidera (principio di separazione delle interfacce).

Quindi direi che usare l'una o l'altra è in gran parte una questione di conforto e preferenza con i loro paradigmi. L'approccio CouchDb "si adatta", per certe persone, ma se dopo aver appreso le caratteristiche del database (nella esauriente guida ufficiale ) non hai il tuo momento "hell yeah", dovresti probabilmente andare avanti.

Scorporrei l'utilizzo di CouchDb se vuoi semplicemente utilizzare "lo strumento giusto per il lavoro giusto". perché scoprirai che non puoi semplicemente usarlo in questo modo e finirai per essere incazzato e scrivere post di blog come "Dove si uniscono in CouchDb?" e "Dov'è la gestione delle transazioni?". In effetti Couchdb è - paradossalmente - molto trasparente ma allo stesso tempo richiede un cambio di paradigma e un cambiamento nel modo in cui ti avvicini ai problemi per brillare davvero (e davvero lavorare).

Ma una volta che lo hai fatto, vale davvero la pena. Personalmente avrei bisogno di motivazioni molto forti o di un importante compromesso su un progetto per scegliere un altro database, ma finora non ne ho incontrato nessuno.

50
tobiak777

Fai queste domande tu stesso? E deciderete la vostra selezione di DB.

  1. Hai bisogno di master-master? Quindi CouchDB. Mainly CouchDB supporta la replica master-master che anticipa la disconnessione dei nodi per lunghi periodi di tempo. MongoDB non andrebbe bene in quell'ambiente.
  2. Avete bisogno di MAXIMUM R/W throughput? Quindi MongoDB
  3. Hai bisogno di ultima durabilità a server singolo perché hai solo un server DB singolo? Quindi CouchDB.
  4. Stai memorizzando un set di dati MASSIVE che ha bisogno di sharding mantenendo un throughput folle? Quindi MongoDB.
  5. Hai bisogno di una forte coerenza dei dati? Quindi MongoDB.
  6. Hai bisogno di alta disponibilità del database? Quindi CouchDB.
  7. Stai sperando in multi database e multi tabelle/collezioni? Quindi MongoDB
  8. Hai utenti di mobile app offline e vuoi sincronizzare i loro dati di attività su un server? Allora hai bisogno di CouchDB.
  9. Hai bisogno di una grande varietà di motori querying? Quindi MongoDB
  10. Hai bisogno di community grandi per utilizzare DB? Quindi MongoDB
31
Somnath Muluk

Riassumo le risposte trovate in quell'articolo:

http://www.quora.com/How-does-MongoDB-compare-to-CouchDB-What-are-the-advantages-and-disadvantages-of-each

MongoDB: migliore interrogazione, archiviazione dei dati in BSON (accesso più rapido), migliore coerenza dei dati, più raccolte

CouchDB: migliore replicazione, con master per master replica e risoluzione dei conflitti, archiviazione dei dati in JSON (leggibile dall'uomo, accesso migliore tramite REST servizi), interrogazione tramite map-reduce.

Quindi, in conclusione, MongoDB è più veloce, CouchDB è più sicuro.

Inoltre: http://nosql.mypopescu.com/post/298557551/couchdb-vs-mongodb

24
Alexis Dufrenoy

Essere a conoscenza di un problema con gli indici univoci sparsi in MongoDB. L'ho colpito ed è estremamente ingombrante da risolvere.

Il problema è questo: hai un campo, che è unico se presente e desideri trovare tutti gli oggetti in cui il campo è assente. Il modo in cui gli indici unici sparsi sono implementati in Mongo è che gli oggetti in cui quel campo manca non sono affatto nell'indice - non possono essere recuperati da una query su quel campo - {$exists: false} non funziona.

L'unica soluzione che ho trovato è avere una famiglia di valori null speciale, in cui un valore vuoto viene tradotto in un prefisso speciale (come null: ) concatenato a un uuid. Questo è un vero mal di testa, perché ci si deve occupare della trasformazione da/verso i valori vuoti durante la scrittura/interrogazione/lettura. Un grande fastidio.

Non ho mai usato l'esecuzione javascript lato server in MongoDB (non è consigliabile in ogni caso) e la loro mappa/riduzione ha prestazioni pessime quando c'è solo un nodo Mongo. A causa di tutti questi motivi, ora sto considerando di esaminare CouchDB, forse si adatta meglio al mio particolare scenario.

A proposito, se qualcuno conosce il link al rispettivo problema di Mongo che descrive il problema con un indice univoco, si prega di condividere.

20
mark

Sono sicuro che puoi farlo con Mongo (più familiarità con esso), e abbastanza sicuro che puoi farlo anche con il divano.

Entrambi sono orientati documentati (basati su JSON) quindi non ci sarebbero "colonne" ma piuttosto campi nei documenti - ma possono essere completamente dinamici.

Entrambe le cose si consiglia di esaminare altri fattori su cui utilizzare: altre funzionalità che ti interessano, popolarità, ecc. Approfondimenti di Google, posti di lavoro Indeed.com sarebbero modi per guardare alla popolarità.

Potresti provare, penso che dovresti essere in grado di far funzionare Mongo in 5 minuti.

4
dm.