Condensation vs. database systems add graphs from presentation slides
Data is often stored in a database. Usually used on top of file systems, database systems provide a higher level of abstraction as compared to plain files. They take care of data serialization, and keep indices.
In Condensation, a higher abstraction layer is provided by documents.
Immutable vs. mutable
Database systems are mutable data systems, i.e. records and values can be modified in-place. Mutable data is simple and straightforward to use, but more difficult to synchronize, replicate, and distribute.
Condensation is an immutable storage system. Once a piece of data is written, it cannot be modified any more. Any change results in a new version of the data. Old versions are garbage collected when they are not needed any more. This allows for simple synchronization, replication, and distribution.
Conflict-free merging vs. locking
Database systems use locking (in time or space) to execute transactions. On centralized systems, locking requires careful design to work correctly and efficiently. On distributed systems, locking is difficult, and imposes a lot of constraints.
Condensation does not use locking, but allows multiple versions of the data to coexist. Different versions can be merged at any time.
Distributed vs. centralized
Classic database systems are centralized. Even if a database is running on multiple CPUs or servers, it provides a consistent state of the data to all clients. Clients store all their data in the central database.
Condensation is distributed. Every user stores its own data. If the network is down, users may see and edit different versions of some shared data, which will get synchronized as soon as the network is back up.
Client-centric vs. server-centric
In a database system, the bulk of the work is done by the server. Clients merely send queries for execution to the server. As a consequence, the server has access to all data.
In Condensation, the bulk of the work is done by the clients. Any processing step, including indexing, querying, serializing and encrypting the data, is carried out by the client. The server merely stores encrypted pieces of data.
|Server-client protocol||get object, put object, list, add, remove||query language (e.g. SQL) or CRUD functions|
|Main data structure||object tree||table (collection) with tuples (rows, records, documents), relational|
|Data serialization||managed by the client||managed by the server|
|Indices||managed by the client||managed by the server|
|Distributed||yes, by design||no|
|Transactions||inherent, through atomic box additions; executed by the client||good support, but complex; executed by the server|
|Replication (one-way)||inherent, efficient||easy; limited efficiency|
|Synchronization (two-way)||fairly easy||difficult|