[Mongrel] [ANN] e c30ac536947f7330943f8de9c33f70ef2d5994e7
_ at whats-your.name
Thu Aug 16 05:18:59 EDT 2007
e, elemental, is a stack for the data web
there are 4 components: earth, air, fire, water
earth is a pure-ruby RDF triple-store, with a fs backend. no dependencies on 3rd party databases, just add filesystem (tm). theres also a ram backend built with the Mongrel URI-classifier trie as the primitive datastructure. from these two it should be easy to extrapolate how to write a memcached/hadoop backend, or whatever is your cup of tea. ive found reiser4 works quite well.. the main inspiration behind the store design is git.
the API for the store should be familiar to users of jQuery.. as with one class wrapping a DOM node, you get one class wrapping a RDF resource. the resource can be an actual file on the filesystem - eg throw a dir of jpgs off your cam into a web dir and start annotating them.. literals are any valid JSON data, and resource versioning is available.
a JSON query engine is included, which queries like this:
as well as plain keyword search of literals. the underlying indices are visible in and implemented using the store itself.
designed with optimizability / hackability in mind, to invent the partitioning/distribution to meet your needs, adjust the editing method to send all edits to an Utu chan or RDF-over-JSON-over-Jabber to viewers, mirror data to a beastly SPARQL engine, etc.
water is the mongrel layer. it provides a default HTML view for crawlers, links, dillo, and pays attention to the headers to export RDF to tools that want it like tabulator, triplr, virtuoso. everything is cached for both server (serialized resource) and client (if-modified/etag). the base URI is mapped to the root of the server for your domain.
theres no global lock preventing concurrency, no class vars and only a couple instance vars (could make these go away, but this isnt haskell) . so far the only thing somewhat slow is ruby's sort_by. taking about 0.1 second for 30-50 mb of blog post data sorting on date. query results can be cached, but im going to investigate the performance and mem-hoggage of a RAM store for the index before rewriting everything in Lua.
the roadmap is add a few missing features: recursive queries (eg, get the 10 newest blog posts, and the 10 most recent comments for each of these), and OpenID-based accounts (local-only is supported currently). is there a mongrel-openID gem?
oh yeah, docs/tutorials will come some day, maybe..
More information about the Mongrel-users