Petr Jelínek
28th of Oct 2016
TTÜ Geeky Weekly
RDBMS
PostgreSQL, Oracle, MySQL, MSSQL
NoSQL
MongoDB, Cassandra, RocksDB
NewSQL
Vertica, VoltDB
Other specialized
Hadoop, Elastic search, etc
Durability: once data is written it will always be there, across crashes and similar
Basically Available: "always" available
Soft-state: the state of the system may change even without client activity
Eventual Consistency: the system will become consistent over time
Atomic: all commands in transaction either succeed or fail, there is no in between state preserved
Consistent: all committed data is consisted according to the rules, constraints, etc that are defined in the DB
Isolation: provides control over what data other clients see
user_id | city | country |
---|---|---|
1 | London | UK |
2 | Oxford | UK |
id | name | |
---|---|---|
1 | Simon | simon@email.com |
user
address
{
"id": 1
"name": "Simon"
"email":"simon@email.com"
"address":
[
{
"city": "London"
"country": "UK"
},
{
"city": "Oxford"
"country": "UK"
}
]
}
SELECT * FROM users WHERE id = 1;
SELECT department, role, gender, count(*)
FROM employees
GROUP BY CUBE (department, role, gender);
WITH RECURSIVE ...
redis.get(1)
db.bios.find( { _id: 5 } )
db.bios.find(
{
awards: {
$elemMatch: {
award: "Turing Award",
year: { $gt: 1980 }
}
}
}
)
Specialised type of database optimized for storing graphs
Do you know what you are doing?
No: use RDBMS
Yes: you don't need me to tell you
Key-Value store (Redis)
Caching
Graph databases (Neo4j)
Social relations (friend of a friend), network maps
Wide-column store (Cassandra)
When you need to easily scale writes beyond what
single server can do
Document store (?)
Volatile data with dynamic structure (web sessions,
chat, etc)