Warning, /pim/sink/docs/designgoals.md is written in an unsupported language. File is not indexed.
0001 # Design Goals 0002 ## Axioms 0003 1. Personal information is stored in multiple sources (address books, email stores, calendar files, ...) 0004 2. These sources may local, remote or a mix of local and remote 0005 0006 ## Requirements 0007 1. Local mirrors of these sources must be available to 1..N local clients simultaneously 0008 2. Local clients must be able to make (or at least request) changes to the data in the local mirrors 0009 3. Local mirrors must be usable without network, even if the source is remote 0010 4. Local mirrors must be able to syncronoize local changes to their sources (local or remote) 0011 5. Local mirrors must be able to syncronize remote changes and propagate those to local clients 0012 6. Content must be searchable by a number of terms (dates, identities, body text ...) 0013 7. This must all run with acceptable performance on a moderate consumer-grade desktop system 0014 0015 Nice to haves: 0016 0017 1. As-close-to-zero-copy-as-possible for data 0018 2. Simple change notification semantics 0019 3. Resource-specific syncronization techniques 0020 4. Data agnostic storage 0021 0022 Immediate goals: 0023 0024 1. Ease development of new features in existing resources 0025 2. Ease maintenance of existing resources 0026 3. Make adding new resources easy 0027 4. Make adding new types of data or data relations easy 0028 5. Improve performance relative to existing Akonadi implementation 0029 0030 Long-term goals: 0031 0032 1. Project view: given a query, show all items in all stores that match that query easily and quickly 0033 0034 Implications of the above: 0035 0036 * Local mirrors must support multi-reader, but are probably best served with single-writer semantics as this simplifies both local change recording as well as remote synchronization by keeping it in one process which can process write requests (local or remote) in sequential fashion. 0037 * There is no requirement for a central server if the readers can concurrently access the local mirror directly 0038 * A storage system which requires a schema (e.g. relational databases) are a poor fit given the desire for data agnosticism and low memory copying 0039