Hello all,

although I am still doing a CouchDB review to better understand its
design, I like to ask for comments for a tiny idea.
I would like to add another index structure to CouchDB (a Merkle-Tree)
and come up with asking myself what the best way of doing this would be.
I have a rough guess of how closely couch_btree is knit into CouchDB.
Therefore I would like to hear from you experienced developers comments
on some of my ideas:

My suggestion is a MySQL-ly approach (pluggable engines) for CouchDB,
that is to factor out several components into generic behaviours:
e.g.
- a couch_gen_tree:
        abstracts access to couch_btree

Maybe even a
- couch_gen_storage
        e.g. file system, file storage access, etc.

- couch_gen_replicator
        an imperative approach to tree / storage replication.

As I said: I am new to CouchDB's code so I cannot really estimate how
the current layering approach looks like, and whether we can even split
out the 3 components.

Imho there would be several benefits in having this flexibility brough
by couch_gen_*:
- new use-cases for CouchDB:
        - R-trees: for adding another way of querrying
          documents (e.g. nearest neighbour search)
        - genome databases
        - a special datastructure for indexing tags
        - ...
- with a flexible storage layer, CouchDB could ran on top of other
infrastructures and products: like S3, SimpleDB, AppEngine, etc.
- (the following is just a guess:) a cleaner CouchDB codebase with a
clear layering and separation of components
- possibly (again, just a guess): with the plugin approach, we can more
easily support advanced indexing and db management schemes, like
distributed storage access, distributed transactions, etc.


Martin

Reply via email to