-
How many values accessed?
- Single-value (result single row)
- 0-1
- Multiple-values
- 0-n
- Single-value (result single row)
-
Crud-type?
- read-only
SELECT ...
- append-only
INSERT INTO ...
- edit
UPDATE VALUES ...
- delete
DELETE FROM ...
- read-only
-
CRUD-types -> frequency of each type
-
Analysis queries
- Redis vs materialized view vs columnar vs hadoop/etc
- Predictability (cubes, rollups, how detailed?)
-
OLTP / OLAP
-
Read-order/area
- sequential / random
- sparse / tight
- rows / disk-block ratio?
- predictability? (think document vs normalized)
- swapping rate
-
Query size
- Query span fits in memory?
- Query result fits in memory?
-
Isolation-requirement
- isolation levels
- optimistic / pessimistic locking!
- event time? start / end of transaction
-
Durability requirements?
-
Recency level?
- eventual consistency ok?
-
Main-memory heavy operations?
- sort
- aggregates (?)
- joins
-
How much data?
-
How many accessors? (appliocation replicas)
- hotspots? vs easy sharding?
-
CPU usage? -
where
condition evaluation cost? -
Latency requirements
-
"Programming with read-only db"
-
Immutability
- temporal data
-
Event-driven database
-
Time-series data
-
Insert data clustering
- Think citybikes