Why so relational ?• Store / Load interface• Simple , beautiful , flexible (efficiently enough supports many usecases - almost)• 5 comammandments to make life easier (5NF) – Ayende - compression• Integration vs Application database (SOA) – agreed (relational) model makes DB easy target to misuse by other apps
The ugly• Impedance mismatch (well …)• “Don’t scale” (well …) – Google, Facebook, Linkedin,.. – Vertical / horizontal vs – Shared disk (in cluster)• Don’t capture the way data are accessed (UI, BL analogy)
Welcome to the world of Polyglot persistence• Document stores CouchDB, MongoDB, RavenDB, …• Key-value stores• Column Family stores• Graph stores Neo4J, Infinite Graph, OrientDB, FlockDB,…
Object graphs that respect rules of concurrent access• Objects can often be edited as a group – Coarse-Grained Lock [PoEAA] (Fowler 2002) Consistency aplied to groups Object graph = intent Impedance mismatch !!
Aggregate [DDD]• Consistency boundaries (ACID)• Relational databases are aggregate-ignorant• Document database to RESCUE!• 1 IO OP = Sharding (sharding function ie. geoloc,• vip customers,)Effective Aggregate Design [http://dddcommunity.org/library/vernon_2011]