﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Ayende @ Rahien</title><link>http://ayende.com</link><description>Ayende @ Rahien</description><copyright>Copyright (C) Ayende Rahien  2004 - 2021 (c) 2026</copyright><ttl>60</ttl><item><title>RichB commented on Rhino Divan DB reboot idea</title><description>Are floats, strings and lists the only data types supported in the JSON representation? If I need a higher-level data type, such as Date, how does the index get generated? Or do I have to represent it as iso-8601 and index that?
  
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment35</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment35</guid><pubDate>Wed, 03 Mar 2010 18:34:38 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Range query, probably, you need to be more specific
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment34</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment34</guid><pubDate>Wed, 03 Mar 2010 17:08:27 GMT</pubDate></item><item><title>RichB commented on Rhino Divan DB reboot idea</title><description>Lets say I want to store and query over dates. How would I do that?
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment33</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment33</guid><pubDate>Wed, 03 Mar 2010 16:57:07 GMT</pubDate></item><item><title>J Chris A commented on Rhino Divan DB reboot idea</title><description>Ayende,
  
  
It sounds like you are on the right track.
  
  
One really cool benefit you have if you stay close enough to the CouchDB API is that Futon should "just work". If your API differs enough that Futon doesn't work out of the box, you could of course build an HTTP facade to mimic CouchDB.
  
  
There is, for instance a Futon 4 Mongo project that does this. Pretty cool if you ask me: 
[http://github.com/sbellity/futon4mongo](http://github.com/sbellity/futon4mongo) If they got cross replication with CouchDB to work, then it'd be not just cool, but seriously useful.
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment32</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment32</guid><pubDate>Sun, 28 Feb 2010 04:18:55 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Chris,
  
I am actually thinking about having each document be composed of data &amp; metadata, the id &amp; rev would go in the metadata.
  
That would allow easier extensibility for things like adding security filters using user's code. I believe I got the idea from couch, but I am not sure.
  
Replication is something that I don't intend to deal with for the v1.0 release.
  
We have something very similar to design docs, basically a set of docs that uses Linq to define an index, which allow very efficient indexing.
  
Note that we don't even use the term view, mostly because it isn't a view like in couch, but rather just a way to define interesting indexes. We do allow filtering on the indexes, though, and some rather interesting document flattening.
  
  
Thanks for the pointer about booth, I'll look into that once the current crunch is over. I certainly find ruby easier to grok then erlang.
  
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment31</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment31</guid><pubDate>Sun, 28 Feb 2010 03:59:39 GMT</pubDate></item><item><title>J Chris A commented on Rhino Divan DB reboot idea</title><description>Very cool project to be doing this. I think there is definitely room for more diversity in the document database world.
  
  
I'd ask you to at least consider maintaining superficial compatibility with CouchDB (eg use _id instead of id, _rev if you have MVCC) consider reusing our JavaScript view engine (can be imported without any Erlang code at all, etc.)
  
  
There is still a lot of room to add some new value beyond CouchDB. We consider CouchDB to be a protocol even more than a database. I've started a project to port it to Ruby here: 
[http://github.com/jchris/booth](http://github.com/jchris/booth) This would be a nice place to steal the map reduce code from.
  
  
I'd be really curious to see how far you can deviate from CouchDB (implementation, API, targeted use cases) and still maintain, for instance, the ability to replicate with CouchDB, reuse CouchDB design documents, etc.
  
  
What do you think of that challenge?
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment30</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment30</guid><pubDate>Sun, 28 Feb 2010 03:45:05 GMT</pubDate></item><item><title>Chris Smith commented on Rhino Divan DB reboot idea</title><description>FYI, Lucene 2.9+ supports "near realtime" updates. You can get an IndexReader from an IndexWriter that will return documents that haven't been flushed yet.
  
  
You can also take a look at Zoie (
[http://code.google.com/p/zoie/](http://code.google.com/p/zoie/)) which does something similar.
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment29</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment29</guid><pubDate>Fri, 26 Feb 2010 14:26:37 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Demis,
  
I am doing background indexing, but we are talking about 25 ms update time from insert to index update
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment28</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment28</guid><pubDate>Fri, 26 Feb 2010 11:25:33 GMT</pubDate></item><item><title>Demis Bellot commented on Rhino Divan DB reboot idea</title><description>Redis let's you store and retrieve blobs atomically, it also lets you store and retrieve lists, sets and ordered sets of blobs fast. I've developed an open source generic Redis client that can store and retrieve the entire Northwind database (3202 records) in less than 1.2 seconds (on my 3yo imac) here:
  
[code.google.com/.../ServiceStackRedis](http://code.google.com/p/servicestack/wiki/ServiceStackRedis)  
  
I've opted for a smaller, faster serialization format, that is over 5x faster JSON (it's effectively JSON with the quotes and whitespace removed) as the JSON serializers in .NET we're having a noticeable impact on performance:
  
  
Benchmarks:
  
[www.servicestack.net/.../...-times.2010-02-06.html](http://www.servicestack.net/benchmarks/NorthwindDatabaseRowsSerialization.1000000-times.2010-02-06.html)  
  
Serialization format:
  
[code.google.com/p/servicestack/wiki/TypeSerializer](http://code.google.com/p/servicestack/wiki/TypeSerializer)  
  
Though I have to say adding searching capabilities in Lucene is quite an interesting idea. Are you doing real-time searches with Lucene? i.e. are you adding it to the Lucene index as soon as you've added it to Rhino DB? My old problem with Lucene was it didn't used to handle updates very well (and they've recommended that you build a new index instead) but it now looks like the new version does.
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment27</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment27</guid><pubDate>Fri, 26 Feb 2010 10:33:49 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Dan,
  
I know of that.
  
My thought about this:
  
[ayende.com/.../...alue-programming-model-to-a.aspx](http://ayende.com/Blog/archive/2009/10/20/jaoo-more-on-evolving-the-keyvalue-programming-model-to-a.aspx)</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment26</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment26</guid><pubDate>Fri, 26 Feb 2010 01:21:35 GMT</pubDate></item><item><title>Dan Finch commented on Rhino Divan DB reboot idea</title><description>The redis project (
[http://code.google.com/p/redis/](http://code.google.com/p/redis/)) is a document db where the documents have types (string, list, set, ordered set ) allowing you to do interesting operations at the server (
[http://code.google.com/p/redis/](http://code.google.com/p/redis/)wiki/CommandReference). Sharing this because if I were writing a document db I'd want to see it.
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment25</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment25</guid><pubDate>Fri, 26 Feb 2010 00:53:55 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Andy,
  
You are correct about Lucene's needing to open the index readers, that is actually a _big_ plus, because that means that readers don't have to wait for writers, and I don't get the scalability issue.
  
Lucene is highly scalable.
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment24</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment24</guid><pubDate>Thu, 25 Feb 2010 23:56:52 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Andrew,
  
The problem is that your method requires O(N) approach and running in the same address space.
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment23</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment23</guid><pubDate>Thu, 25 Feb 2010 23:56:05 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>You have wave enough to make this impossible. I don't think that what you want is even desirable.
  
Can you show some code here to explain that?
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment22</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment22</guid><pubDate>Thu, 25 Feb 2010 23:55:30 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Matt,
  
What I actually need is just a way to store blobs by key in an ACID manner.
  
It isn't hard to write, but ESENT gives it to me for free, and is very easy to use.
  
It is separated into a distinct place in the app, so you can replace it if you really want to.
  
It might be interesting to do a BDB storage implementation.
  
And no, Lucene doesn't offer TX guarantees, so you need to handle this differently.
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment21</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment21</guid><pubDate>Thu, 25 Feb 2010 23:54:52 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Tracker,
  
Right now, no. It actually shouldn't be hard at all.
  
Right now I am using Linq based expressions to do this, and it is fairly easy to work.
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment20</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment20</guid><pubDate>Thu, 25 Feb 2010 23:53:18 GMT</pubDate></item><item><title>Andy Hitchman commented on Rhino Divan DB reboot idea</title><description>I've had similar ideas about using Lucene as a KV store. Hit a bit of a roadblock when I realised that you have to re-open IndexReaders to pick up changes made by IndexWriters...
  
  
It looks like IndexReaders take a snapshot of the index when they open, which could be a massive scalability issue for a line-of-business transaction processing app.
  
  
I has a PoC workng very quickly, but on realising the above, I switched by backing store to Berkeley DB.
  
  
I might be wrong about Lucene's behaviour though.
  
  
Adny
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment19</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment19</guid><pubDate>Thu, 25 Feb 2010 21:26:27 GMT</pubDate></item><item><title>Andrew Stewart commented on Rhino Divan DB reboot idea</title><description>@RobConnery
  
  
Isnt all your asking for is a way to query the documents you store through linq? ie
  
  
using (var docDb = new DocDb())
  
{
  
   var doc = new Document
&lt;company();
  
   doc.Data = new Company { Name= "My Company"};
  
   docDb.Store(doc);
  
  
   var docsFound = docDb.Query
&lt;company().Where(q=&gt;q.Name=="My Company");
  
}
  
  
This is exactly the syntax I'm working on for my docdb, the docs contents are still stored in json though. They're just queried through linq accessed via strongly typed.
  
  
Cheers
  
  
Andy
  
&gt;</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment18</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment18</guid><pubDate>Thu, 25 Feb 2010 20:52:40 GMT</pubDate></item><item><title>Rob Conery commented on Rhino Divan DB reboot idea</title><description>@Oren what I mean is that (and I'm arm-waving... again) the storage model here is JSON, which is groovy, but I was thinking it would be interesting to somehow store the data using an Expression Tree. The storage would be MemberAccess I spose (not sure how to best leverage it... just musing) but instead of working up JSON calls, you could use LINQ directly.
  
  
Does this make sense?
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment17</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment17</guid><pubDate>Thu, 25 Feb 2010 20:38:26 GMT</pubDate></item><item><title>Matt commented on Rhino Divan DB reboot idea</title><description>Oren,
  
  
Darn (re: Esent) - oh well, still can't wait to see how it turns out. Question: would it be possible to do what you're looking to do with just Lucene.NET indexes?
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment16</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment16</guid><pubDate>Thu, 25 Feb 2010 20:33:26 GMT</pubDate></item><item><title>Tracker1 commented on Rhino Divan DB reboot idea</title><description>@MattMc3 I don't think the point is to *STORE* the data in JSON, but to interact with it in JSON.  Essentially the data store would be any level of native to object representation of said data.  The real advantage is having a light interaction to the database query/storage mechanism.  Not to mention that queries can naturally translate via JSON based calls to/from the database layer.
  
  
@Ayende Are you planning on using IronJS + DLR for a query engine at all?  I'm just curious here, as it could allow a similar interactive ability to what is offered by MongoDB.   I really like what I've seen in MongoDB, and would love to see the client interactions natively available in Jaxer (spidermonkey based) and node.js (V8 based).
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment15</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment15</guid><pubDate>Thu, 25 Feb 2010 20:10:14 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>JSON can be read anywhere, including on the browser, cheap to create and read, easy to understand, easy to manipulate.
  
Compared the cost of reading XML doc vs. JSON doc, you'll see the issues.
  
But it is also much more readable and ideally suited for object graph serializations
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment14</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment14</guid><pubDate>Thu, 25 Feb 2010 19:53:12 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Matt,
  
This is using Esent, so probably not.
  
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment13</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment13</guid><pubDate>Thu, 25 Feb 2010 19:51:28 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Rob,
  
Can you explain what you mean by expression based?
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment12</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment12</guid><pubDate>Thu, 25 Feb 2010 19:51:12 GMT</pubDate></item><item><title>MattMc3 commented on Rhino Divan DB reboot idea</title><description>I guess I don't quite understand the difference between creating a JSON document DB versus just using XML or YAML.  Yeah, XML isn't as readable and YAML isn't as wide spread - but unless you're only ever going to parse the result with JavaScript - what's the advantage in storing the data as JSON?
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment11</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment11</guid><pubDate>Thu, 25 Feb 2010 19:30:37 GMT</pubDate></item><item><title>Matt commented on Rhino Divan DB reboot idea</title><description>Can't wait to have a go at it - so is this built using Lucene.NET as a class library, i.e. I could use it in a medium trust environment even?
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment10</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment10</guid><pubDate>Thu, 25 Feb 2010 19:00:06 GMT</pubDate></item><item><title>Rob Conery commented on Rhino Divan DB reboot idea</title><description>How about instead of a Document, we build an Expression-based database :) that uses Linq internally to query the data?
  
  
You can do it... of all people :). I've mused on what it would take but... it's over my head. Your head is massive. 
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment9</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment9</guid><pubDate>Thu, 25 Feb 2010 18:27:45 GMT</pubDate></item><item><title>Judah Himango commented on Rhino Divan DB reboot idea</title><description>Awesome, nice work! So when can we play with it? :-)
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment8</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment8</guid><pubDate>Thu, 25 Feb 2010 17:26:41 GMT</pubDate></item><item><title>Ayende Rahien commented on Rhino Divan DB reboot idea</title><description>Judah,
  
That post was written about a week ago, two days ago and today I completed the engine impl.
  
It _is_ working
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment7</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment7</guid><pubDate>Thu, 25 Feb 2010 15:48:03 GMT</pubDate></item><item><title>Andrew Stewart commented on Rhino Divan DB reboot idea</title><description>Hi
  
  
Purely from a learning perspective I've been hacking up a documentdb in .net, inspired by mongodb. I've used esent as the backing store thanks to Oren for the idea.
  
  
If anyone would be interested in helping out or just looking over the codebase, you can find it below(very hacky in places still).
  
  
[http://github.com/AndyStewart/docsharp](http://github.com/AndyStewart/docsharp)  
  
It's very early about a week old and only currently works in embedded mode, but thought it would add to the conversation.
  
  
Andy
  
</description><link>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment6</link><guid>http://ayende.com/4409/rhino-divan-db-reboot-idea#comment6</guid><pubDate>Thu, 25 Feb 2010 15:44:18 GMT</pubDate></item></channel></rss>