<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>TechLedger</title>
	<atom:link href="http://techledger.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://techledger.wordpress.com</link>
	<description>Scouring the Business of Technology</description>
	<lastBuildDate>Sat, 31 Dec 2011 02:12:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='techledger.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>TechLedger</title>
		<link>http://techledger.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://techledger.wordpress.com/osd.xml" title="TechLedger" />
	<atom:link rel='hub' href='http://techledger.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Siri-Controlled Car</title>
		<link>http://techledger.wordpress.com/2011/11/26/siri-controlled-car/</link>
		<comments>http://techledger.wordpress.com/2011/11/26/siri-controlled-car/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 03:44:11 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1263</guid>
		<description><![CDATA[Proof of concept of Siri remote car control, courtesy of Brandon Fiquett.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1263&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Proof of concept of Siri remote car control, courtesy of <a href="http://fiquett.com/?p=791" target="_blank">Brandon Fiquett</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1263/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1263&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/11/26/siri-controlled-car/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>
	</item>
		<item>
		<title>MySQL High Availability</title>
		<link>http://techledger.wordpress.com/2011/07/29/mysql-high-availability/</link>
		<comments>http://techledger.wordpress.com/2011/07/29/mysql-high-availability/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 07:42:08 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1252</guid>
		<description><![CDATA[Courtesy: Openlife.cc Baron Schwartz aka Xaprb dislikes MMM as HA tool Traditional setup: master-slave replication At a specified interval &#8211; the heartbeat &#8211; the clustering solution will see if your MySQL instance is still running. The default heartbeat is often something like 10 seconds and minimum granularity tends to be one second. Problem: What happens [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1252&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Courtesy: <a href="http://openlife.cc/blogs/2011/july/ultimate-mysql-high-availability-solution" target="_blank">Openlife.cc</a></p>
<ul>
<li>Baron Schwartz aka Xaprb dislikes <a href="http://www.xaprb.com/blog/2011/05/04/whats-wrong-with-mmm/" target="_blank">MMM</a> as HA tool</li>
<li>Traditional setup: master-slave replication</li>
<li>At a specified interval &#8211; the heartbeat &#8211; the clustering solution will see if your MySQL instance is still running. The default heartbeat is often something like 10 seconds and minimum granularity tends to be one second. Problem: What happens between these seconds the clustering solution is completely unaware of. If you have 5000 trx/sec, you could have fifty-thousand failures before an attempt to fix the error is made.</li>
<li>The clustering solution takes small peeks into MySQL from the outside, but other than that MySQL remains a black box. Problem: Say that there are network errors. This causes your transactions to fail, and it also causes replication to fail. So which one failed first? If transactions started failing first, and replication was still working until the end, then you are fine and you can fail over to the other node. But if replication failed first, then you will lose data if you fail over, because not everything was replicated. Your clustering software has no idea, it wasn&#8217;t looking when the error happened.</li>
<li>Typically the clustering software itself will have some communication going on, which has the benefit that it verifies that the network connection between nodes is ok. This is in itself useful, sure. Problem: But just like above, if the clustering software detects that network has failed, it&#8217;s still mostly unaware of the state of MySQL. The failover decision is done blindly.</li>
<li>In a typical setup like above, the clustering software is actually just checking whether there is a network connection between the two MySQL nodes. If yes, that makes it happy. Problem: Nobody is really checking whether the application servers can really connect to those MySQL nodes! This is one of the most classic errors to make in software programming: when testing for error conditions, you are not testing the thing you actually want to know the answer to, but testing something else. Kind of like the guy in the joke who was searching for his keys under the lamp where there was light, not where he actually lost the keys.</li>
</ul>
<p>Henrik Ingo&#8217;s favored solution: <strong>Galera</strong> (synchronous multi-master replication)</p>
<ul>
<li>Thanks to synchronous replication and Galera&#8217;s quorum mechanism, no commits are lost anywhere. When the failure happens, it will be detected as part of the replication process. The Galera nodes themselves figure out which node is thrown out of the cluster, and the remaining ones &#8211; who &#8220;have quorum&#8221; &#8211; proceed to commit the transaction. Application nodes that connected to the failing node will of course receive errors as their commits fail.</li>
<li>There is no need for maintaining master-slave state, virtual ip or to do any failover. The application can connect to any of the Galera nodes and if the transaction succeeds, then it succeeds. If it fails, retry with another node.</li>
<li>As a side comment: since the replication is synchronous there is no slave lag as you are familiar from MySQL replication, which can also cause you to lose data. This is not a weakness of clustering frameworks, but a strength of Galera compared to classic MySQL replication that most people out there still are using.</li>
</ul>
<p><strong>Caveat</strong>: This works if you use JDBC (see Oracle <a href="http://blogs.oracle.com/carriergrademysql/entry/how_to_use_jdbc_connector" target="_blank">blog</a> example)</p>
<blockquote><p>So in short, when using a Galera cluster, you should use <code>mysql:loadbalance:</code> in front of your JDBC connection string. This allows you to then give a list of MySQL nodes, which are all writeable masters. The JDBC driver will connect to any one of them and commit the transaction. If a node is not available, it will just try another one. (If a transaction was already in progress, it will fail with an exception, you can then retry it and it will just connect to a new node.)</p></blockquote>
<p><strong>Related links:</strong></p>
<p><a href="http://code.google.com/p/mysql-master-ha/" target="_blank">MySQL Master HA (MHA)</a> tool &#8211; by <a href="http://yoshinorimatsunobu.blogspot.com/2011/07/announcing-mysql-mha-mysql-master-high.html" target="_blank">Yoshinori Matsunobu</a></p>
<p><a href="http://www.skysql.com" target="_blank">SkySQL</a> commercial support for MHA</p>
<p><a href="http://it.toolbox.com/blogs/database-soup/the-three-database-clustering-users-35473" target="_blank">Three Database Clustering Users</a> &#8211; by Josh Berkus</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1252/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1252&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/29/mysql-high-availability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>
	</item>
		<item>
		<title>Networking as a Service</title>
		<link>http://techledger.wordpress.com/2011/07/28/networking-as-a-service/</link>
		<comments>http://techledger.wordpress.com/2011/07/28/networking-as-a-service/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 09:03:50 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[InfoGraphic]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1247</guid>
		<description><![CDATA[Courtesy: Cisco, GigaOM<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1247&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Courtesy: <a href="http://www.slideshare.net/ramdurairaj/openstack-the-time-is-now-lew-tucker-cisco" target="_blank">Cisco</a>, <a href="http://gigaom.com/cloud/why-cloud-is-forcing-cisco-to-embrace-open-source/" target="_blank">GigaOM</a></p>
<p><a href="http://techledger.files.wordpress.com/2011/07/eaas.jpg"><img class="alignnone size-full wp-image-1249" title="eaas" src="http://techledger.files.wordpress.com/2011/07/eaas.jpg?w=540&#038;h=400" alt="" width="540" height="400" /></a></p>
<p><a href="http://techledger.files.wordpress.com/2011/07/naas.png"><img class="alignnone size-full wp-image-1250" title="naas" src="http://techledger.files.wordpress.com/2011/07/naas.png?w=540&#038;h=397" alt="" width="540" height="397" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1247/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1247&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/28/networking-as-a-service/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>

		<media:content url="http://techledger.files.wordpress.com/2011/07/eaas.jpg" medium="image">
			<media:title type="html">eaas</media:title>
		</media:content>

		<media:content url="http://techledger.files.wordpress.com/2011/07/naas.png" medium="image">
			<media:title type="html">naas</media:title>
		</media:content>
	</item>
		<item>
		<title>Visualizing a Petabyte</title>
		<link>http://techledger.wordpress.com/2011/07/28/visualizing-a-petabyte/</link>
		<comments>http://techledger.wordpress.com/2011/07/28/visualizing-a-petabyte/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 07:34:09 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[InfoGraphic]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1243</guid>
		<description><![CDATA[Courtesy: Mozy<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1243&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Courtesy: <a href="http://mozy.com/blog/misc/how-much-is-a-petabyte/" target="_blank">Mozy</a></p>
<p><a href="http://techledger.files.wordpress.com/2011/07/whatsapetabyte.gif"><img class="alignnone size-full wp-image-1244" title="whatsapetabyte" src="http://techledger.files.wordpress.com/2011/07/whatsapetabyte.gif?w=540" alt=""   /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1243/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1243&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/28/visualizing-a-petabyte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>

		<media:content url="http://techledger.files.wordpress.com/2011/07/whatsapetabyte.gif" medium="image">
			<media:title type="html">whatsapetabyte</media:title>
		</media:content>
	</item>
		<item>
		<title>Bonding and MPIO</title>
		<link>http://techledger.wordpress.com/2011/07/28/bonding-and-mpio/</link>
		<comments>http://techledger.wordpress.com/2011/07/28/bonding-and-mpio/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 01:55:54 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Reprint]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1241</guid>
		<description><![CDATA[Note: This is a reprint from Open-E Blog There is  plenty of talk about Bonding and Multipath IO, but it is very difficult to get solid information about either one. Typically what documentation can be found is very bulky and the most important practical questions go unanswered. As a result the following questions are often [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1241&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Note: This is a reprint from <a href="http://blog.open-e.com/bonding-versus-mpio-explained" target="_blank">Open-E Blog</a></p>
<p>There is  plenty of talk about Bonding and Multipath IO, but it is very difficult to get solid information about either one. Typically what documentation can be found is very bulky and the most important practical questions go unanswered.</p>
<p>As a result the following questions are often heard:</p>
<ul>
<li>When should I use bonding and when should I use multipath?</li>
<li>I was expecting better throughput with bonding, why am I not seeing this?</li>
<li>My RAID array shows 400MB/sec with local test, how can I get 400/MB sec outside?</li>
</ul>
<p>Before we answer the above questions, let’s understand first how MPIO and bonding works.</p>
<p>MPIO allows a server with multiple NICs to transmit and receive I/O across all available interfaces to a corresponding MPIO-enabled server.  If a server has two 1Gb NICs and the storage server has two 1Gb NICs, the theoretical maximum throughput would be about 200 MB/s.</p>
<p>Link aggregation (LACP, 802.3ad, etc.) via NIC teaming does not work the same way as MPIO. Link aggregation does not improve the throughput of a single I/O flow.  A single flow will always traverse only one path.  The benefit of link aggregation is seen when several “unique” flows exist, each from different source. Each individual flow will be sent down its own available NIC interface which is determined by a hash algorithm. Thus with more unique flows, more NICs will provide greater aggregate throughput. Link aggregation will not provide improved throughput for iSCSI, although it does provide a degree of redundancy.</p>
<p>Bonding works between a server and switch. Numerous workstations using each using a single NIC connected to the switch will benefit from bonded connections between the switch and storage server.</p>
<p>MPIO works between a storage server and the client server, whether or not there is a switch in the path.</p>
<p>With these basics fact, it will now be easier to answer our questions.</p>
<p><strong>Q: </strong>When do I need bonding, and when is multipath appropriate?</p>
<p><strong>A:</strong> Bonding works for a NAS server with multiple workstations connected.</p>
<p>MPIO works between hosts and initiators on FC or iSCSI.  An example of MPIO configuration with a performance test showing 200MB/sec using dual Gb NIC’s is demonstrated step-by-step at: <a href="http://www.open-e.com/library/how-to-resources/" target="_blank">How to configure DSS V6 MPIO with Windows 2008 Server</a> .</p>
<p>In short:</p>
<ul>
<li>Bonding works for NAS</li>
<li>MPIO works for SAN</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1241/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1241&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/28/bonding-and-mpio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>
	</item>
		<item>
		<title>NoSQL is Premature Optimization</title>
		<link>http://techledger.wordpress.com/2011/07/26/nosql-is-premature-optimization/</link>
		<comments>http://techledger.wordpress.com/2011/07/26/nosql-is-premature-optimization/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 06:15:42 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[Reprint]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1238</guid>
		<description><![CDATA[Courtesy: Enterprise Irregulars Point 1:  NoSQL technologies require more investment than Relational to get going with.  The remarks from Netflix are pretty clear on this.  From the Netflix “Tech” blog: Adopting the non-relational model in general is not easy, and Netflix has been paying a steep pioneer tax while integrating these rapidly evolving and still maturing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1238&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Courtesy: <a href="http://www.enterpriseirregulars.com/40140/nosql-is-a-premature-optimization/" target="_blank">Enterprise Irregulars</a></p>
<p><strong>Point 1:  NoSQL technologies require more investment than Relational to get going with. </strong></p>
<p>The remarks from Netflix are pretty clear on this.  From <a href="http://techblog.netflix.com/2011/01/nosql-at-netflix.html">the Netflix “Tech” blog</a>:</p>
<p>Adopting the non-relational model in general is not easy, and Netflix has been paying a steep pioneer tax while integrating these rapidly evolving and still maturing NoSQL products. There is a learning curve and an operational overhead.</p>
<p>Or, as Sid Anand says, “How do you translate relational concepts, where there is an entire industry built up on an understanding of those concepts, to NoSQL?’</p>
<p>Companies embarking on NoSQL are dealing with less mature tools, less available talent that is familiar with the tools, and in general fewer available patterns and know-how with which to apply the new technology.  This creates a greater tax on being able to adopt the technology.  That sounds a lot like what we expect to see in premature optimizations to me.</p>
<p><strong>Point 2:  There is no particular advantage to NoSQL until you reach scales that require it.  In fact it is the opposite, given Point 1.</strong></p>
<p>It’s harder to use.  You wind up having to do more in your application layer to make up for what Relational does that NoSQL can’t that you may rely on.  Take consistency, for example.  As Anand says in his video, “Non-relational systems are not consistent.  Some, like Cassandra, will heal the data.  Some will not.  If yours doesn’t, you will spend a lot of time writing consistency checkers to deal with it.”  This is just one of many issues involved with being productive with NoSQL.</p>
<p><strong>Point 3:  If you are fortunate enough to need the scaling, you will have the time to migrate to NoSQL and it isn’t that expensive or painful to do so when the time comes.</strong></p>
<p>The root of premature optimization is engineers hating the thought of rewriting.  Their code has to do everything just exactly right the first time or its crap code.  But what about the idea you don’t even understand the problem well enough to write “good” code at first.  Maybe you need to see how users interact with it, what sorts of bottlenecks exist, and how the code will evolve.  Perhaps your startup will have to pivot a time or two before you’ve even started building the right product.  Wouldn’t it be great to be able to use more productive tools while you go through that process?  Isn’t that how we think about modern programming?</p>
<p>Yes it is, and the only reason not to think that way is if we have reason to believe that a migration will be, to use Stonebreaker’s words, “a fate worse than death.”  The trouble is, it isn’t a fate worse than death.  And yes, it will help to have great engineers, but by the time you get to the volumes that require NoSQL, you’ll be able to afford them, and even then, it isn’t that bad.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1238/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1238&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/26/nosql-is-premature-optimization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>
	</item>
		<item>
		<title>Scaling MySQL</title>
		<link>http://techledger.wordpress.com/2011/07/26/scaling-mysql/</link>
		<comments>http://techledger.wordpress.com/2011/07/26/scaling-mysql/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 03:31:53 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1233</guid>
		<description><![CDATA[After the storm has passed regarding GigaOM&#8217;s controversial post Facebook trapped in MySQL &#8216;fate worse than death&#8216;, Derrick Harris made his message clear once and for all: Whatever database technology someone might choose to use for a new web application, anyone who hopes to achieve even a fraction of Facebook’s traffic should not go down [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1233&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After the storm has passed regarding GigaOM&#8217;s controversial post <strong><em>Facebook trapped in MySQL &#8216;fate worse than death</em></strong>&#8216;, <a href="http://gigaom.com/cloud/is-stonebraker-right-why-sql-isnt-the-choice-du-jour-for-many-apps/" target="_blank">Derrick Harris</a> made his message clear once and for all:</p>
<blockquote><p>Whatever database technology someone might choose to use for a new web application, anyone who hopes to achieve even a fraction of Facebook’s traffic should not go down the same path as Facebook did.</p></blockquote>
<p>But bear in mind the situation of Facebook compared to other big companies:</p>
<p>1. Facebook is using open source MySQL</p>
<p>2. Facebook has &#8220;absolutely skilled&#8221; engineers (as Jim Starkey has noted)  and they don&#8217;t exist everywhere</p>
<p>3. Facebook has the added benefit of being able to pay them.</p>
<p>Facebook is a read-write software company, unlike the typical read-only big companies that have no time or capability rewriting software when it breaks down. Software engineering is Facebook&#8217;s forte because it&#8217;s in the business of software infrastructure. That &#8216;s the beauty of open source. You can tweak the code based on your needs.</p>
<p>But not everyone belongs to that category.</p>
<p><strong>Architecture is the problem</strong></p>
<blockquote><p>According to database industry analyst Curt Monash, Stonebraker makes a valid point in citing Facebook’s complex MySQL situation, because Facebook isn’t using MySQL for its relational capabilities. MySQL might be a fine database choice for a low-end application that requires full relational capabilities, but sharded MySQL plus memcached is not. You lose a lot of those as soon as you begin sharding, he explained, and the application actually communicates directly with memcached for data that resides in that layer. It’s that architecture that’s the problem.</p>
<p>Monash believes there are two timelines for when a technology runs its course, depending on the situation: <strong>1) when you shouldn’t use it to start a new project</strong>, and <strong>2) when you should upgrade</strong>. For new projects that might have to scale massively, he said, you wouldn’t choose MySQL plus memcached.</p>
<p>As for the sharding, Starkey said, “The only thing sharding has going for it is the absence of alternatives.” He noted that although it’s difficult to find anything he and Stonebraker agree on, they do both agree that traditional SQL databases aren’t easy to scale. Because scaling them is so complex, Starkey — who, like Stonebraker, has a horse in the NewSQL race with NimbusDB — thinks all legacy databases will be irrelevant in a few years. All except low-end MySQL, that is.</p></blockquote>
<p><strong>So what are the options?</strong></p>
<p>1) For new apps, you may use Clustrix,<a href="http://www.tokutek.com/products/tokudb-for-mysql/">TokuDB</a>, <a href="http://www.scaledb.com/index.html">ScaleDB</a> and <a href="http://www.schoonerinfotech.com/products/active_cluster">Schooner MySQL with Active Cluster</a>.</p>
<p>2) For retrofitting apps with <a href="http://www.dbms2.com/2011/02/24/transparent-sharding/" target="_blank">transparent sharding</a>,there is <a href="http://dbshards.com/" target="_blank">dbshards</a> and <a href="http://www.scalebase.com/" target="_blank">ScaleBase</a>.</p>
<p><strong>Related link:</strong></p>
<p><a href="http://www.dbms2.com/2011/07/15/facebook-mysql-nosql-voltdb-stonebraker" target="_blank">DBMS2 on Facebook/Stonebraker flap</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1233/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1233&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/26/scaling-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>
	</item>
		<item>
		<title>To Shard or Not To Shard</title>
		<link>http://techledger.wordpress.com/2011/07/22/to-shard-or-not-to-shard/</link>
		<comments>http://techledger.wordpress.com/2011/07/22/to-shard-or-not-to-shard/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 08:44:30 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1230</guid>
		<description><![CDATA[Courtesy: HighScalability.com Update 4: Why you don’t want to shard. by Morgon on the MySQL Performance Blog. Optimize everything else first, and then if performance still isn’t good enough, it’s time to take a very bitter medicine. Update 3: Building Scalable Databases: Pros and Cons of Various Database Sharding Schemes by Dare Obasanjo. Excellent discussion [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1230&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>
<p><strong>Courtesy: <a href="http://highscalability.com/unorthodox-approach-database-design-coming-shard" target="_blank">HighScalability.com</a></strong></p>
<p>Update 4: <a href="http://www.mysqlperformanceblog.com/2009/08/06/why-you-dont-want-to-shard/">Why you don’t want to shard.</a> by Morgon on the MySQL Performance Blog. <em>Optimize everything else first, and then if performance still isn’t good enough, it’s time to take a very bitter medicine. </em></p>
<p>Update 3: <a href="http://www.25hoursaday.com/weblog/2009/01/16/BuildingScalableDatabasesProsAndConsOfVariousDatabaseShardingSchemes.aspx">Building Scalable Databases: Pros and Cons of Various Database Sharding Schemes</a> by Dare Obasanjo. Excellent discussion of why and when you would choose a sharding architecture, how to shard, and problems with sharding.</p>
<p>Update 2: <a href="http://www.37signals.com/svn/posts/1509-mr-moore-gets-to-punt-on-sharding#">Mr. Moore gets to punt on sharding</a> by Alan Rimm-Kaufman of 37signals. Insightful article on design tradeoffs and the evils of premature optimization. With more memory, more CPU, and new tech like SSD, problems can be avoided before more exotic architectures like sharding are needed. Add features not infrastructure. <a href="http://jeremy.zawodny.com/blog/archives/010841.html">Jeremy Zawodny</a> says he&#8217;s wrong wrong wrong. we&#8217;re running multi-core CPUs at slower clock speeds. Moore won&#8217;t save you.</p>
<p>Update: Dan Pritchett shares some excellent <a href="http://www.addsimplicity.com/adding_simplicity_an_engi/2008/08/shard-lessons.html">Sharding Lessons</a>: Size Your Shards, Use Math on Shard Counts, Carefully Consider the Spread, Plan for Exceeding Your Shards</p>
<p>Once upon a time we scaled databases by buying ever bigger, faster, and more expensive machines. While this arrangement is great for big iron profit margins, it doesn&#8217;t work so well for the bank accounts of our heroic system builders who need to scale well past what they can afford to spend on giant database servers. In a extraordinary two article series, Dathan Pattishall, explains his motivation for a revolutionary new database architecture&#8211;sharding&#8211;that he began thinking about even before he worked at Friendster, and fully implemented at Flickr. Flickr now handles more than 1 billion transactions per day, responding in less then a few seconds and can scale linearly at a low cost.</p>
<p>What is sharding and how has it come to be the answer to large website scaling problems?</p>
<h2>Information Sources</h2>
<ul>
<li><a href="http://mysqldba.blogspot.com/2006/10/unorthodox-approach-to-database-design.html">Unorthodox approach to database design Part1:History</a></li>
<li><a href="http://mysqldba.blogspot.com/2006/11/unorthodox-approach-to-database-design.html">Unorthodox approach to database design Part 2:Friendster</a></li>
</ul>
<h2>What is sharding?</h2>
<p>While working at Auction Watch, Dathan got the idea to solve their scaling problems by creating a database server for a group of users and running those servers on cheap Linux boxes. In this scheme the data for User A is stored on one server and the data for User B is stored on another server. It&#8217;s a federated model. Groups of 500K users are stored together in what are called <em>shards</em>.</p>
<p>The advantages are:</p>
<ul>
<li><strong>High availability</strong>. If one box goes down the others still operate.</li>
<li><strong>Faster queries</strong>. Smaller amounts of data in each user group mean faster querying.</li>
<li><strong>More write bandwidth</strong>. With no master database serializing writes you can write in parallel which increases your write throughput. Writing is major bottleneck for many websites.</li>
<li><strong>You can do more work</strong>. A parallel backend means you can do more work simultaneously. You can handle higher user loads, especially when writing data, because there are parallel paths through your system. You can load balance web servers, which access shards over different network paths, which are processed by separate CPUs, which use separate caches of RAM and separate disk IO paths to process work. Very few bottlenecks limit your work.<br />
<h2>How is sharding different than traditional architectures?</h2>
<p>Sharding is different than traditional database architecture in several important ways:</li>
<li><strong>Data are denormalized</strong>. Traditionally we normalize data. Data are splayed out into anomaly-less tables and then joined back together again when they need to be used. In sharding the data are denormalized. You store together data that are used together.
<p>This doesn&#8217;t mean you don&#8217;t also segregate data by type. You can keep a user&#8217;s profile data separate from their comments, blogs, email, media, etc, but the user profile data would be stored and retrieved as a whole. This is a very fast approach. You just get a blob and store a blob. No joins are needed and it can be written with one disk write.</li>
<li><strong>Data are parallelized across many physical instances</strong>. Historically database servers are scaled up. You buy bigger machines to get more power. With sharding the data are parallelized and you scale by scaling out. Using this approach you can get massively more work done because it can be done in parallel.</li>
<li><strong>Data are kept small</strong>. The larger a set of data a server handles the harder it is to cash intelligently because you have such a wide diversity of data being accessed. You need huge gobs of RAM that may not even be enough to cache the data when you need it. By isolating data into smaller shards the data you are accessing is more likely to stay in cache.
<p>Smaller sets of data are also easier to backup, restore, and manage.</li>
<li><strong>Data are more highly available</strong>. Since the shards are independent a failure in one doesn&#8217;t cause a failure in another. And if you make each shard operate at 50% capacity it&#8217;s much easier to upgrade a shard in place. Keeping multiple data copies within a shard also helps with redundancy and making the data more parallelized so more work can be done on the data. You can also setup a shard to have a master-slave or dual master relationship within the shard to avoid a single point of failure within the shard. If one server goes down the other can take over.</li>
<li><strong>It doesn&#8217;t use replication</strong>. Replicating data from a master server to slave servers is a traditional approach to scaling. Data is written to a master server and then replicated to one or more slave servers. At that point read operations can be handled by the slaves, but all writes happen on the master.
<p>Obviously the master becomes the write bottleneck and a single point of failure. And as load increases the cost of replication increases. Replication costs in CPU, network bandwidth, and disk IO. The slaves fall behind and have stale data. The folks at <a href="http://highscalability.com/youtube-architecture">YouTube</a> had a big problem with replication overhead as they scaled.</p>
<p>Sharding cleanly and elegantly solves the problems with replication.</p>
<h2>Some Problems With Sharding</h2>
<p>Sharding isn&#8217;t perfect. It does have a few problems.</li>
<li><strong>Rebalancing data</strong>. What happens when a shard outgrows your storage and needs to be split? Let&#8217;s say some user has a particularly large friends list that blows your storage capacity for the shard. You need to move the user to a different shard.
<p>On some platforms I&#8217;ve worked on this is a killer problem. You had to build out the data center correctly from the start because moving data from shard to shard required a lot of downtime.</p>
<p>Rebalancing has to be built in from the start. Google&#8217;s shards automatically rebalance. For this to work data references must go through some sort of naming service so they can be relocated. This is what Flickr does. And your references must be invalidateable so the underlying data can be moved while you are using it.</li>
<li><strong>Joining data from multiple shards</strong>. To create a complex friends page, or a user profile page, or a thread discussion page, you usually must pull together lots of different data from many different sources. With sharding you can&#8217;t just issue a query and get back all the data. You have to make individual requests to your data sources, get all the responses, and the build the page. Thankfully, because of caching and fast networks this process is usually fast enough that your page load times can be excellent.</li>
<li><strong>How do you partition your data in shards?</strong> What data do you put in which shard? Where do comments go? Should all user data really go together, or just their profile data? Should a user&#8217;s media, IMs, friends lists, etc go somewhere else? Unfortunately there are no easy answer to these questions.</li>
<li><strong>Less leverage</strong>. People have experience with traditional RDBMS tools so there is a lot of help out there. You have books, experts, tool chains, and discussion forums when something goes wrong or you are wondering how to implement a new feature. Eclipse won&#8217;t have a shard view and you won&#8217;t find any automated backup and restore programs for your shard. With sharding you are on your own.</li>
<li><strong>Implementing shards is not well supported</strong>. Sharding is currently mostly a roll your own approach. <a href="http://highscalability.com/livejournal-architecture">LiveJournal</a> makes their tool chain available. Hibernate has a <a href="http://highscalability.com/product-hibernate-shards">library</a> under development. MySQL has added support for <a href="http://dev.mysql.com/doc/refman/5.1/en/partitioning.html">partioning</a>. But in general it&#8217;s still something you must implement yourself.<br />
<h2>See Also</h2>
</li>
<li>The <a href="http://highscalability.com/flickr-architecture">Flickr Architecture</a> for more interesting ideas on how to implement sharding.</li>
<li>The <a href="http://highscalability.com/google-architecture">Google Arhitecture</a>.</li>
<li>The <a href="http://highscalability.com/livejournal-architecture">LiveJournal Architecture</a>. They talk quite a bit about their sharding approach and give a lot of helpful details.</li>
<li>The <a href="http://highscalability.com/blog/category/shard">Shard</a> category.</li>
</ul>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1230&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/22/to-shard-or-not-to-shard/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>
	</item>
		<item>
		<title>VoltDB in Summary</title>
		<link>http://techledger.wordpress.com/2011/07/21/voltdb-in-summary/</link>
		<comments>http://techledger.wordpress.com/2011/07/21/voltdb-in-summary/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 07:19:57 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[101]]></category>
		<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1217</guid>
		<description><![CDATA[Courtesy: HighScalability.com What do you get when you take a SQL database and start a new implementation from scratch, taking advantage of the latest research and modern hardware? Mike Stonebraker, the sword wielding Johnny Appleseed of the database world, hopes you get something like his new database, VoltDB: a pure SQL, pure ACID, pure OLTP, shared nothing, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1217&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Courtesy: <a href="http://highscalability.com/blog/2010/6/28/voltdb-decapitates-six-sql-urban-myths-and-delivers-internet.html" target="_blank">HighScalability.com</a></p>
<p>What do you get when you take a SQL database and start a new implementation from scratch, taking advantage of the latest research and modern hardware? <a href="http://en.wikipedia.org/wiki/Michael_Stonebraker">Mike Stonebraker</a>, the sword wielding Johnny Appleseed of the database world, hopes you get something like his new database, <a href="http://voltdb.com/">VoltDB</a>: a pure SQL, pure ACID, pure OLTP, shared nothing, sharded, scalable, lockless, open source, in-memory DBMS, purpose-built for running hundreds of thousands of transactions a second. VoltDB <a href="http://community.voltdb.com/node/134">claims to be</a> 100 times faster than MySQL, up to 13 times faster than <a href="http://voltdb.com/blog/key-value-benchmarking">Cassandra</a>, and 45 times faster than Oracle, with near-linear scaling.</p>
<p>Will VoltDB kill off the new NoSQL upstarts? Will VoltDB cause a mass extinction of ancient databases? Probably no and no to both questions, but it&#8217;s a product with a definite point-of-view and is worth a look as the transaction component in your system. But will it be right for you? Let&#8217;s see&#8230;</p>
<p>I first heard the details about VoltDB at <a href="http://www.gluecon.com/">Gluecon</a>, where Mr. Stonebraker presented his highly entertaining <a href="http://voltdb.com/voltdb-webinar-sql-urban-myths">Urban Myths About SQL</a> (<a href="http://voltdb.com/_pdf/VoltDB-MikeStonebraker-SQLMythsWebinar-060310.pdf">slides</a>) talk. The hallways were buzzing long afterwards debating his in-your-face challenge of the existing order. With a refreshing take no prisoners style he lambastes existing SQL products as not good enough, saying they should either get better or die. NoSQL products fair no better as they simply aren&#8217;t necessary, their whole existence based on a perception of the weakness of current SQL implementations rather than what SQL could be, if properly implemented.</p>
<p>As an argument against NoSQL, VoltDB simply asks: if you can get a relational database with all the scalable ACIDy goodness, why would you ever stoop to using a NoSQL database that might only ever be eventually reliable?</p>
<p>The attack against existing relational databases systems is to position them as legacy systems that suffer from archaic architectures that are slow by design. They have to deal with disks, threads, and other performance killing constructs that must not be so much evolved as transcended. You see, VoltDB isn&#8217;t just competing against NoSQL, it&#8217;s aiming squarely at existing relational database vendors by using the patented technological leap play.</p>
<p>It&#8217;s a bold two prong strategy, but will the compromises that are part of the reconceptualization of SQL engine architectures prove too limiting for the majority?</p>
<h2>VoltDB&#8217;s Architecture</h2>
<p>The bulk of the rest of this article is about the SQL Myths, but I think touching a bit on Volt&#8217;s architecture before we address the myths will help frame the discussion a little better.</p>
<p>John Hugg, from VoltDB Engineering, <a href="http://pgsnake.blogspot.com/2010/05/comparing-voltdb-to-postgres.html?showComment=1274995426701#c4576284312681880511">says</a>:</p>
<blockquote><p>VoltDB is designed to solve OLTP at internet scale. If you don&#8217;t need the scale of VoltDB, then of course you&#8217;re going to be much happier with a general system like Postgres that offers so many features and is compatible with so much.</p></blockquote>
<p>Some other quotes indicating the spirit behind VoltDB:</p>
<blockquote><p>VoltDB is designed to make difficult or impossible problems manageable.</p></blockquote>
<p>And:</p>
<blockquote><p>When we set out to build VoltDB, we figured it wasn&#8217;t worth the tradeoffs unless it&#8217;s MUCH faster. So it is.</p></blockquote>
<p>John is not kidding. What matters to VoltDB is: <em>speed at scale, speed at scale, speed at scale, SQL, and ACID</em>. If that matches your priorities then you&#8217;ll probably be happy. Otherwise, as you&#8217;ll see, everything is sacrificed for speed at scale and what is sacrificed is often ease of use, generality, and <a href="http://community.voltdb.com/node/77">error checking</a>. It&#8217;s likely we&#8217;ll see ease of use improve over time, but for now it looks like rough going, unless of course, you are a going for speed at scale.</p>
<p>Some of the more interesting features are:</p>
<ul>
<li><strong>Main-memory storage</strong>. VoltDB stores all its data in RAM. This means there are no buffer pools to manage, so that source of overhead is removed, and there are no blocking disk stalls.</li>
<li><strong>Run transactions to completion –single threaded –in timestamp order</strong>. Based on the model that 200 record updates is a hefty transaction, you might as well run them to completion. By single threading all locking overhead is removed. On multi-core systems they allocate chunks of memory to each CPU and run each CPU single threaded.<em> </em></li>
<li><strong>Replicas</strong>. Persistence is guaranteed by having the data reside in multiple main memories. There are no logs, so there are no disks, which removes the disk overhead. For high availability an active-active architecture is used. Each transaction is run twice, once on each node in the same time-stamp order, which means the replicas are ACID consistent. Data can be asynchronously shipped to disk for a 5% performance hit. <em>VoltDB replication is not a master/slave or primary/backup replication system. Each replica is a first class, fully capable instance of a partition</em>.</li>
<li><strong>Tables are partitioned across multiple servers</strong>. Partitions are defined in a project XML configuration file that defines the partition keys. Clients can connect through any node. Partitioning is automatic, but you have to decide on the sharding key. They are working on an automated system to give advice on which key to use. If  new nodes are added then the data must <a href="http://community.voltdb.com/faq#id470114">reloaded</a> to cause the new nodes to be used, the data is not automatically distributed to the new nodes. Not all tables need to be partitioned. <em>Small, mostly read-only tables can be replicated across all of the partitions of a VoltDB database</em>.</li>
<li><strong>Stored procedures, written in Java, are the unit of transaction</strong>. Only data changed within a single invocation of a stored procedure is in a transaction, transactions can&#8217;t <a href="http://community.voltdb.com/node/137">span multiple rounds of communication with a client</a>. Also, from the same source as the previous link, <em> The vast majority (almost 100%) of your stored procedure invocations must be single partition for VoltDB to be useful to you. If, for example, you partitioned by graph node, updating multiple nodes in a single transaction/procedure will not be a single partition transaction. </em>These and other restrictions show the tradeoff between speed and generality.</li>
<li><strong>A limited subset of SQL &#8217;99 is supported</strong>. DDL operations like ALTER and DROP aren&#8217;t supported. Operations having to do with users, groups and security have been moved into XML configuration files. Updating table structure on the fly is convenient, but it&#8217;s not fast, so it&#8217;s out. You are also discouraged from doing SUM operations because it would take a long time and block other transactions. Single threading means you must quantize your work into small enough chunks that don&#8217;t stall the work pipeline. The goal is to have transactions run in under <a href="http://community.voltdb.com/node/119" target="_blank">50 milliseconds</a>. This is all done for speed.</li>
<li><a href="https://source.voltdb.com/browse/%7Eraw,r=3/Documentation/trunk/userdocs/UsingVoltDB/designingapp.xml">Design a schema and workflow to use single-sited procedures</a>. Data for a table is stored in a partition that is split onto different nodes. Each set of data on a node is called a<em> slice</em>. When a query can run on a single node it it is said to be <em>single-sited</em>. Performance is clearly best when a query can run on just one node against a limited set of data.</li>
<li><strong>Challenging operations model</strong>. Changing the database schema or reconfiguring the cluster hardware requires first saving and shutting down the database. An exception are stored procedures which can be updated on the fly. In general, choosing speed as the primary design point has made the development and deployment process complicated and limiting. VoltDB, for example, does not support bringing a node back into the cluster while the database is running. All clients must be stopped, the database must be snapshotted, the database must be restarted in a special mode, the data is reloaded, and then clients can be restarted. See <a href="http://community.voltdb.com/downloads">Using VoltDB</a> for more details.</li>
<li><strong>No WAN support</strong>. In the case of a network partition VoltDB chooses consistency over availability, so you will see a hiccup until connectivity can be restored. Out of all the possible failures, Mr. Stonebraker argues, network partitioning is one of the least likely failures, especially compared to programmer error, so choosing strong consistency over availability is the right engineering call. Future versions of VoltDB will do more to address this single-data-center catastrophe scenario.</li>
<li><strong>OLAP is purposefully kept separate</strong>. VoltDB is only for OLTP. It&#8217;s not for reporting or OLAP because those uses require locks be taken which destroys performance. Every update is spooled to a (optional) companion warehouse system that is a second or two behind the main transaction system (yet is perfectly consistent).  The companion system could be something like Vertica, an analytics RDBMS also built by Mr. Stonebraker. The justification for this split of responsibilities is that one size does not fit all. You should run transactions on something that is good at transactions and run reporting on something that&#8217;s good at reporting. An specialized transaction architecture will run circles around (50 times to 100 times faster) a one size fits all solution.</li>
</ul>
<p>VoltDB is different because it has consciously been architected to remove what <a href="http://portal.acm.org/citation.cfm?id=1376616.1376713">research shows</a> are the four common sources of overhead in database management systems: <em>logging (19%), <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.109.8323&amp;rep=rep1&amp;type=pdf">latching</a> (19%), locking (17%), B-tree, and buffer management operations</em> (35%). By removing all removing all four sources overhead VoltDB can be really fast while still being ACID. How fast?</p>
<p>VoltDB <a href="http://community.voltdb.com/node/134">claims to be</a> 100 times faster than MySQL, up to 13 times faster than <a href="http://voltdb.com/blog/key-value-benchmarking">Cassandra</a>, and 45 times faster than Oracle, with near-linear scaling. Though I think  linear scaling only applies when you are not using distributed transactions. Two-phase transactions with an in-memory database will be relatively fast, but they will still be slow given the protocol overhead.</p>
<p>Keep in mind VoltDB is in-memory, so it should be fast, that should be a given. But VoltDB says they have gone beyond what <a href="http://community.voltdb.com/node/95">other in-memory databases</a> have done, they haven&#8217;t just improved buffer management. By removing locks, latching, and threading overhead it&#8217;s that much faster than other in-memory databases. You could argue that it&#8217;s a waste of RAM, that only hot data should be kept in RAM, but the contention is that RAM can hold the entire data set, so there&#8217;s no reason to compromise anymore.</p>
<p>The performance comparison against databases like Cassandra is somewhat of a strawman as they are designed for a much different purpose. Cassandra can store petabytes of data, across hundreds of nodes, across multiple data centers, and new nodes can be added at will. Operationally there&#8217;s no comparison. Though I realize the purpose of the benchmarks is to show SQL is not natively slow, can work well for key-value usage patterns, and compares favorably with other industry leaders.</p>
<p>I really like the parallelism of the origin of relational theory with the origin of VoltDB&#8217;s architecture. Relational theory was invented to remove update anomalies that occur when storing duplicate data. When data is duplicated, either within a record or in different tables, then it&#8217;s easy to cause inconsistencies when performing updates, deletes, and adds. The normalization process makes it much harder to have inconsistencies because facts are stored once and only once. It may be a stretch, but I think of the process of creating a SQL engine architecture based on removing performance anomalies as fascinatingly analogous.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1217&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/21/voltdb-in-summary/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>
	</item>
		<item>
		<title>Much Ado About Stored Procedures</title>
		<link>http://techledger.wordpress.com/2011/07/21/much-ado-about-stored-procedures/</link>
		<comments>http://techledger.wordpress.com/2011/07/21/much-ado-about-stored-procedures/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 06:55:21 +0000</pubDate>
		<dc:creator>ibm2100</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://techledger.wordpress.com/?p=1207</guid>
		<description><![CDATA[Drizzle is against stored procedures (SP): Drizzle does not currently have any plugins that implement stored procedures. We viewed the implementation in MySQL to be non-optimal. They bloat the parser and only support one language (SQL2003 stored procedures), which was not well known. Fundamentally, stored procedures usually are not the correct architectural decision for applications [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1207&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://docs.drizzle.org/mysql_differences.html" target="_blank">Drizzle</a> is against stored procedures (SP):</strong></p>
<p>Drizzle does not currently have any plugins that implement stored procedures. We viewed the implementation in MySQL to be non-optimal. They bloat the parser and only support one language (SQL2003 stored procedures), which was not well known.</p>
<p>Fundamentally, stored procedures usually are not the correct architectural decision for applications that need to scale. Pushing more computation down into the database (which is the trickiest layer to scale) isn’t a good idea.</p>
<p>We do recognize the value of using stored procedures to reduce the time row locks are held, but think we can achieve the same advantage by improved batching of commands over the wire. This removes adding and administering stored procedures from the list of things that can go wrong in administering the database.</p>
<p><strong><a href="http://voltdb.com/company/blog/voltdb-stored-procedures" target="_blank">VoltDB</a>, on the other hand, is not only in favor of SP but requires it!</strong></p>
<p>VoltDB&#8217;s choice to use stored procedures as transactions is motivated by three observations.</p>
<ul>
<li>Round tripping unnecessary data (a large JSON document or unnecessary table columns) across the network to a client quickly becomes a bottleneck and an expensive one if you&#8217;re paying for bandwidth. VoltDB stored procedures allow full, transactional manipulation of stored data, eliminating unnecessary data transfer between application and database.</li>
<li>Application complexity is reduced when the data store provides stronger atomicity and isolation guarantees.</li>
<li>Multiple round-trips to the data store impose a latency cost that many applications can not afford. Even if applications are structured to tolerate inconsistent, non-atomic updates, latency budgets require minimizing application to database round trips.</li>
</ul>
<p>Moving data processing closer to the data, into the storage engine satisfies these observations. That requires a rich data query language and the ability to batch multiple statements together. This is exactly the functionality that VoltDB&#8217;s stored procedure interface provides.</p>
<p>Moreover, <a href="http://community.voltdb.com/docs/UsingVoltDB/DesignProc" target="_blank">VoltDB</a> adds:</p>
<p>Defining the database schema — and particularly the partitioning plan — goes hand in hand with understanding how the data is accessed. The two must be coordinated to ensure optimum performance. It doesn&#8217;t matter whether you design the partitioning first or the data access first, as long as in the end they work together. However, for the sake of example, we will use the schema and partitioning outlined in the preceding sections when discussing how to design the data access.</p>
<p>Writing VoltDB Stored Procedures</p>
<p>The key to designing the data access for VoltDB applications is that all access to the database must be done through stored procedures. It is possible to perform ad hoc queries on a VoltDB database (as described later) and they can be useful for debugging an application during development. However, ad hoc queries circumvent all of the performance optimizations VoltDB is designed for and therefore should not be used for production code.</p>
<p>In VoltDB, a stored procedure and a transaction are one and the same. The stored procedure succeeds or rolls back as a whole. Also, because the transaction is defined in advance as a stored procedure, there is no need for specific BEGIN TRANSACTION or END TRANSACTION commands.</p>
<p>Within the stored procedure, you access the database using standard SQL syntax, with statements such as SELECT, UPDATE, INSERT, and DELETE. You can also include your own code within the stored procedure to perform calculations on the returned values, to evaluate and execute conditional statements, or to perform any other functions your applications need.</p>
<p>The stored procedures themselves are written as Java classes, each procedure being a separate class.</p>
<p>It is worthwhile to note that VoltDB was designed for certain use cases only, not as a general-purpose RDBMS. As such, it caters to applications who want every ounce of speed in performance while providing ACID and scalability.</p>
<p><strong><a href="http://www.codeproject.com/KB/architecture/DudeWheresMyBusinessLogic.aspx" target="_blank">Chad Hower</a> aka Kudzu</strong></p>
<p>The following network topology is a major reason against stored procedures. The complexity of business logic is better suited at the business layer while relegating the schema changes and the data itself  to the database layer.</p>
<p><a href="http://techledger.files.wordpress.com/2011/07/bztip.jpeg"><img class="alignnone size-full wp-image-1227" title="bztip" src="http://techledger.files.wordpress.com/2011/07/bztip.jpeg?w=540" alt=""   /></a></p>
<p>Such a design has the following advantages:</p>
<ul>
<li>All the business logic exists in a single location and can be easily verified, debugged, and modified.</li>
<li>A true development language can be used to implement business rules. Such a language is both more flexible and more suited to such business rules rather than the SQL and stored procedures.</li>
<li>The database becomes a storage layer and can focus on efficiently retrieving and storing data without any constraints related to business logic implementations or the presentation layer.</li>
</ul>
<div><a href="http://techledger.files.wordpress.com/2011/07/bizlayer4.jpg"><img class="alignnone size-full wp-image-1226" title="bizlayer" src="http://techledger.files.wordpress.com/2011/07/bizlayer4.jpg?w=540&#038;h=206" alt="" width="540" height="206" /></a></div>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/techledger.wordpress.com/1207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/techledger.wordpress.com/1207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/techledger.wordpress.com/1207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/techledger.wordpress.com/1207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/techledger.wordpress.com/1207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/techledger.wordpress.com/1207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/techledger.wordpress.com/1207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/techledger.wordpress.com/1207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/techledger.wordpress.com/1207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/techledger.wordpress.com/1207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/techledger.wordpress.com/1207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/techledger.wordpress.com/1207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/techledger.wordpress.com/1207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/techledger.wordpress.com/1207/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techledger.wordpress.com&amp;blog=12858824&amp;post=1207&amp;subd=techledger&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://techledger.wordpress.com/2011/07/21/much-ado-about-stored-procedures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f335a2fb85e080e7ac4e2521e3e5be19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ibm2100</media:title>
		</media:content>

		<media:content url="http://techledger.files.wordpress.com/2011/07/bztip.jpeg" medium="image">
			<media:title type="html">bztip</media:title>
		</media:content>

		<media:content url="http://techledger.files.wordpress.com/2011/07/bizlayer4.jpg" medium="image">
			<media:title type="html">bizlayer</media:title>
		</media:content>
	</item>
	</channel>
</rss>
