<br><br><div class="gmail_quote">On Wed, Apr 8, 2009 at 2:10 PM, Stephan Maka <span dir="ltr">&lt;<a href="mailto:stephan@spaceboyz.net">stephan@spaceboyz.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">Christopher Zorn wrote:<br>
&gt; Just wanted to announce that I started a couchdb backend for ejabberd.<br>
<br>
</div>This is an interesting project.<br>
</blockquote><div><br>Thanks<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
I did an internship at ProcessOne in the past semester and my task was<br>
to abstract out backend specific code from the modules. I do not want to<br>
discourage you, but the following reasons kept me from implementing a<br>
CouchDB backend:<br>
</blockquote><div><br>Cool.<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
* CouchDB&#39;s primary keys (_id) are picky on allowed characters, because<br>
  you can use attachments and other features. Watch out for that.<br>
  In particular, I was hitting attachments even when escaping the<br>
  document id. Might have been a bug.<br>
</blockquote><div><br>Ok. I have not run into this just yet. I will keep an eye out for it. <br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
* Due to CouchDB&#39;s versioning, any write operation will cause the<br>
  database to grow size-wise. In the version I experimented with this<br>
  turned out to be quite rapidly. I advise periodic compaction<br>
  operations.<br>
</blockquote><div><br>Do you have a number on how large the growth was and how fast? Thanks for the advice.<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
* Last, but most important, CouchDB has no transactions like Mnesia or<br>
  any SQL database have. They&#39;re important for a reliable IM server.<br>
  Even in case you invent your own schema, you will still have to pay<br>
  attention to write over the exact revision of a document that you&#39;ve<br>
  read before. I eventually implemented a MVCC layer on top of<br>
  erlang_couchdb: couch_lier[1]. I&#39;ve been desperately wanting comments<br>
  on that. :)<br>
</blockquote><div><br>I am now following couch_lier on github. I did not find it when I looked for this before I started. Dont know why. I will check it out. Thanks for posting this. <br><br>I have only implemented authentication right now, so I have not run into a case where I need transactions. <br>
 <br>Thank you! <br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
As I said my task was a more general approach, targeting minor<br>
modifications to the modules themselves, ergo to reduce code duplication<br>
while not introducing new bugs. </blockquote><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
Stephan<br>
<br>
[1] <a href="http://github.com/astro/erlang_couchdb/tree/couch_lier" target="_blank">http://github.com/astro/erlang_couchdb/tree/couch_lier</a><br>
<br>
_______________________________________________<br>
ejabberd mailing list<br>
<a href="mailto:ejabberd@jabber.ru">ejabberd@jabber.ru</a><br>
<a href="http://lists.jabber.ru/mailman/listinfo/ejabberd" target="_blank">http://lists.jabber.ru/mailman/listinfo/ejabberd</a><br>
</blockquote></div><br>