<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Sammy.js, CouchDB, and the new web architecture</title>
	<atom:link href="http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/</link>
	<description>A Developer with too little time.</description>
	<lastBuildDate>Sat, 20 Feb 2010 06:35:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: @Lab this Week &#171; Tech Tock</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-51232</link>
		<dc:creator>@Lab this Week &#171; Tech Tock</dc:creator>
		<pubDate>Sat, 07 Nov 2009 05:43:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-51232</guid>
		<description>[...] web storage needs. We had a seminar @Lab and document oriented dbs seem to have a definite niche. CouchDB is another product in the [...]</description>
		<content:encoded><![CDATA[<p>[...] web storage needs. We had a seminar @Lab and document oriented dbs seem to have a definite niche. CouchDB is another product in the [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: almost effortless &#187; Weekly Digest, 10-12-09</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-50551</link>
		<dc:creator>almost effortless &#187; Weekly Digest, 10-12-09</dc:creator>
		<pubDate>Mon, 12 Oct 2009 15:18:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-50551</guid>
		<description>[...] Sammy.js, CouchDB, and the new web architecture Welcome to the new world. HTTP Databases and JSON Storage. The simple act of making the database and the browser more powerful on either end has destroyed the need for the middle tier. [...]</description>
		<content:encoded><![CDATA[<p>[...] Sammy.js, CouchDB, and the new web architecture Welcome to the new world. HTTP Databases and JSON Storage. The simple act of making the database and the browser more powerful on either end has destroyed the need for the middle tier. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kowsik</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-50480</link>
		<dc:creator>kowsik</dc:creator>
		<pubDate>Fri, 09 Oct 2009 18:20:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-50480</guid>
		<description>Check out this blog I wrote a while back on JS3: http://labs.mudynamics.com/2009/01/14/js3/ One difference was that I ended up using Helma as the web server. So it&#039;s still 3-tier, but JavaScript the whole way. You can see this in action on pcapr: http://www.pcapr.net (nosql here).</description>
		<content:encoded><![CDATA[<p>Check out this blog I wrote a while back on JS3: <a href="http://labs.mudynamics.com/2009/01/14/js3/" rel="nofollow">http://labs.mudynamics.com/2009/01/14/js3/</a> One difference was that I ended up using Helma as the web server. So it&#8217;s still 3-tier, but JavaScript the whole way. You can see this in action on pcapr: <a href="http://www.pcapr.net" rel="nofollow">http://www.pcapr.net</a> (nosql here).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AQ</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49974</link>
		<dc:creator>AQ</dc:creator>
		<pubDate>Fri, 18 Sep 2009 13:56:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49974</guid>
		<description>@David: Document validation actually already exists in CouchDB. You can ensure that documents have the correct author or structure very easily. What&#039;s currently in progress is better authorization/authentication rules per-database and per-document.</description>
		<content:encoded><![CDATA[<p>@David: Document validation actually already exists in CouchDB. You can ensure that documents have the correct author or structure very easily. What&#8217;s currently in progress is better authorization/authentication rules per-database and per-document.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AQ</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49973</link>
		<dc:creator>AQ</dc:creator>
		<pubDate>Fri, 18 Sep 2009 13:49:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49973</guid>
		<description>@ben: Not at persvr, but definitely at other server side JS frameworks. I like node.js in particular.</description>
		<content:encoded><![CDATA[<p>@ben: Not at persvr, but definitely at other server side JS frameworks. I like node.js in particular.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Smith</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49932</link>
		<dc:creator>David Smith</dc:creator>
		<pubDate>Thu, 17 Sep 2009 05:40:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49932</guid>
		<description>Beautifully, simple model. RESTful interface with CouchDB; I love it.  But sa others have mentions there are concerns with user authorization. (Not authentication; this is not the problem).

CuouchDB will probably get there as far as simple data access control is concerned. (Who&#039;s allowed to read/create/update/delete a document).

However, for all but the simplest of apps, more granular user authorization will be required.  

Example: User &quot;A&quot; cannot create an order document where the total cost exceeds $5000; User &quot;B&quot; is limited to $10000.   

These types of edits must be enforced in a locked room behind a firewall running in a secured user account. They cannot be done on the end-users browser.

I suspect the good people of the CouchDB community will try to add these types of business predicates, just as SQL-98 did with the ASSERT declaration (and I suspect they will be no better received).</description>
		<content:encoded><![CDATA[<p>Beautifully, simple model. RESTful interface with CouchDB; I love it.  But sa others have mentions there are concerns with user authorization. (Not authentication; this is not the problem).</p>
<p>CuouchDB will probably get there as far as simple data access control is concerned. (Who&#8217;s allowed to read/create/update/delete a document).</p>
<p>However, for all but the simplest of apps, more granular user authorization will be required.  </p>
<p>Example: User &#8220;A&#8221; cannot create an order document where the total cost exceeds $5000; User &#8220;B&#8221; is limited to $10000.   </p>
<p>These types of edits must be enforced in a locked room behind a firewall running in a secured user account. They cannot be done on the end-users browser.</p>
<p>I suspect the good people of the CouchDB community will try to add these types of business predicates, just as SQL-98 did with the ASSERT declaration (and I suspect they will be no better received).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ben hockey</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49924</link>
		<dc:creator>ben hockey</dc:creator>
		<pubDate>Thu, 17 Sep 2009 01:57:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49924</guid>
		<description>wondered if you&#039;ve looked at http://www.persvr.org/ to give you javscript on both sides of the wire.</description>
		<content:encoded><![CDATA[<p>wondered if you&#8217;ve looked at <a href="http://www.persvr.org/" rel="nofollow">http://www.persvr.org/</a> to give you javscript on both sides of the wire.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adrian Otto</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49907</link>
		<dc:creator>Adrian Otto</dc:creator>
		<pubDate>Wed, 16 Sep 2009 15:15:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49907</guid>
		<description>I host a few applications like the new one you&#039;ve described for high volume web sites. Making this scale well (into the GigE/sec+ range) is not as easy as it sounds. 

One key to the scalability is to get good caching for hot data that&#039;s continuously re-read in order to keep hotspots in your object store from crippling performance in the application. If your app has hot spots of data, then you&#039;ll want to work right at the object store (in the REST part of your NEW diagram) to allow efficient insertion of a cache (CDN, etc.) between the client and the application for reads, or integration with a distributed memory cache like memcached. Ideally your object store (CouchDB in your setup) has sort of functionality built in, rather than relying on disk reads (or even page cached reads) per request on a storage given node.

I prefer to have a CDN between the client application and the data store in order to reduce the RTT (latency) of fetching frequently accessed data that&#039;s common between multiple end-users of the application. This is particularly important if you have a globally distributed user base. If you use a good CDN that works well for small files, then you can achieve a cache that&#039;s closer to your end-users than your object store, driving better performance, and a higher degree of efficiency and interactivity.

Making this work right means that you need full RFC2616 support in your REST layer so that If-Match (section 14.24) capability is fully supported, you set Cache-Control headers properly to suit your application (needs vary here, no single solution fits all).

Now you might argue that data should be de-normalized in the object store so that you don&#039;t have hotspots. Perhaps that you should pepper replicas of frequently accessed data all over the object store so that all nodes get equal shares of work. That&#039;s fine, but that model is not as efficient as having a high performance distributed cache. It just spreads out the work. You get horizontal scale, but no real efficiency boost.</description>
		<content:encoded><![CDATA[<p>I host a few applications like the new one you&#8217;ve described for high volume web sites. Making this scale well (into the GigE/sec+ range) is not as easy as it sounds. </p>
<p>One key to the scalability is to get good caching for hot data that&#8217;s continuously re-read in order to keep hotspots in your object store from crippling performance in the application. If your app has hot spots of data, then you&#8217;ll want to work right at the object store (in the REST part of your NEW diagram) to allow efficient insertion of a cache (CDN, etc.) between the client and the application for reads, or integration with a distributed memory cache like memcached. Ideally your object store (CouchDB in your setup) has sort of functionality built in, rather than relying on disk reads (or even page cached reads) per request on a storage given node.</p>
<p>I prefer to have a CDN between the client application and the data store in order to reduce the RTT (latency) of fetching frequently accessed data that&#8217;s common between multiple end-users of the application. This is particularly important if you have a globally distributed user base. If you use a good CDN that works well for small files, then you can achieve a cache that&#8217;s closer to your end-users than your object store, driving better performance, and a higher degree of efficiency and interactivity.</p>
<p>Making this work right means that you need full RFC2616 support in your REST layer so that If-Match (section 14.24) capability is fully supported, you set Cache-Control headers properly to suit your application (needs vary here, no single solution fits all).</p>
<p>Now you might argue that data should be de-normalized in the object store so that you don&#8217;t have hotspots. Perhaps that you should pepper replicas of frequently accessed data all over the object store so that all nodes get equal shares of work. That&#8217;s fine, but that model is not as efficient as having a high performance distributed cache. It just spreads out the work. You get horizontal scale, but no real efficiency boost.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The Future of Web Apps: More Web, Less App</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49905</link>
		<dc:creator>The Future of Web Apps: More Web, Less App</dc:creator>
		<pubDate>Wed, 16 Sep 2009 13:32:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49905</guid>
		<description>[...] &#8220;a tiny javascript framework built on top of jQuery inspired by Ruby’s Sinatra.&#8221; In Sammy.js, CouchDB, and the new web architecture, Aaron talks about the new age that we on the web are entering into. He writes that the current [...]</description>
		<content:encoded><![CDATA[<p>[...] &#8220;a tiny javascript framework built on top of jQuery inspired by Ruby’s Sinatra.&#8221; In Sammy.js, CouchDB, and the new web architecture, Aaron talks about the new age that we on the web are entering into. He writes that the current [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: OpenZA &#8212; Blog &#8212; Is fat the new slim?</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49904</link>
		<dc:creator>OpenZA &#8212; Blog &#8212; Is fat the new slim?</dc:creator>
		<pubDate>Wed, 16 Sep 2009 11:05:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49904</guid>
		<description>[...] they guy from QuickleyBlog created a new way to run web apps. It&#8217;s based on sammy.js. Sammy.js, in turn, is based on Sinatra. Sinatra is a very light [...]</description>
		<content:encoded><![CDATA[<p>[...] they guy from QuickleyBlog created a new way to run web apps. It&#8217;s based on sammy.js. Sammy.js, in turn, is based on Sinatra. Sinatra is a very light [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: MV</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49885</link>
		<dc:creator>MV</dc:creator>
		<pubDate>Tue, 15 Sep 2009 21:43:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49885</guid>
		<description>I would certainly agree with you, I&#039;ve said it before:

  http://www.slideshare.net/secret/EcxO2A5MZia1q4

   -- MV</description>
		<content:encoded><![CDATA[<p>I would certainly agree with you, I&#8217;ve said it before:</p>
<p>  <a href="http://www.slideshare.net/secret/EcxO2A5MZia1q4" rel="nofollow">http://www.slideshare.net/secret/EcxO2A5MZia1q4</a></p>
<p>   &#8212; MV</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: links for 2009-09-15 &#171; that dismal science</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49880</link>
		<dc:creator>links for 2009-09-15 &#171; that dismal science</dc:creator>
		<pubDate>Tue, 15 Sep 2009 19:36:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49880</guid>
		<description>[...] Sammy.js, CouchDB, and the new web architecture (tags: web internet javascript webdev framework database http json js jquery sql architecture couchdb sammy nosql) [...]</description>
		<content:encoded><![CDATA[<p>[...] Sammy.js, CouchDB, and the new web architecture (tags: web internet javascript webdev framework database http json js jquery sql architecture couchdb sammy nosql) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AQ</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49877</link>
		<dc:creator>AQ</dc:creator>
		<pubDate>Tue, 15 Sep 2009 18:36:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49877</guid>
		<description>@tom: I&#039;ll post a couple links soon for other projects using it here, soon. Thanks</description>
		<content:encoded><![CDATA[<p>@tom: I&#8217;ll post a couple links soon for other projects using it here, soon. Thanks</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jan</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49876</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Tue, 15 Sep 2009 18:33:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49876</guid>
		<description>(Disclaimer: CouchDB dev here :)

-- 

Great article. 

Re Crawling: CouchDB has built in transformation functions that can turn any JSON into static HTML for google to crawl.

Re Security: Even if CouchDB&#039;s auth model will go all the way eventually, the main use case for it is having an instance on each personal device (laptop, desktop, set top, mobile, whatever) with all a user&#039;s local data (and maybe a a copy of her peer&#039;s data). Security is less an issue here with a centralised server system. CouchDB replication is used to sync all these devices and auth &amp; replication filters already can ensure that a user can only replicate the date she is allowed to. With that data, and the application itself, she can do what she want.

Cheers
Jan
--</description>
		<content:encoded><![CDATA[<p>(Disclaimer: CouchDB dev here <img src='http://www.quirkey.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#8211; </p>
<p>Great article. </p>
<p>Re Crawling: CouchDB has built in transformation functions that can turn any JSON into static HTML for google to crawl.</p>
<p>Re Security: Even if CouchDB&#8217;s auth model will go all the way eventually, the main use case for it is having an instance on each personal device (laptop, desktop, set top, mobile, whatever) with all a user&#8217;s local data (and maybe a a copy of her peer&#8217;s data). Security is less an issue here with a centralised server system. CouchDB replication is used to sync all these devices and auth &amp; replication filters already can ensure that a user can only replicate the date she is allowed to. With that data, and the application itself, she can do what she want.</p>
<p>Cheers<br />
Jan<br />
&#8211;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bill Thomas</title>
		<link>http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/comment-page-1/#comment-49875</link>
		<dc:creator>Bill Thomas</dc:creator>
		<pubDate>Tue, 15 Sep 2009 17:47:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=359#comment-49875</guid>
		<description>Well done.  It seems you have rediscovered client/server, except for that part where neither the frontend or backend perform as well and the marshalling is done by JSON (which is WAY better than the binary protocols the old dogs USED to use.  And if they are really hard up for that, I say they can whip up a jquery backend for Thrift.)

Powerbuilder in Javascript should rock.  Many congratulations on the awesomeness.</description>
		<content:encoded><![CDATA[<p>Well done.  It seems you have rediscovered client/server, except for that part where neither the frontend or backend perform as well and the marshalling is done by JSON (which is WAY better than the binary protocols the old dogs USED to use.  And if they are really hard up for that, I say they can whip up a jquery backend for Thrift.)</p>
<p>Powerbuilder in Javascript should rock.  Many congratulations on the awesomeness.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
