4. What’s NoSQL
NoSQL is a term used to designate
databases which differ from classic
relational databases in some way.
It does not use SQL as its query
language (no relational model, no
JOIN)
It may not give full ACID
guarantees
Sunday, June 3, 12
5. Pros
It may have a distributed, fault-
tolerant architecture
significant gains in performance
for certain data models
It deals with huge quantities of
data
Schema-less Design
Sunday, June 3, 12
12. What’s NewSQL
NewSQL preserves SQL and offer high
performance and scalability, while
preserving the traditional ACID
notion for transactions.
Examples: VoltDB, NimbusDB, Clustrix,
Drizzle
Sunday, June 3, 12
13. Redis
Key-Value
In-Memory Cache
Rich Data Types and Operations
Optional Persistence
Master-Slave Replication
Transaction
Use cases:
weibo.com
dianping.com
Sunday, June 3, 12
14. MongoDB
JSON like (BSON) Document Store
Auto Sharding
Global Lock, Only one node writable
Replica Sets Replication
Eventual Consistency
Mongo Query Language (Friendly to SQL users)
Use cases:
dianping.com
盛大
Cloud Foundry
Sunday, June 3, 12
15. CouchDB
JSON Document Store
Written in Erlang
Master-Master Replication
MVCC
Eventual Consistency
Compaction
Offline
HTTP/REST API
View (query tool)
Use cases:
Ubuntu One
Meebo
Some Facebook Apps
Sunday, June 3, 12
16. Cassandra
Column family model
Decentralized
Tunable Consistency
Use cases:
Facebook
Twitter
Netflix
Sunday, June 3, 12
17. Neo4J
Graph database
Small Footprint
Scalability
A powerful traversal
framework
Cypher Query Language
Gremlin Traversal Language
Use cases:
Multi-level Marketing
Engine
Sunday, June 3, 12
18. VoltDB
Speak SQL
Stored Procedures
Partitioning Table and
Replication Table
Lock free design
In-Memory
Snapshots and command logging
K-safety
Linear Scalability
Use cases:
http://voltdb.com/customers
Sunday, June 3, 12
19. How To Choose
MongoDB: If you need dynamic queries. If you prefer to define
indexes, not map/reduce functions. If you need good performance on a
big DB. If you wanted CouchDB, but your data changes too much,
filling up disks.
CouchDB: For accumulating, occasionally changing data, on which pre-
defined queries are to be run. Places where versioning is important.
Redis: For rapidly changing data with a foreseeable database size
(should fit mostly in memory).
Neo4J: For graph-style, rich or complex, interconnected data. Neo4j
is quite different from the others in this sense.
Cassandra: When you write more than you read (logging). If every
component of the system must be in Java. ("No one gets fired for
choosing Apache's stuff.")
VoltDB: If you want to speak SQL and use JOIN
Sunday, June 3, 12