- How we perceive the data
- Not the storage model
- Typically, the relational data model
- Unit for data manipulation
- Unit of distribution
- Transactional boundary
- Relationships are not enforced
- Denormalization
- Typically, no atomic operations spaning multiple aggregates (exception: RavenDB)
- Schemaless
- Lookup by ID
- The value can be opaque (key-value) or used by queries (document)
- For key-value stores, you can integrate search tools for query support
- Model for data access
- Confusing model
- Sparse table: columns can be added to any row, and rows can have different columns
- Two-level map: first key identifies the row, second one identifies the column
- Column families (super-columns in Cassandra)
- Storage model more suited for reading
- Columns are ordered (name, timestamp, etc)
- Model for data access
- Cached queries
- Can be stale
- Can be included in a document
- Map-reduce
- Small records with complex interconnections
- Nodes connected by edges
- More performant than relational databases
- Not suitable for clusters
- Transactions need to span multiple nodes
- Immutability
- Time
- Storage is cheap
- Event sourcing
- Datomic (Memory Image)