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.

-- 



Reply via email to