in Mid 80s, rise of relational : persistence , sql transactions, reportingweb
sql problem: assemble lots of table into one logic entity, impedance mismatch, redis
in Mid 90s, rise of object database, argue endlesslysql
Integration database, relational dominancemongodb
web sites :json
1 lots of traffic , scale things up, you bug bigger boxapi
2 lots of small boxes, sql doesn't not work well around boxes.app
so,less
google --> bigtabledom
amazon --> dynamonosql
"NOSQL"
mongodb, couchdb,cassandra,hypetable,dynomite,hbase,
characteristics of nosql
non-relational, cluster-friendly, schema-less, open-source, 21st century web
data model vs relational model
Column-family | document | key-value | graph |
cassandra | mongodb | redis | neo4j |
hbase | couchdb | riak | |
ravendb | project voldemort |
anOrder["price"] * anOrder["quantity"] : implicit schema, assume "price" and "quantity", schema less, uhm, document=aggregate
row-key +column family name+column key+column value
however, nothing is perfert.
rdbms == acid
nosql == base
graph : acid
you cann't afford to hold transaction that long
version stamp!!! offline lock: transaction boundary
consistency :
CAP:
Partition + Consistency
Partition + Availability
Consistency <==spectrum==> Availability
Consistency <== ==> Response time
driver to nosql:
large scale data , easier development
Integation database === > application database (web service)
applications control access to data. ==>nosql, not integration into database!!!
for data warehouse
agile analytics
Ployglot persistence: relational still play, choose appropriate db for your biz.
rapid response, data intensive