<?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: State of MySQL Market and will Replication live ?</title>
	<atom:link href="http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/</link>
	<description>Everything about MySQL Performance</description>
	<lastBuildDate>Sat, 07 Nov 2009 18:35:44 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Vlad</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-306813</link>
		<dc:creator>Vlad</dc:creator>
		<pubDate>Fri, 30 May 2008 11:15:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-306813</guid>
		<description>CouchDB looks like a great thing. One can even eliminate web server putting all webgui on Javasacript.</description>
		<content:encoded><![CDATA[<p>CouchDB looks like a great thing. One can even eliminate web server putting all webgui on Javasacript.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: roj</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-276890</link>
		<dc:creator>roj</dc:creator>
		<pubDate>Mon, 14 Apr 2008 14:55:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-276890</guid>
		<description>Have you folks seen Repcached?  Looks really neat with multi-master memcached replication?  

http://repcached.sourceforge.net/

Thoughts on this?</description>
		<content:encoded><![CDATA[<p>Have you folks seen Repcached?  Looks really neat with multi-master memcached replication?  </p>
<p><a href="http://repcached.sourceforge.net/" rel="nofollow">http://repcached.sourceforge.net/</a></p>
<p>Thoughts on this?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mike</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-273577</link>
		<dc:creator>mike</dc:creator>
		<pubDate>Fri, 11 Apr 2008 21:10:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-273577</guid>
		<description>Side note: just found this link on memcached FAQ, and it&#039;s exactly what I mentioned:
http://lists.danga.com/pipermail/memcached/2007-July/004578.html

Two-phase fetch - get IDs first (to build the list), then get the rest later</description>
		<content:encoded><![CDATA[<p>Side note: just found this link on memcached FAQ, and it&#8217;s exactly what I mentioned:<br />
<a href="http://lists.danga.com/pipermail/memcached/2007-July/004578.html" rel="nofollow">http://lists.danga.com/pipermail/memcached/2007-July/004578.html</a></p>
<p>Two-phase fetch &#8211; get IDs first (to build the list), then get the rest later</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: peter</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-273136</link>
		<dc:creator>peter</dc:creator>
		<pubDate>Fri, 11 Apr 2008 07:39:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-273136</guid>
		<description>Mike - yes when it comes to simply storing object by ID it is all trivial - you can use MySQL, native NDB  API,  BDB tables,  Hadoop etc.    It is also extremely easy to shard.   It is the queries which you currently push to the database which give the problem :)</description>
		<content:encoded><![CDATA[<p>Mike &#8211; yes when it comes to simply storing object by ID it is all trivial &#8211; you can use MySQL, native NDB  API,  BDB tables,  Hadoop etc.    It is also extremely easy to shard.   It is the queries which you currently push to the database which give the problem <img src='http://www.mysqlperformanceblog.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mike</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-273133</link>
		<dc:creator>mike</dc:creator>
		<pubDate>Fri, 11 Apr 2008 07:27:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-273133</guid>
		<description>Understood.

The idea was that if we build the list of IDs, then we can call generic accessor functions to get the data, and that is an abstraction layer in itself. It will check the cache, hit the db if needed, etc. - the consumer is none the wiser.

I also like this approach because it can enable sharding easily by adding one more check at the top of the function to determine the appropriate server/location of that data. Then use memcache to glue it together in the cache layer so next time it doesn&#039;t require hitting any of the shards. Hope that makes sense.

I assumed that the foundation inside of the generic functions may change, but the generic functions themselves can be called the same way in the app; the only changes will need to be in the accessor functions for the new data storage architecture... which could be sharding, additional forms of caching, a swap out to another RDBMS, moving to something like a web service or a fully SOA framework of clusters of servers each owning specific services and piecing them together on each request (much like I believe Amazon&#039;s e-Commerce system works)</description>
		<content:encoded><![CDATA[<p>Understood.</p>
<p>The idea was that if we build the list of IDs, then we can call generic accessor functions to get the data, and that is an abstraction layer in itself. It will check the cache, hit the db if needed, etc. &#8211; the consumer is none the wiser.</p>
<p>I also like this approach because it can enable sharding easily by adding one more check at the top of the function to determine the appropriate server/location of that data. Then use memcache to glue it together in the cache layer so next time it doesn&#8217;t require hitting any of the shards. Hope that makes sense.</p>
<p>I assumed that the foundation inside of the generic functions may change, but the generic functions themselves can be called the same way in the app; the only changes will need to be in the accessor functions for the new data storage architecture&#8230; which could be sharding, additional forms of caching, a swap out to another RDBMS, moving to something like a web service or a fully SOA framework of clusters of servers each owning specific services and piecing them together on each request (much like I believe Amazon&#8217;s e-Commerce system works)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: peter</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-273130</link>
		<dc:creator>peter</dc:creator>
		<pubDate>Fri, 11 Apr 2008 07:21:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-273130</guid>
		<description>Mike,

In your case you assume it is composing full objects is expensive but it well may be finding them. As you grow your application that would become bottleneck sooner or later. 

Again to dot get me wrong - memcache is cool and we use it a lot and help a lot of people to deploy it.  I&#039;m just saying there are challenges if your goal is to have things consistent as well as remove as much work from MySQL as possible.</description>
		<content:encoded><![CDATA[<p>Mike,</p>
<p>In your case you assume it is composing full objects is expensive but it well may be finding them. As you grow your application that would become bottleneck sooner or later. </p>
<p>Again to dot get me wrong &#8211; memcache is cool and we use it a lot and help a lot of people to deploy it.  I&#8217;m just saying there are challenges if your goal is to have things consistent as well as remove as much work from MySQL as possible.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: peter</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-273118</link>
		<dc:creator>peter</dc:creator>
		<pubDate>Fri, 11 Apr 2008 07:01:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-273118</guid>
		<description>Brian,

On which table ?  In this case you&#039;re assuming memcache stores rows similar to the database.  In this case things are trivial - removing/updating row in memcached if it is updatated in the database. However how do you handle this in the case I described ?</description>
		<content:encoded><![CDATA[<p>Brian,</p>
<p>On which table ?  In this case you&#8217;re assuming memcache stores rows similar to the database.  In this case things are trivial &#8211; removing/updating row in memcached if it is updatated in the database. However how do you handle this in the case I described ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mike</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-273115</link>
		<dc:creator>mike</dc:creator>
		<pubDate>Fri, 11 Apr 2008 06:47:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-273115</guid>
		<description>This is how I manage it right now.

To build collections, I select only the IDs, based on filtering, sorting/ordering, LIMIT, etc. I build an array based on that. I go directly to the database for that.

while(mysql results) {
   $fetch[] = $id;
}

Then feed $fetch to a cache_get() function, which is basically a generic wrapper for memcache_get().

I can&#039;t speak for how massively this scales, but allows us to go to the database only for ordering and other lower (or higher?) level functions.

I will say that the memcache UDF is a cool idea, and would probably make this additional step no longer required, but that still requires a connection through MySQL to the memcache layer. I like keeping MySQL out of the loop as much as possible, to save it more complex work... the above example should save a lot of data transfer and hopefully keep the pipe on the server open for more requests. I suppose just using memcache UDF for cache invalidation/reset, set, and the first get (to warm that cache key) would help though.</description>
		<content:encoded><![CDATA[<p>This is how I manage it right now.</p>
<p>To build collections, I select only the IDs, based on filtering, sorting/ordering, LIMIT, etc. I build an array based on that. I go directly to the database for that.</p>
<p>while(mysql results) {<br />
   $fetch[] = $id;<br />
}</p>
<p>Then feed $fetch to a cache_get() function, which is basically a generic wrapper for memcache_get().</p>
<p>I can&#8217;t speak for how massively this scales, but allows us to go to the database only for ordering and other lower (or higher?) level functions.</p>
<p>I will say that the memcache UDF is a cool idea, and would probably make this additional step no longer required, but that still requires a connection through MySQL to the memcache layer. I like keeping MySQL out of the loop as much as possible, to save it more complex work&#8230; the above example should save a lot of data transfer and hopefully keep the pipe on the server open for more requests. I suppose just using memcache UDF for cache invalidation/reset, set, and the first get (to warm that cache key) would help though.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brian Aker</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-273109</link>
		<dc:creator>Brian Aker</dc:creator>
		<pubDate>Fri, 11 Apr 2008 06:39:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-273109</guid>
		<description>Hi Peter!

Put a trigger on that table such that select memc_delete(b.somecol) from table a, b WHERE a.id = b.id etc.. just hook the dependency with a trigger to &quot;touch&quot; the rows in the other table.

Cheers,  
   -Brian</description>
		<content:encoded><![CDATA[<p>Hi Peter!</p>
<p>Put a trigger on that table such that select memc_delete(b.somecol) from table a, b WHERE a.id = b.id etc.. just hook the dependency with a trigger to &#8220;touch&#8221; the rows in the other table.</p>
<p>Cheers,<br />
   -Brian</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: peter</title>
		<link>http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/comment-page-1/#comment-273097</link>
		<dc:creator>peter</dc:creator>
		<pubDate>Fri, 11 Apr 2008 06:20:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/2008/04/09/state-of-mysql-market-and-will-replication-live/#comment-273097</guid>
		<description>Brian, 

I do not really understand what you mean.  You&#039;re updated row in the database.  That row was also cached as the part of 1000 dependent result sets.    How exactly do you propose update or invalidate these automatically. 

More specific example say I have my account ballance or expenses in cloths category cached. Now I go ahead and modify 
one of transactions (the amount was wrong).   

How do I do this with Memcache ?

Now you can implement smart Query Cache like table version approach but it is not good enough.  I would prefer cached amount for electronics expenses to remain in the cache because it was not affected.</description>
		<content:encoded><![CDATA[<p>Brian, </p>
<p>I do not really understand what you mean.  You&#8217;re updated row in the database.  That row was also cached as the part of 1000 dependent result sets.    How exactly do you propose update or invalidate these automatically. </p>
<p>More specific example say I have my account ballance or expenses in cloths category cached. Now I go ahead and modify<br />
one of transactions (the amount was wrong).   </p>
<p>How do I do this with Memcache ?</p>
<p>Now you can implement smart Query Cache like table version approach but it is not good enough.  I would prefer cached amount for electronics expenses to remain in the cache because it was not affected.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
