Hi there,
I am quite new to the world of CouchDB and I know that this is quite a
fundamental proposal, but I very much hope that it will still be
received and discussed openly:
The Mango Query Server aims at offering a simpler alternative to
MapReduce queries. As it stands now, it is also fundamentally limited in
terms of expressiveness an performance. Indices can be defined only over
a plain set of fields with none of the possibilities that a map function
offers. Selectors allow powerful combinations, but require to perform
much of the computational effort at query time. The $regex operator, for
example even contains a warning about this in the documentation.
My proposal would be to add an alternative way to define indices by
explicitly providing a design document map function. The 'fields'
argument of such a "computed index" would not have to exist as an actual
field in the database, but would be made available as a "computed field"
for regular use in subsequent find requests.
Ultimately, this approach would bridge the gap between the
simple-but-limited Mango queries and the powerful-but-unwieldy MapReduce
queries. Rather than having to decide between both approaches,
developers could start with the simple Mango approach and then just
learn one more concept if they need the full power.
(It is my understanding that the currently recommended approach is to
add computed fields to the documents directly at creation time. Though
this is a workaround for the limitations of selectors, it does not offer
any guarantees for internal consistency of a database and mixes the
concerns of content creation with those of retrieval.)
Thank you for your careful consideration. I am looking forward to
constructive discussion!
Greetings,
Norbert Nemec
- Proposal: Computed Indices in Mango Query Server Norbert Nemec
-