the main issue for those kind of ideas is to explain your vision of a NoSQL adapter......I've seen a lot of "please support a NoSQL DAL" but anyone explaining what is he missing from the current DAL. What do you need NoSQL DAL for ? Following some statements raised before: a) why DAL doesn't support whateverfunction() the X NoSQL engine provides? The point of "unleashing" all features of a particular NoSQL engine is basically letting you use db().whatevefunction() instead of db._adapter.whateverfunction() ? We can't possibly keep up with NoSQL discrepancies even for "common features" (i.e. mapreduce). Implementing on every adapter all of its own functions instead of letting you use the native function call is quite pointless, we're going to face a NoSQL adapter that is basically a decorator of native drivers with lots of "this functionality is not supported on X, in Y is possible, in Z there are some limitations".
DAL was made to abstract common uses of SQL databases that, by design, respond with a fixed functionality and a relatively small "fluctuation" between the syntax needed to traverse/filter/aggregate the same data. b) I don't want to have a schema. Yes, one of the major "culprit" of SQL vs NoSQL: SQL needs a fixed schema. This is my personal favourite. Why are you using an MVC framework if you don't want models ? Let's say the way DAL enforces you to have a "model" (db.define_table()) is "restricting" you to use a somewhat "fixed" schema, but you choose x NoSQL engine to be "schemaless" and you want to be schema free. How should a form be constructed without a model ? How will you define validators ? There's SQLFORM.factory if you want that kind of functionality, but having models keep your code DRY. The second you need to diverge from those models, SQLFORM.factory comes to rescue. And again, you want to change a model and add a field ? DAL surely doesn't get in your way: on SQL you get an alter table, on NoSQL you just redefined your model. DAL should only allow you to "shortcut" some common queries (i.e., row by id, "key/column contains value", update this row with this value, delete this row, etc).... all the rest is too much NoSQL specific..... the only thing missing right now I think is allowing inserting any dict/object/mapping through db.table.insert or db(set).update(), but that can be added with dedicated "insertdoc", "updatedoc" method skipping validators and model mapping adherence. --