summaryrefslogtreecommitdiffstats
path: root/docs/tradeoffs.md
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-02-08 09:57:19 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-02-08 09:57:19 +0100
commit1259fa9eb1595c141fb80a643b8618cc9e4f6db9 (patch)
tree17f963d65f6c16c3c05a6c63a57d4440d30d95b4 /docs/tradeoffs.md
parent47bfba0d9152a1f7f689d7936b107b1a899a0b76 (diff)
downloadsink-1259fa9eb1595c141fb80a643b8618cc9e4f6db9.tar.gz
sink-1259fa9eb1595c141fb80a643b8618cc9e4f6db9.zip
Documentation structure
Diffstat (limited to 'docs/tradeoffs.md')
-rw-r--r--docs/tradeoffs.md36
1 files changed, 36 insertions, 0 deletions
diff --git a/docs/tradeoffs.md b/docs/tradeoffs.md
new file mode 100644
index 0000000..d0e32c1
--- /dev/null
+++ b/docs/tradeoffs.md
@@ -0,0 +1,36 @@
1# Tradeoffs/Design Decisions
2* Key-Value store instead of relational
3 * `+` Schemaless, easier to evolve
4 * `-` No need to fully normalize the data in order to make it queriable. And without full normalization SQL is not really useful and bad performance wise.
5 * `-` We need to maintain our own indexes
6
7* Individual store per resource
8 * Storage format defined by resource individually
9 * `-` Each resource needs to define it's own schema
10 * `+` Resources can adjust storage format to map well on what it has to synchronize
11 * `+` Synchronization state can directly be embedded into messages
12 * `+` Individual resources could switch to another store technology
13 * `+` Easier maintenance
14 * `+` Resource is only responsible for it's own store and doesn't accidentaly break another resources store
15 * `-` Inter`-`resource moves are both more complicated and more expensive from a client perspective
16 * `+` Inter`-`resource moves become simple additions and removals from a resource perspective
17 * `-` No system`-`wide unique id per message (only resource/id tuple identifies a message uniquely)
18 * `+` Stores can work fully concurrently (also for writing)
19
20* Indexes defined and maintained by resources
21 * `-` Relational queries accross resources are expensive (depending on the query perhaps not even feasible)
22 * `-` Each resource needs to define it's own set of indexes
23 * `+` Flexible design as it allows to change indexes on a per resource level
24 * `+` Indexes can be optimized towards resources main usecases
25 * `+` Indexes can be shared with the source (IMAP serverside threading)
26
27* Shared domain types as common interface for client applications
28 * `-` yet another abstraction layer that requires translation to other layers and maintenance
29 * `+` decoupling of domain logic from data access
30 * `+` allows to evolve types according to needs (not coupled to specific application domain types)
31
32# Risks
33* key-value store does not perform with large amounts of data
34* query performance is not sufficient
35* turnaround time for modifications is too high to feel responsive
36* design turns out similarly complex as Akonadi