vmx

the blllog.

CouchDB _mix branch: Intersection of _view and _external

2009-04-21 22:35

In CouchDB it’s possible to query an external service (I’ll call it _external from now on) which returns an HTTP response directly to the client that made the request. Although this is already quite nice, it wasn’t possible to combine such _external requests with a classical _view.

The need for an intersection of _view and _external

Sometimes you’d like to exclude documents in a more dynamic fashion than a CouchDB _view supports it. Examples would be geospatial queries, a simple search like “exclude all documents that don’t contain a certain string in the title” or even fulltext searching. Therefore I’ve created a new handler called “_mix”.

The problem

As _external already exists quite a long time, it was clear that I would reuse the available functionality. The basic idea is simple: take all documents from a _view and all from _external, intersect them and finally output the result.

The problem is that CouchDB can be used for huge data sets, where you don’t want to keep a complete _view in memory to perform an intersection. The goals were:

  • The output needs to be streamable
  • Don’t keep all documents in memory
  • Use the existing functionality

The implementation

Over the past few months I had lengthy discussions with Paul Davis to find a suitable solution for the problem. We were going through all our ideas over and over again. The way I’ve implemented it now works for me so far, but it is definitely not the ultimate one and only solution, it’s just some solution.

As most of the functionality already exists, the current API of _view and _external is used. The difference is that it is POSTed as JSON to the mix handler instead of a GET request. Here’s an example with curl:

curl -d '{"design": "designdoc", "view": {"name": "viewname", "query": {"limit": "11"}}, "external": {"name": "minimal", "query": {"bbox": "[23,42,46,89]"}, "include_docs": false}}' http://localhost:5984/yourdb/_mix

At the moment most of the code is just copy and pasted from couch_httpd_view.erl and couch_httpd_external_* with some additional parsing of the POSTed JSON. The only new thing is that there’s an _external request before every document of a _view is outputted. This requests contains either the document ID or the whole document (if “include_docs” is set to “true”) and needs to return “true” if the document should be outputted (or resp. “false” if not).

I’ve included a sample _external script which excludes documents randomly (it can be found at src/contrib/minimal_external.py). To have a play with it, you just need to enable _external and add that script. How to do that can be found in the CouchDB Wiki.

Get it

All you need to do to have some fun with it is checking out my _mix branch at github.

Final words

And finally I’d like to thank Paul Davis for his time to discuss the issues with the intersection of _view and _external. Another “thank you” goes out to Adam Groves, he discovered a lot of annoyances with the parsing of the queries.

Categories: en, CouchDB

Bierprobe für Festivals

2009-04-12 22:35

Der Frühling beginnt und die Festival-Saison steht vor der Tür. Da muss man natürlich rechtzeitig Gedanken machen, wie man seinen Wasserhaushalt bei schweißtreibenden Konzerten und langen Nächten in Schuss hält.

Deshalb machten sich drei tapfere Tester auf in die Dosenpfad-Oase Österreich, um das beste Dosenbier der Saison zu küren. Die Bierprobe war natürlich auf höchstem wissenschaftlichen Niveau.

Testanordnung

Getrunken werden jeweils drei Dosen, die dann Reihum gegeben werden. Nachdem jeder probiert hat, wird darüber diskutiert und jeweils individuell eine Wertung in den im nächsten Abschnitt beschriebenen Kriterien vergeben. Danach wird die Dose mit dem verbleibenden Rest (etwa halb voll) in die Sonne gestellt. Jetzt werden die nächsten drei Dosen geöffnet.

Wenn das in der Sonnte stehende Bier dann auf Festivaltemperatur ist, wird nochmal nach dem gleichen Schema getrunken.

Testkriterien

Nachdem man sich bei Festivals immer schönes Wetter wünscht, spielt die Süffigkeit wenn das Bier warm und lack ist natürlich eine übergeordnete Rolle.

Süffigkeit kalt/frisch

Direkt nach dem Öffnen der Dose wird das kühle Bier getrunken und auf Süffigkeit überprüft.

Süffigkeit warm/lack

Nachdem die halbvollen Dosen in die Sonne gestellt wurden um warm und lack zu werden, wird die Süffigkeit nochmal überprüft. Die Veränderungen kann je nach Bier sehr verschieden ausfallen.

Gesamteindruck

Der Gesamteindruck hängt natürlich mit den vorher genannten Kriterien zusammen, wobei dort aber auch der Geschmack mit in die Wertung einfließt.

Name (Slogan) Süffigkeit kalt/frisch Süffigkeit warm/lack Gesamt-
eindruck
Alkohol-
gehalt
Preis in Euro (%/Euro)
Pittinger Premium Schankbier1 sehr gut (1,3) sehr gut (1,3) sehr gut (1,3) 4,2% 0,49 (8,57)
Egger Märzen1 befriedigend (3,0) sehr gut (1,3) gut (2,3) 5,2% 0,55 (9,54)
Schwechater Bier (…recht hat er)2 gut (2,3) gut (2,3) gut (2,3) 5,0% 0,79 (6,33)
Gösser Märzen (Gut. Besser. Gösser)3 befriedigend (2,6) befriedigend (3,3) befriedigend (3,3) 5,2% 0,99 (5,25)
Skol (Bier von internationalem Format) ausreichend (3,7) befriedigend (3,0) befriedigend (3,3) 4,0% 0,69 (5,80)
Stiegl Goldbräu4 mangelhaft (4,7) befriedigend (3,0) ausreichend (3,7) 4.9% 0,99 (4,95)
Budweiser (Budvar) Lager gut (2,0) ausreichend (3,7) ausreichend (4,0) 5,0% 0,89 (5,62)
Zipfer Märzen (Ein Glas heller Freude)5 befriedigend (2,6) mangelhaft (5,0) ausreichend (4,0) 5,0% 0,99 (5,05)
Kaiser Fassttyp6 mangelhaft (5,0) mangelhaft (5,0) mangelhaft (5,0) 5,0% 0,99 (5,05)
  1. Je wärmer desto besser
  2. Schmeckt gut, Nachgeschmack nicht festivaltauglich (wird schwächer wenn es warm ist)
  3. Ewig langer Nachgeschmack (selbst wenn es warm ist)
  4. Festivaluntauglicher Nachgeschmack verfliegt schnell
  5. Warm unglaublich festivaluntauglich
  6. Einfach unheimlich festivaluntauglich

Glossar

Süffigkeit

Ob's Bier sauba nunderloffd.

Festivaltauglichkeit

Ob das Bier geschmacklich dazu geeignet ist, es in Festival zuträglichen Mengen zu sich zu nehmen.

Besonderheit

Ein Bier hebt sich aufgrund seines sehr einfallsreichen Slogan heraus: Schwechater …recht hat er

Unser Rat

Der Testsieger ist klar das Pittinger, es überzeugt sowohl kalt/frisch als ach warm/lack und das bei einem sehr hohen Prozent pro Euro Gehalt, es stimmt also auch das Preis-/Leistungsverhältnis.

Wer viele Umdrehungen für wenig Geld will kann natürlich auch zum Egger greifen.

Categories: de, Festival

By Volker Mische

Powered by Kukkaisvoima version 7