These questions would probably take an entire blog post to answer in full but here are some simplified explanations:
-
Couchbase doesn’t save strings because strings waste space and are inefficient in general. Plus with our new binary format we can seek and parse pieces out of them without actually parsing the whole object into memory first (this is very awkward to do with strings). It might also come into play later for sending JSON in network requests to save bandwidth but that is not decided yet.
-
Dictionary< K, V > is really just an in memory representation of a JSON object. The data is serialized as JSON, it is just not written as a string. On .NET I use JSON .NET to tokenize the object for me and then use those tokens to do the write.
-
SQLite is used because it is incredibly reliable, mature (as I’m sure everyone knows), and nothing we have found yet has proven faster. Plus it works well with our goal of providing a more SQL-like query implementation that is less foreign to people than map / reduce, and as of 3.9 has ramped up support for working with JSON inside of columns (along with an abstract way to work on arbitrary sub types which is very useful for us). Bonus: there is an open source solution for providing encryption with an identical API. We tried for a while to replace it but failed in the end.
-
There is an incredible difference in how server and lite works. One is a multi process application running on a powerful machine and the other is an embedded process that runs on a computer the size of an adult hand. The main interaction with server is through its REST API and the command line, and the main interaction with lite is through API calls. Server has a lot of different information stored in a variety of formats (indexing server, analytics engine, key value storage, caching, etc), and lite has just one