u1db-discuss team mailing list archive
-
u1db-discuss team
-
Mailing list archive
-
Message #00072
Re: Some view functions to ponder
It does seem like a place where user defined funcs could work. (Here are
some documents, give us a string to index on). Now whether the complexity
of supporting user defined functions is worth the effort..
John
=:->
On Jul 17, 2012 5:52 AM, "Eric Casteleijn" <eric.casteleijn@xxxxxxxxxxxxx>
wrote:
>
> Hi Jason,
>
> I thought it might be instructive (for me ;) to try and see to what extent
> those views could be implemented with the current state of the art of u1db.
> Note that I probably will get stuck somewhere, as u1db
> indexes are much much simpler than couchdb views.
>
> Each file in Dmedia has a corresponding doc in CouchDB. This is an
>> example doc with the essential schema that drives all the automation
>> behaviors (the "make file management go away" aspect of Dmedia):
>>
>> {
>> "_id": "**WEFB4GYQBWOEGCUA5AZEXOKWHCB4IU**SYZ2TGJBJUPFWTWCNL",
>> "type": "dmedia/file",
>> "time": 1338560151.467609,
>> "atime": 1342088785,
>> "bytes": 26566829,
>> "origin": "user",
>> "stored": {
>> "3KX6WX6YAUQIQ7M2Y3BMPSAI": {
>> "copies": 1,
>> "mtime": 1338564292,
>> "verified": 1338571742
>> },
>> "PSRJGX2O2N77XLBEBI2TNDNU": {
>> "copies": 1,
>> "mtime": 1338560150,
>> "verified": 1338564292
>> },
>> "YE4SYZAVTFEBDI2JZQBUTYQY": {
>> "copies": 1,
>> "mtime": 1338560150
>> }
>> }
>> }
>>
>> This particular file is stored in 3 different "stores" (let's say hard
>> drives, but a store could also be something like UbuntuOne or S3).
>> Each of these stores has a durability confidence of 1 copy, and the
>> total durability for this file is 3 copies. And the copy in the last
>> store hasn't yet been verified (full content-hash verification).
>>
>> The "stored" dictionary was the hardest thing to get right. Hopefully
>> And here's the 4 view functions, respectively, that drive these 4 tasks:
>>
>> file_stored = """
>> function(doc) {
>> if (doc.type == 'dmedia/file') {
>> var key;
>> for (key in doc.stored) {
>> emit(key, null);
>> }
>> }
>> }
>> """
>>
>
> This one's not currently supported but could easily be if a 'keys' index
> mapping were to be added, and then the index would be:
>
> doc.type, keys(doc.stored)
>
>
> file_verified = """
>> function(doc) {
>> if (doc.type == 'dmedia/file') {
>> var key;
>> for (key in doc.stored) {
>> emit([key, doc.stored[key].verified], null);
>> }
>> }
>> }
>> """
>>
>
> this one is harder, as we don't have a way to peek into variable parts of
> the document, and it's not immediately obvious to me how that could be
> added without adding a great deal of complexity, so this might just be a
> use case that u1db is too simple for. (Restructuring the document to
> contain a list of the keys somewhere would work, but that's assuming you
> can and want to do that.)
>
> file_fragile = """
>> function(doc) {
>> if (doc.type == 'dmedia/file' && doc.origin == 'user') {
>> var copies = 0;
>> var key;
>> for (key in doc.stored) {
>> copies += doc.stored[key].copies;
>> }
>> if (copies < 3) {
>> emit(copies, null);
>> }
>> }
>> }
>> """
>>
>
> Same for this one. We intentionally didn't support any kind of real logic
> in the views, to reduce complexity, both for view authors, and for the
> indexing engine.
>
> file_reclaimable = """
>> function(doc) {
>> if (doc.type == 'dmedia/file' && doc.origin == 'user') {
>> var copies = 0;
>> var key;
>> for (key in doc.stored) {
>> copies += doc.stored[key].copies;
>> }
>> if (copies >= 3) {
>> for (key in doc.stored) {
>> if (copies - doc.stored[key].copies >= 3) {
>> emit([key, doc.atime], null);
>> }
>> }
>> }
>> }
>> }
>> """
>>
>
> And same for this one.
>
> --
> eric casteleijn
> https://launchpad.net/~**thisfred <https://launchpad.net/~thisfred>
>
>
>
>
> --
> Mailing list: https://launchpad.net/~u1db-**discuss<https://launchpad.net/~u1db-discuss>
> Post to : u1db-discuss@lists.launchpad.**net<u1db-discuss@xxxxxxxxxxxxxxxxxxx>
> Unsubscribe : https://launchpad.net/~u1db-**discuss<https://launchpad.net/~u1db-discuss>
> More help : https://help.launchpad.net/**ListHelp<https://help.launchpad.net/ListHelp>
>
Follow ups
References