imperativo: ridurre la complessità - MongoDB trades availability for consistency, whereas CouchDB trades consistency for availability.

sono due storage "special purpose", ovvero molto adatti per determinati tipi di progetti e poco adatti per altri.

"evita la conversione dalle strutture dati usate nell'appllicativo e quelle immagazzinate nella base dati relazionale"

MongoDB

  • performance read/write, storage + ricerca
  • on update/insert, scrittura dati asincrona

progettato per recuperare grandi quantità di dati da estrarre successivamente(aggregazioni) e processare con altri strumenti come MySQL, che ha strumenti più facili per le ricerche "the database you store the incoming signals in is called an OLTP (for on-line transactional processing) and the database you store the aggregates in is called OLAP (for on-line analytical processing). OLTP you want something that is quick at inserting data, but also something that supports indexing the data and searching for things. The aggregation is greatly helped by a database that does half the work of summing and finding maximums and minimums. For OLAP something much simpler works, a key-value store is all you need. I use Redis because it too is very easy to work with and to set up. It also lets you store more than scalar values, which is convenient. Sometimes your value is actually a list, or a hash, in most key-value stores you have to encode such values, but Redis handles it natively. The downside of Redis is that you can't do queries ("as in give me all rows that has this value for Y"), you have to keep indices to your data yourself."

interessante la funzionalità GeoSpatial

Use Cases

  • Archiving and EventLogging
  • Document and Content Management
  • ECommerce + Realtime Analytics

CouchDB

CouchDB trades disk space for performance

  • per interrogare si usa solo mapreduce
  • il risultato viene messo in una cache su disco e aggiornato: Viste -> disk intensive
  • i documenti possono essere versionati
  • è un webserver
  • il database contiene il js che è l'applicazione stessa
  • replication / sincronization for free

Redis (RE-mote DI-ctionary S-erver )

un'interfaccia a strutture dati e operazioni sui dati

  • in memory (es. MemCache)
  • eventually consistent, permette di persistere i dati evitando il fenomeno della cold cache
  • key = hash( $key, $value )(es. DBM)
  • expire key
  • self contained, no dll or depencency

applications:

  • cache
  • Logs, datamining, analytics
  • messaging queue

esistono valori associati a chiavi di tipo stringa, lista o hash, ma anche insiemi, insiemi ordinati.

Redis seems to be taking around twice as much memory as MongoDB takes. Redis performance comes at the prices of increased memory footprint.

This can be an important data point in choosing between MongoDB and Redis – MongoDB might be preferrable for users who care about reducing their memory costs.

Generally Redis is 10-30% faster when the data set fits within working memory of a single machine. Once that amount of data is exceeded, Redis fails. Mongo will slow down at an amount which depends on the type of load.

altri

Cassandra è lo storage, Hadoop è il data mining engine, sono complessi e sviluppati per enormi basi dati e complessità.