<?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: Managing Versioning</title>
	<atom:link href="http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
	<description>Gently flexing the grid</description>
	<lastBuildDate>Thu, 16 May 2013 13:56:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: cs satellite services</title>
		<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/comment-page-1/#comment-39962</link>
		<dc:creator>cs satellite services</dc:creator>
		<pubDate>Wed, 15 May 2013 04:50:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.benstopford.com/?p=1710#comment-39962</guid>
		<description>What&#039;s up, always i used to check web site posts here in the early hours in the daylight, as i love to learn more and more.</description>
		<content:encoded><![CDATA[<p>What&#8217;s up, always i used to check web site posts here in the early hours in the daylight, as i love to learn more and more.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rjw</title>
		<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/comment-page-1/#comment-1193</link>
		<dc:creator>Rjw</dc:creator>
		<pubDate>Wed, 16 Nov 2011 19:51:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.benstopford.com/?p=1710#comment-1193</guid>
		<description>Yep, that looks pretty good...</description>
		<content:encoded><![CDATA[<p>Yep, that looks pretty good&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexey Ragozin</title>
		<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/comment-page-1/#comment-1192</link>
		<dc:creator>Alexey Ragozin</dc:creator>
		<pubDate>Wed, 16 Nov 2011 19:08:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.benstopford.com/?p=1710#comment-1192</guid>
		<description>You do not need to do it that complex way :)

All you need just say

&lt;code&gt;
// get latest version for key k
cache.entrySet(tsHelper.floor(k, null));
&lt;code&gt;

See example on http://code.google.com/p/gridkit/wiki/TimeSeriesIndex

Underhood, helper will create TimeSeriesFilter wrapped into KeyAssociationFilter.

KeyAssociationFilter will ensure requiest to be send to key owner only.

This is almost as efficient and cache.get().</description>
		<content:encoded><![CDATA[<p>You do not need to do it that complex way <img src='http://www.benstopford.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>All you need just say</p>
<p><code><br />
// get latest version for key k<br />
cache.entrySet(tsHelper.floor(k, null));<br />
</code><code></p>
<p>See example on <a href="http://code.google.com/p/gridkit/wiki/TimeSeriesIndex" rel="nofollow">http://code.google.com/p/gridkit/wiki/TimeSeriesIndex</a></p>
<p>Underhood, helper will create TimeSeriesFilter wrapped into KeyAssociationFilter.</p>
<p>KeyAssociationFilter will ensure requiest to be send to key owner only.</p>
<p>This is almost as efficient and cache.get().</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rjw</title>
		<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/comment-page-1/#comment-1191</link>
		<dc:creator>Rjw</dc:creator>
		<pubDate>Wed, 16 Nov 2011 00:54:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.benstopford.com/?p=1710#comment-1191</guid>
		<description>I wonder what the cost of 
A) getting the key owner of the non versiony part of the key
B) doing an invocation to the owner
C) once on the owner, poking into your versioned index stashed somewhere accessible by your indexawareextractor, to find the latest key. ( everything written in with immutable version numbers)
D) get (local unless partition redistribution happens before this point) - return that as the result of your invocable.

All depends on the cost of a single invocation, and making sure no pointless deser/ser goes on. 

Advantages would be: no second copy, no need to do a trigger that causes double the backup traffic/ events, immutable versions (ie near cacheable with no invalidation), should easily scale to get all, and pretty much zero overhead for as-of versioning ( the invocable can know what the highest version acceptable is) if you do clocked/non-local versions in the keys.

But would need to try it out...  :-)</description>
		<content:encoded><![CDATA[<p>I wonder what the cost of<br />
A) getting the key owner of the non versiony part of the key<br />
B) doing an invocation to the owner<br />
C) once on the owner, poking into your versioned index stashed somewhere accessible by your indexawareextractor, to find the latest key. ( everything written in with immutable version numbers)<br />
D) get (local unless partition redistribution happens before this point) &#8211; return that as the result of your invocable.</p>
<p>All depends on the cost of a single invocation, and making sure no pointless deser/ser goes on. </p>
<p>Advantages would be: no second copy, no need to do a trigger that causes double the backup traffic/ events, immutable versions (ie near cacheable with no invalidation), should easily scale to get all, and pretty much zero overhead for as-of versioning ( the invocable can know what the highest version acceptable is) if you do clocked/non-local versions in the keys.</p>
<p>But would need to try it out&#8230;  <img src='http://www.benstopford.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ben</title>
		<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/comment-page-1/#comment-1183</link>
		<dc:creator>ben</dc:creator>
		<pubDate>Tue, 01 Nov 2011 08:58:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.benstopford.com/?p=1710#comment-1183</guid>
		<description>Thanks Alexey. That is a very useful post. I have a post about snapshotting and timestamping in the pipeline and your method will be very relevant to that so I will incorporate it there. 

I see your solution as slightly different to the two mentioned here though. The ones here are simply designed to allow direct key based access to the latest version - this being the version most users are interested in most of the time. Key based access has some important benefits over regular filters:

- It is faster and more scalable (as it is directed rather than hitting each node). Although this problem can be partially addressed with PartitionFilters.
- It allows you to use near caching - something not available to filters.

As I said though - for time based queries which I&#039;ll be posting on and discussing at the SIG your approach looks ace.</description>
		<content:encoded><![CDATA[<p>Thanks Alexey. That is a very useful post. I have a post about snapshotting and timestamping in the pipeline and your method will be very relevant to that so I will incorporate it there. </p>
<p>I see your solution as slightly different to the two mentioned here though. The ones here are simply designed to allow direct key based access to the latest version &#8211; this being the version most users are interested in most of the time. Key based access has some important benefits over regular filters:</p>
<p>- It is faster and more scalable (as it is directed rather than hitting each node). Although this problem can be partially addressed with PartitionFilters.<br />
- It allows you to use near caching &#8211; something not available to filters.</p>
<p>As I said though &#8211; for time based queries which I&#8217;ll be posting on and discussing at the SIG your approach looks ace.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexey Ragozin</title>
		<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/comment-page-1/#comment-1182</link>
		<dc:creator>Alexey Ragozin</dc:creator>
		<pubDate>Tue, 01 Nov 2011 07:40:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.benstopford.com/?p=1710#comment-1182</guid>
		<description>Hi,

Accidently, I&#039;m working on exactly same problem right now.
And I can suggest 3rd aproach - using special kind of indexing structure (via Coherence index API) to find right version of data.
You can read more details here &lt;a href=&quot;http://aragozin.blogspot.com/2011/10/grid-pattern-managing-versioned-data.html&quot; rel=&quot;nofollow&quot;&gt;Monday, October 31, 2011
Data Grid Pattern - Time series index for managing versioned data&lt;/a&gt;
(source code is also available)

Reagards,
Alexey</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>Accidently, I&#8217;m working on exactly same problem right now.<br />
And I can suggest 3rd aproach &#8211; using special kind of indexing structure (via Coherence index API) to find right version of data.<br />
You can read more details here <a href="http://aragozin.blogspot.com/2011/10/grid-pattern-managing-versioned-data.html" rel="nofollow">Monday, October 31, 2011<br />
Data Grid Pattern &#8211; Time series index for managing versioned data</a><br />
(source code is also available)</p>
<p>Reagards,<br />
Alexey</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ben</title>
		<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/comment-page-1/#comment-1180</link>
		<dc:creator>ben</dc:creator>
		<pubDate>Thu, 20 Oct 2011 08:06:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.benstopford.com/?p=1710#comment-1180</guid>
		<description>Hi Ashwin. It&#039;s actually just a Map. Versions can be expired based on time, size or some custom policy.</description>
		<content:encoded><![CDATA[<p>Hi Ashwin. It&#8217;s actually just a Map. Versions can be expired based on time, size or some custom policy.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ashwin Jayaprakash</title>
		<link>http://www.benstopford.com/2011/10/19/coherence-implementation-pattern-latestversioned-caches/comment-page-1/#comment-1179</link>
		<dc:creator>Ashwin Jayaprakash</dc:creator>
		<pubDate>Wed, 19 Oct 2011 21:47:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.benstopford.com/?p=1710#comment-1179</guid>
		<description>Your version map seems like a per-key queue of fixed size. How do you purge old versions beyond, say 3 revisions/versions?

Do you do a findMaxVersion(key) and findMinVersion(key), then if max &gt; min + 3, then remove(key + min)? That looks like a lot of queries.

Redis has readymade constructs for such things - http://redis.io/commands

Ashwin.</description>
		<content:encoded><![CDATA[<p>Your version map seems like a per-key queue of fixed size. How do you purge old versions beyond, say 3 revisions/versions?</p>
<p>Do you do a findMaxVersion(key) and findMinVersion(key), then if max &gt; min + 3, then remove(key + min)? That looks like a lot of queries.</p>
<p>Redis has readymade constructs for such things &#8211; <a href="http://redis.io/commands" rel="nofollow">http://redis.io/commands</a></p>
<p>Ashwin.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Dynamic page generated in 0.221 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2013-05-16 15:30:58 -->
