<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.2" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Invert Your Database Caching Dependency for Extreme Scalability</title>
	<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/</link>
	<description>Down To The Bone</description>
	<pubDate>Sun, 12 Oct 2008 14:46:29 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.2</generator>

	<item>
		<title>by: DamionKutaeff</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-26226</link>
		<pubDate>Sat, 22 Mar 2008 20:13:07 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-26226</guid>
					<description>&lt;p&gt;Hello everybody, my name is Damion, and I'm glad to join your conmunity, 
and wish to assit as far as possible.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hello everybody, my name is Damion, and I&#8217;m glad to join your conmunity, 
and wish to assit as far as possible.</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Spook</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-19370</link>
		<pubDate>Thu, 24 Jan 2008 05:07:45 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-19370</guid>
					<description>&lt;p&gt;Hi Jonas,
How do you proceed, when you need to look for substrings in a property of an object ?&lt;/p&gt;

&lt;p&gt;To browse all objects and check this property individually, would take much time, wouldn't it ?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hi Jonas,
How do you proceed, when you need to look for substrings in a property of an object ?</p>

<p>To browse all objects and check this property individually, would take much time, wouldn&#8217;t it ?</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Jonas</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14746</link>
		<pubDate>Wed, 03 Oct 2007 12:47:50 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14746</guid>
					<description>&lt;blockquote&gt;
what do you use to query the objects? i’ve used write-behind caching, roughly as you suggest, but still return to the database for queries.
&lt;/blockquote&gt;

&lt;p&gt;Terracotta does not provide you with a query language (since it is not an OODBMS), so you have to use either plain Java code to do the navigation of the Java data structures (something that might require you to structure your cache in an intelligent way), or use something like Jofti (http://jofti.com/) which allows you to query objects. &lt;/p&gt;

&lt;p&gt;But if you frequently need to do very complicated queries  then this approach might not work well (however using Terracotta as a distributed cache would still be beneficial).&lt;/p&gt;

&lt;p&gt;Hope it helps.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
what do you use to query the objects? i’ve used write-behind caching, roughly as you suggest, but still return to the database for queries.
</blockquote>

<p>Terracotta does not provide you with a query language (since it is not an OODBMS), so you have to use either plain Java code to do the navigation of the Java data structures (something that might require you to structure your cache in an intelligent way), or use something like Jofti (http://jofti.com/) which allows you to query objects. </p>

<p>But if you frequently need to do very complicated queries  then this approach might not work well (however using Terracotta as a distributed cache would still be beneficial).</p>

<p>Hope it helps.</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: john</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14744</link>
		<pubDate>Wed, 03 Oct 2007 10:37:23 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14744</guid>
					<description>&lt;p&gt;what do you use to query the objects? i've used write-behind caching, roughly as you suggest, but still return to the database for queries.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>what do you use to query the objects? i&#8217;ve used write-behind caching, roughly as you suggest, but still return to the database for queries.</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Jonas</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14256</link>
		<pubDate>Wed, 04 Jul 2007 14:56:46 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14256</guid>
					<description>&lt;blockquote&gt;
If your bank account worked this way would you be happy with your balance being wrong as writes and reads happened on inconsistent copies?
&lt;/blockquote&gt;

&lt;p&gt;That could never happen with Terracotta.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
If your bank account worked this way would you be happy with your balance being wrong as writes and reads happened on inconsistent copies?
</blockquote>

<p>That could never happen with Terracotta.</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Jonas</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14255</link>
		<pubDate>Wed, 04 Jul 2007 14:54:19 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14255</guid>
					<description>&lt;p&gt;Regarding object faulting:&lt;/p&gt;

&lt;p&gt;Terracotta provides Virtual Memory in which objects are paged in and out on a demand basis, of course managed within ACID transactions. It is also adaptively runtime optimized based on actual usage.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Regarding object faulting:</p>

<p>Terracotta provides Virtual Memory in which objects are paged in and out on a demand basis, of course managed within ACID transactions. It is also adaptively runtime optimized based on actual usage.</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Jonas</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14254</link>
		<pubDate>Wed, 04 Jul 2007 14:49:36 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14254</guid>
					<description>&lt;p&gt;Regarding Prevayler: &lt;/p&gt;

&lt;p&gt;This is a very much different approach than just using Prevayler (which I have used quite a lot some years ago). It is basically just the transaction log that has similarities. &lt;/p&gt;

&lt;p&gt;Terracotta does not require Java Serialization and maintains pass-by-reference semantics, so you can work with your domain model as you would without either Terracotta or Prevayler. &lt;/p&gt;

&lt;p&gt;Also, the state is persisted just as much (and safe) without the tx log. It is only needed if you need to have the offline RDBMS snapshot.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Regarding Prevayler: </p>

<p>This is a very much different approach than just using Prevayler (which I have used quite a lot some years ago). It is basically just the transaction log that has similarities. </p>

<p>Terracotta does not require Java Serialization and maintains pass-by-reference semantics, so you can work with your domain model as you would without either Terracotta or Prevayler. </p>

<p>Also, the state is persisted just as much (and safe) without the tx log. It is only needed if you need to have the offline RDBMS snapshot.</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Jonas</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14253</link>
		<pubDate>Wed, 04 Jul 2007 14:44:28 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14253</guid>
					<description>&lt;p&gt;Bob, 
that is indeed not a trivial problem. &lt;/p&gt;

&lt;p&gt;Terracotta does not provide you with any object schema migration tools. But it tries to have an &quot;do no harm&quot; approach to object updates and migrations. &lt;/p&gt;

&lt;p&gt;This means that it allows you to add and remove fields to your objects (without shutting down the cluster, e.g. zero downtime). And as long as you do not change the type of the fields or change object hierarchies then you should be able to take down the nodes one by one and redeploy the updated application. When you start the node again it will join the cluster and have the latest state paged in before allowed to continue. &lt;/p&gt;

&lt;p&gt;This gives you two scenarios: &lt;/p&gt;

&lt;p&gt;-- add a field to a class - in this case the field (and its values) will simply only exist on the nodes that have been updated with the new class but will eventually be present on all nodes
-- remove a field from a class - in this case the field will be null on all nodes that still has the old version of the class until eventually removed on all nodes&lt;/p&gt;

&lt;p&gt;Not ideal, but I think it can get you pretty far. However, you should of course test this in the lab before trying it out on a live cluster. &lt;/p&gt;

&lt;p&gt;Hope it helps. &lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Bob, 
that is indeed not a trivial problem. </p>

<p>Terracotta does not provide you with any object schema migration tools. But it tries to have an &#8220;do no harm&#8221; approach to object updates and migrations. </p>

<p>This means that it allows you to add and remove fields to your objects (without shutting down the cluster, e.g. zero downtime). And as long as you do not change the type of the fields or change object hierarchies then you should be able to take down the nodes one by one and redeploy the updated application. When you start the node again it will join the cluster and have the latest state paged in before allowed to continue. </p>

<p>This gives you two scenarios: </p>

<p>&#8211; add a field to a class - in this case the field (and its values) will simply only exist on the nodes that have been updated with the new class but will eventually be present on all nodes
&#8211; remove a field from a class - in this case the field will be null on all nodes that still has the old version of the class until eventually removed on all nodes</p>

<p>Not ideal, but I think it can get you pretty far. However, you should of course test this in the lab before trying it out on a live cluster. </p>

<p>Hope it helps. </p>
]]></content:encoded>
				</item>
	<item>
		<title>by: fred</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14220</link>
		<pubDate>Thu, 28 Jun 2007 18:54:49 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14220</guid>
					<description>&lt;p&gt;If your bank account worked this way would you be happy with your balance being wrong as writes and reads happened on inconsistent copies?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>If your bank account worked this way would you be happy with your balance being wrong as writes and reads happened on inconsistent copies?</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Simon Harris</title>
		<link>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14218</link>
		<pubDate>Thu, 28 Jun 2007 15:27:15 +0000</pubDate>
		<guid>http://jonasboner.com/2007/06/27/invert-your-database-caching-dependency-for-extreme-scalability/#comment-14218</guid>
					<description>&lt;p&gt;Sounds similar to prevayler (http://www.prevayler.org/)?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Sounds similar to prevayler (http://www.prevayler.org/)?</p>
]]></content:encoded>
				</item>
</channel>
</rss>
