<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-16959946</id><updated>2009-11-30T08:45:18.804+01:00</updated><title type='text'>The Data Charmer</title><subtitle type='html'>Data seem sometimes to have their own life and will, and they refuse to behave as we wish. &lt;br&gt;
Then, you need a firm hand to tame the wild data and turn them into quiet and obeying pets.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default?start-index=26&amp;max-results=25'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>321</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16959946.post-4745488672761165516</id><published>2009-11-29T22:56:00.007+01:00</published><updated>2009-11-30T08:45:18.810+01:00</updated><title type='text'>Poor man's schema comparison</title><content type='html'>&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://forge.mysql.com/tools/tool.php?id=237"&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/SxLuAy0DlmI/AAAAAAAAAxc/vKmE1r5KyJw/poorman_db.jpg" alt="poor man" title="poor man" width="300" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;Comparing database schemas is one of those DBA tasks that occur all the time.&lt;br /&gt;If you can afford the luxury of having a GUI, then &lt;a href="http://wb.mysql.com/"&gt;MySQL Workbench&lt;/a&gt; is the tool for you. It will help you compare structures and eventually synchronizing the differences.&lt;br /&gt;If the only thing at your disposal is a command line interface, without the possibility of installing anything (a common occurrence when you are consulting), then this &lt;a href="http://forge.mysql.com/tools/tool.php?id=237"&gt;Poor man's schema comparison&lt;/a&gt; tool may come handy.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;It's a Perl script that doesn't require module installations beyond the most common ones, and produces a simple output, fit for further examination with the tools that you have at your disposal when working at the command line.&lt;br /&gt;By default, it invokes &lt;i&gt;vimdiff&lt;/i&gt;, to let you know visually what the differences are. If you change the command to &lt;i&gt;diff&lt;/i&gt;, you get a simple output that can tell you at a glance what differences you are dealing with.&lt;br /&gt;For example, after executing&lt;br /&gt;&lt;pre&gt;&lt;code&gt;schema_diff mysql://root:mysql@127.0.0.1:3306/crosstab \&lt;br /&gt;mysql://msandbox:msandbox@127.0.0.1:5139/crosstab&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;I got the difference (a column that I introduced in the first database but not in the second one) clearly visible on screen.&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/SxL0L8cTRnI/AAAAAAAAAxg/8h6syUB9Wfo/s640/Screen%20shot%202009-11-29%20at%2023.21.35%20.png" title="vimdiff" alt="vimdiff" border="1" /&gt;&lt;br /&gt;I will be talking about this and other resources for the DBA during my session on schema maintenance at &lt;a href="http://codebits.eu"&gt;CodeBits&lt;/a&gt; in Lisbon (December 3-5, 2009).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-4745488672761165516?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/4745488672761165516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=4745488672761165516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/4745488672761165516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/4745488672761165516'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/11/poor-mans-schema-comparison.html' title='Poor man&apos;s schema comparison'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-6972318366660602771</id><published>2009-11-29T19:30:00.000+01:00</published><updated>2009-11-29T19:51:01.339+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='competition'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='gearman'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='lisbon'/><category scheme='http://www.blogger.com/atom/ns#' term='speaking'/><category scheme='http://www.blogger.com/atom/ns#' term='workbench'/><category scheme='http://www.blogger.com/atom/ns#' term='dba'/><category scheme='http://www.blogger.com/atom/ns#' term='codebits'/><title type='text'>Codebits 2009, coders conference and competition in Lisbon</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://codebits.eu"&gt;&lt;img src="http://lh6.ggpht.com/_gVfZHGgf5LA/SxK-g3AYzoI/AAAAAAAAAxU/qsp_5VkM-IE/logo_codebits.png" alt="Codebits" title="CodeBits, Lisbon" border="0"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://codebits.eu"&gt;Codebits&lt;/a&gt; is approaching. Form December 3rd to 5th, this gathering of 600 developers for a conference, which is also and foremost a competition, will occupy the mind of the best coders in Europe.&lt;br /&gt;I will be a speaker, with two sessions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://codebits.eu/intra/s/session/59"&gt;Schema maintenance in MySQL&lt;/a&gt;, focusing mainly on MySQL Workbench, but with an introduction to the other choices.&lt;/li&gt;&lt;li&gt;&lt;a href="http://codebits.eu/intra/s/session/69"&gt;Introduction to Gearman &lt;/a&gt;- a distributed, language and OS independent system for dynamic programming.&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Also Lenz will be there, and quite busy. He will also have two sessions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://codebits.eu/intra/s/session/83"&gt;Why you should be using a distributed version control system (DVCS) for your project&lt;/a&gt;, with advice that will benefit every developer.&lt;/li&gt;&lt;li&gt;&lt;a href="http://codebits.eu/intra/s/session/55"&gt;MySQL High Availability Solutions - Best practices and commonly used HA setups for MySQL&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The event is hardly like any other conference. It will be a momentous show, with a part that start like a conference but goes on as a competition. &lt;br /&gt;If you like coding, you must show up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-6972318366660602771?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/6972318366660602771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=6972318366660602771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/6972318366660602771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/6972318366660602771'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/11/codebits-2009-coders-conference-and.html' title='Codebits 2009, coders conference and competition in Lisbon'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-1586818819029144869</id><published>2009-11-12T09:04:00.003+01:00</published><updated>2009-11-12T14:01:26.157+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gearman'/><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='UDF'/><title type='text'>Gearman for MySQL</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://forge.mysql.com/wiki/Gearman_for_MySQL"&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/SvvBUD_78OI/AAAAAAAAAw4/bWmJD59TRBQ/s512/gearman_for_mysql.jpg" alt="Gearman for MySQL" title="Gearman for MySQL" width="200" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;If you haven't yet heard about &lt;a href="http://gearman.org"&gt;Gearman&lt;/a&gt;, it's time to have a look at it. Its distributed client server architecture are a perfect match for today's cloud oriented applications.&lt;br /&gt;When talking about Gearman, much stress is often given on its scalability features, such as map/reduce and distributed loads. But Gearman has also a distinctive advantage in the feature department, because of its design that I like to describe as &lt;i&gt;cooperation of the fittest&lt;/i&gt;. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;While a traditional application is written entirely in a given language, or it must find ways of integrating multiple languages parts, Gearman encourages easy cooperation between parts written in different languages, eliminating the need for library translation, and allowing the best implementation of a feature to be used by another part of the application.&lt;br /&gt;Today, November 12, at 14:00 UTC, there will be a MySQL University presentation on &lt;a href="http://forge.mysql.com/wiki/Gearman_for_MySQL"&gt;Gearman for MySQL&lt;/a&gt;.&lt;br /&gt;One of the components created by Gearman enthusiasts is a &lt;a href="https://launchpad.net/gearman-mysql-udf"&gt;MySQL Gearman UDF&lt;/a&gt;. Using this extension, you can easily define functions in any language you are familiar with, and then call that function from MySQL. Some examples shown in the presentation include shell access, regular expressions enhancements, storing results incrementally in a file, using language-specific library extensions, and your imagination can do the rest.&lt;br /&gt;Using this &lt;a href="http://forge.mysql.com/tools/tool.php?id=235"&gt;sample worker code&lt;/a&gt;, you can then call the UDF function from MySQL with something like thge following:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;select gman_do('reverse','abcd') as test;&lt;br /&gt;+------+&lt;br /&gt;| test |&lt;br /&gt;+------+&lt;br /&gt;| dcba |&lt;br /&gt;+------+&lt;br /&gt;&lt;br /&gt;SELECT gman_do('shell',&lt;br /&gt;concat(' ls -lh ', &lt;br /&gt;  (select variable_value from information_schema.global_variables &lt;br /&gt;  where variable_name = "datadir" )))\G &lt;br /&gt;&lt;br /&gt;total 40976&lt;br /&gt;-rw-rw----  1 gmax  staff   5.0M Nov 11 13:34 ib_logfile0&lt;br /&gt;-rw-rw----  1 gmax  staff   5.0M Nov 11 13:34 ib_logfile1&lt;br /&gt;-rw-rw----  1 gmax  staff    10M Nov 11 13:34 ibdata1&lt;br /&gt;-rw-rw----  1 gmax  staff   1.2K Nov 11 13:34 msandbox.err&lt;br /&gt;drwx------  2 gmax  staff   2.4K Nov 11 13:34 mysql&lt;br /&gt;-rw-rw----  1 gmax  staff     6B Nov 11 13:34 mysql_sandbox5140.pid&lt;br /&gt;drwx------  2 gmax  staff    68B Nov 11 13:34 test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;select gman_do('eval','2 * 3') ;&lt;br /&gt;+-------------------------+&lt;br /&gt;| gman_do('eval','2 * 3') |&lt;br /&gt;+-------------------------+&lt;br /&gt;| 6                       |&lt;br /&gt;+-------------------------+&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;select gman_do('eval',&lt;br /&gt;  concat('$_="',host,'";tr/a-z/b-za/; $_')) &lt;br /&gt;as test from mysql.user;&lt;br /&gt;+-------------+&lt;br /&gt;| test        |&lt;br /&gt;+-------------+&lt;br /&gt;| %           |&lt;br /&gt;| mpdbmiptu   |&lt;br /&gt;+-------------+&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-1586818819029144869?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/1586818819029144869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=1586818819029144869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/1586818819029144869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/1586818819029144869'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/11/gearman-for-mysql.html' title='Gearman for MySQL'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_gVfZHGgf5LA/SvvBUD_78OI/AAAAAAAAAw4/bWmJD59TRBQ/s72-c/gearman_for_mysql.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-8030946531331871349</id><published>2009-10-15T11:00:00.002+02:00</published><updated>2009-10-15T15:35:26.730+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scaling'/><category scheme='http://www.blogger.com/atom/ns#' term='partitioning'/><category scheme='http://www.blogger.com/atom/ns#' term='vertical'/><category scheme='http://www.blogger.com/atom/ns#' term='spider'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='partitions'/><category scheme='http://www.blogger.com/atom/ns#' term='sharding'/><category scheme='http://www.blogger.com/atom/ns#' term='HA'/><title type='text'>Spider and vertical partition engines with new goodies</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://forge.mysql.com/wiki/The_Spider_Storage_Engine"&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/StcH80Pc7fI/AAAAAAAAAvw/eUKemyoiO-c/s512/sharding_for_the_masses_vp.jpg" alt="sharding for the masses" width="200" title="sharding for the masses" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;The &lt;a href="https://launchpad.net/spiderformysql"&gt;Spider storage engine&lt;/a&gt; should be already known to the community. Its version 2.5 has recently been released, with new features, the most important of which is that you can execute remote SQL statements in the backend servers. The method is quite simple. Together with Spider, you also get an UDF that executes SQL code in a remote server. You send a query with parameters saying how to connect to the server, and check the result (1 for success, 0 for failure). If the SQL involves a SELECT, the result can be sent to a temporary table. Simple and effective.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;In addition to the Spider engine, Kentoku SHIBA has also created the &lt;a href="https://launchpad.net/vpformysql"&gt;vertical partitioning engine&lt;/a&gt;. Instead of splitting tables by record, you split them by columns. You can define a table with column A and column B, with primary key K, and another table with column C and column D, with primary key K. The vertical partition engine allows you to define a table with columns K, A, B, C, D, which looks to the user like a regular column. The backend tables can be of any engine.&lt;br /&gt;There is a &lt;a href="http://forge.mysql.com/wiki/The_Spider_Storage_Engine"&gt;MySQL University session&lt;/a&gt; about the Spider and VP engines on November 26th at 15:00 CEST. Free attendance!&lt;br /&gt;The slides are online: &lt;a href="http://www.slideshare.net/datacharmer/sharding-for-the-masses"&gt;Sharding for the masses&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-8030946531331871349?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/8030946531331871349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=8030946531331871349' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8030946531331871349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8030946531331871349'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/10/spider-and-vertical-partition-engines.html' title='Spider and vertical partition engines with new goodies'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_gVfZHGgf5LA/StcH80Pc7fI/AAAAAAAAAvw/eUKemyoiO-c/s72-c/sharding_for_the_masses_vp.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-2193385668243422604</id><published>2009-10-07T11:57:00.005+02:00</published><updated>2009-10-07T12:16:56.286+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gearman'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='new technologies'/><category scheme='http://www.blogger.com/atom/ns#' term='NRC'/><title type='text'>Introduction to Gearman at the Italian Research Council</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/datacharmer/quick-introduction-to-gearman"&gt;&lt;img src="http://lh6.ggpht.com/_gVfZHGgf5LA/Ssxl_T606ZI/AAAAAAAAAvU/jWeV2to33Rk/s512/gearman.png" alt="Introduction to Gearman" title="Gearman" width="200" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;I was invited to contribute some technological views at the Italian National Research Center, during the Internet Governance Forum.&lt;br /&gt;My contribution was a&lt;a href="http://www.slideshare.net/datacharmer/quick-introduction-to-gearman"&gt;high level introduction to Gearman&lt;/a&gt;, which sparked a debate about the impact of the cloud on the future of open source. Indeed, cloud computing technologies have the potential of harming open source adoption. If this is a threat and how much it can affect the future of open source depends on the business model behind the cloud.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;More interesting topics were discussed both during the scheduled sessions and in open gathering. During dinner, for example, I got some disturbing statistics on database teaching in Italian universities. It's very common to require MS Access and .NET as supporting technologies for most of the IT related exams, with little or no room for open alternatives like MySQL and PostgreSQL.&lt;br /&gt;Seeing a newsstand inside the compound of the NRC makes me think that progress slow in the institution that is supposed to be the guide of the Italian technology. The same thought crossed my mind seeing that the conference hall, a beautiful 200 seat hall well equipped for multimedia has only one power socket, but it was off limits for users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-2193385668243422604?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/2193385668243422604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=2193385668243422604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/2193385668243422604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/2193385668243422604'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/10/introduction-to-gearman-at-italian.html' title='Introduction to Gearman at the Italian Research Council'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_gVfZHGgf5LA/Ssxl_T606ZI/AAAAAAAAAvU/jWeV2to33Rk/s72-c/gearman.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-1386554614471341795</id><published>2009-09-24T14:18:00.004+02:00</published><updated>2009-09-24T14:42:19.387+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sandbox'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='article'/><category scheme='http://www.blogger.com/atom/ns#' term='zawodny'/><title type='text'>Jeremy's article on MySQL Sandbox in Linux Magazine</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jzawodn/55754383/"&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/SrtnO336t-I/AAAAAAAAAvQ/fEdWI3PLNGk/s576/DolphinSandbox_final_white_bg_jzawodny.jpg" alt="Jeremy Zawodny and MySQL Sandbox" title="Jeremy Zawodny and MySQL Sandbox" width="250" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://jeremy.zawodny.com/blog/"&gt;Jeremy Zawodny&lt;/a&gt; of Craiglist has written a kind &lt;a href="http://www.linux-mag.com/cache/7442/1.html"&gt;article&lt;/a&gt; about &lt;a href="http://mysqlsandbox.net"&gt;MySQL Sandbox&lt;/a&gt;.&lt;br /&gt;The article, &lt;a href="http://www.linux-mag.com/cache/7442/1.html"&gt;MySQL Sandbox: Treat MySQL Instances like Virtual Machines&lt;/a&gt;, is a practical test of MySQL Sandbox with usage examples and warm appreciation.&lt;br /&gt;Thanks, Jeremy!&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The article was published in July but I noticed it only today. I guess I should pay more attention to my favorite topics when I travel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-1386554614471341795?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/1386554614471341795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=1386554614471341795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/1386554614471341795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/1386554614471341795'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/09/jeremys-article-on-mysql-sandbox-in.html' title='Jeremy&apos;s article on MySQL Sandbox in Linux Magazine'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_gVfZHGgf5LA/SrtnO336t-I/AAAAAAAAAvQ/fEdWI3PLNGk/s72-c/DolphinSandbox_final_white_bg_jzawodny.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-4109683230618884680</id><published>2009-09-15T10:01:00.000+02:00</published><updated>2009-09-15T10:43:35.129+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='partitioning'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><category scheme='http://www.blogger.com/atom/ns#' term='5.1'/><category scheme='http://www.blogger.com/atom/ns#' term='trigger'/><title type='text'>Partitioning with non integer values using triggers</title><content type='html'>Looking at &lt;a href="http://bugs.mysql.com/bug.php?id=47310"&gt;Bug#47310&lt;/a&gt;, which is a feature request that I hear frequently when I talk about partitions, I wrote a comment, suggesting triggers to work around the limitation.&lt;br /&gt;The reason for the limitation is that allowing arbitrary functions for partitioning was too complex and it was provoking crashes and other unpleasant side effects (see the discussion under &lt;a href="http://bugs.mysql.com/bug.php?id=18198"&gt;bug#18198&lt;/a&gt;).&lt;br /&gt;But if you use a trigger, the resulting column is a plain integer, and many of the side effects disappear. The drawback is that you need to &lt;i&gt;add a column&lt;/i&gt; to your table, and you need to use that column when searching for data. With that in mind, you can implement the workaround quite easily.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;USE test;&lt;br /&gt;DROP TABLE IF EXISTS users;&lt;br /&gt;&lt;br /&gt;CREATE TABLE users (&lt;br /&gt;        user_id int(10) NOT NULL,&lt;br /&gt;        username varchar(25) DEFAULT NULL,&lt;br /&gt;        dummy INT not null,&lt;br /&gt;        PRIMARY KEY (user_id, dummy),&lt;br /&gt;        UNIQUE KEY username(username,dummy)&lt;br /&gt;) ;&lt;br /&gt;&lt;br /&gt;CREATE TRIGGER users_bi&lt;br /&gt;BEFORE INSERT ON users&lt;br /&gt;FOR EACH ROW&lt;br /&gt;SET NEW.dummy = ASCII(LOWER(LEFT(NEW.username,1))); &lt;br /&gt;&lt;br /&gt;ALTER TABLE users PARTITION BY RANGE (dummy) (&lt;br /&gt;        PARTITION p0 VALUES LESS THAN  (96),  #being f&lt;br /&gt;        PARTITION p1 VALUES LESS THAN (109),  #being m&lt;br /&gt;        PARTITION p2 VALUES LESS THAN (115),  #being s&lt;br /&gt;        PARTITION p3 VALUES LESS THAN (122)   #being z&lt;br /&gt;); &lt;br /&gt;&lt;br /&gt;INSERT INTO users (user_id, username)&lt;br /&gt;VALUES (1,'Joe'), (2,'Sam'),(3,'Abe'),(4,'Rich');&lt;br /&gt;&lt;br /&gt;EXPLAIN PARTITIONS SELECT * FROM users &lt;br /&gt;where username = 'Abe'; &lt;br /&gt;# This simple query doesn't use partition pruning. &lt;br /&gt;# This is to be expected.&lt;br /&gt;&lt;br /&gt;EXPLAIN PARTITIONS SELECT * FROM users &lt;br /&gt;where dummy = ASCII('a') and username = 'Abe'; &lt;br /&gt;# Here, the partition pruning kicks in, at the price of an extra&lt;br /&gt;# condition in the query.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-4109683230618884680?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/4109683230618884680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=4109683230618884680' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/4109683230618884680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/4109683230618884680'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/09/partitioning-with-non-integer-values.html' title='Partitioning with non integer values using triggers'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-5585424464479345583</id><published>2009-09-12T23:11:00.003+02:00</published><updated>2009-09-12T23:31:16.883+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='sandbox'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><category scheme='http://www.blogger.com/atom/ns#' term='snow leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='fix'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Snow Leopard blues</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://commons.wikimedia.org/wiki/File:Apple_with_worm_dan_gerh_01.svg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/Apple_with_worm_dan_gerh_01.svg/319px-Apple_with_worm_dan_gerh_01.svg.png" alt="Apple Snow Leopard blues" title="Apple Snow Leopard blues" width="200" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;On Friday afternoon, I went to give a presentation about MySQL advanced features at &lt;a href="http://www.sardegnaricerche.it/en/technologypark/"&gt;the &lt;i&gt;Sardegna Ricerche&lt;/i&gt; technology park&lt;/a&gt;. The presentation included a quick introduction to &lt;a href="http://mysqlsandbox.net"&gt;MySQL Sandbox&lt;/a&gt;, something that I have been doing for years, and I thought I could do blindfold, if required. However, something didn't go as expected.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; Just when I was showing off how easy is it to install a MySQL sandbox from a tarball, I was faced by an unexpected error. The &lt;i&gt;tar&lt;/i&gt; application was not among the recognized ones. As soon as I saw the error, I immediately knew what had happened. That morning I upgraded my Mac OSX to Snow Leopard. And, unknown to me, Apple has changed the default &lt;i&gt;tar&lt;/i&gt;, which is not a symlink to the GNU tar, but points at &lt;i&gt;bsdtar&lt;/i&gt;. Not a difficult fix (I released a new version of MySQL Sandbox this morning) but not something that you want to deal with during a live demo either. &lt;br /&gt;Apart from that, Snow Leopard seems to behave nicely. Somebody else had &lt;a href="http://blogs.sun.com/elambert/entry/drizzle_in_the_snow_how"&gt;nasty compatibility problems&lt;/a&gt; but so far I have been spared.&lt;br /&gt;One annoying problem is that Safari crashes with Java applications, because of the faulty Java 1.6 package released with Snow Leopard. Apparently, Java 1.5 and 1.6 both point at the same binaries, on the grounds that 1.6 is backward compatible. Well, it is, but it crashes the browser, so I looked around for a remedy, and I found out that someone else has &lt;a href="http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard"&gt;fixed the issue and shared the recipe&lt;/a&gt;. Thanks, folks. It worded for me as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-5585424464479345583?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/5585424464479345583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=5585424464479345583' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/5585424464479345583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/5585424464479345583'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/09/snow-leopard-blues.html' title='Snow Leopard blues'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-7742629332609005857</id><published>2009-09-10T15:37:00.004+02:00</published><updated>2009-09-10T21:03:41.625+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>The Open Source Events Calendar</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://forge.mysql.com/wiki/Open_Source_Events"&gt;&lt;img src="http://lh4.ggpht.com/_gVfZHGgf5LA/SqkA703_g9I/AAAAAAAAAu0/d7kuxjcb9FY/s640/events_calendar.001.png" alt="Open Source Events Calendar" title="Open Source Events Calendar" border="0" width="250"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;Kudos to &lt;a href="http://www.lenzg.net/"&gt;Lenz&lt;/a&gt;, who, acting on an idea launched by &lt;a href="http://ronaldbradford.com"&gt;Ronald Bradford&lt;/a&gt; some time ago, has put together a comprehensive &lt;a href="http://forge.mysql.com/wiki/Open_Source_Events"&gt;calendar of open source events&lt;/a&gt;. Most of them are somehow related to the MySQL ecosystem, but there is no limitation to what the calendar contains. &lt;br /&gt;Here is the &lt;a href="http://blogs.sun.com/MySQL/entry/open_source_event_calender"&gt;announcement&lt;/a&gt;, with the instructions to use and contribute to the calendar.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; In addition to informing you about the events, this calendar does also tell you when a deadline is approaching. Using this tool, you won't miss a call for participation anymore.&lt;br /&gt;You can simply &lt;a href="http://www.google.com/calendar/ical/blii2ciilsdrlamtnnuobaje4o%40group.calendar.google.com/public/basic.ics"&gt;subscribe to the iCal feed&lt;/a&gt; (it's a Google calendar) or see it &lt;a href="http://forge.mysql.com/wiki/Open_Source_Events"&gt;online&lt;/a&gt;. &lt;br /&gt;And of course, we want to improve the calendar. Feel free to submit new events using the &lt;a href="http://spreadsheets.google.com/viewform?formkey=dFR0UUZWNkNibllzYTk1cjZwNkl6Y2c6MA.."&gt;event submission form&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We're looking into ways of improving the service. It would be nice to have a widget to show on your blog. Using Google APIs, it's easy to create such a widget, but the events are shown in insertion order, rather than chronological order. If anyone knows how to fix this issue, please contact me or Lenz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-7742629332609005857?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/7742629332609005857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=7742629332609005857' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7742629332609005857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7742629332609005857'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/09/open-source-events-calendar.html' title='The Open Source Events Calendar'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_gVfZHGgf5LA/SqkA703_g9I/AAAAAAAAAu0/d7kuxjcb9FY/s72-c/events_calendar.001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-6293098841746220116</id><published>2009-09-10T14:53:00.003+02:00</published><updated>2009-09-10T15:11:33.270+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='opensqlcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>Sponsoring OpenSQLCamp</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://opensqlcamp.org/Events/Portland2009/Sponsor"&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/Sqj4Tuy4BUI/AAAAAAAAAuw/HsVmyOh8muA/OpenSQLCampPDX.png" alt="OpenSQL Camp 2009 in Portland, OR" title="OpenSQL Camp 2009 in Portland, OR" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;The next &lt;a href="http://opensqlcamp.org"&gt;OpenSQLCamp&lt;/a&gt; will be held in Portland, Oregon, USA. It is being organized by &lt;a href="http://oddments.org/?p=118"&gt;Eric Day&lt;/a&gt;, well known to the open source community for his active and productive participation to several projects (especially Drizzle and Gearman).&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The event is public and free. Therefore, it needs public sponsoring. I don't know yet if I can attend, but I have already donated something to the organizers, and I am officially a sponsor. You can be one too. Simply go to the &lt;a href="http://opensqlcamp.org/Events/Portland2009/Sponsor"&gt;sponsors page&lt;/a&gt; and donate a minimum of $100 as in individual or $250 as an organization.&lt;br /&gt;And of course, if you plan to participate, &lt;a href="http://opensqlcamp.org/Events/Portland2009/AttendeeList"&gt;register yourself&lt;/a&gt;and eventually &lt;a href="http://opensqlcamp.org/Events/Portland2009/Sessions"&gt;propose a session&lt;/a&gt;.&lt;br /&gt;OpenSQLCamp is a fun, equal level event. If you have something to say, write a proposal, and the other participants will tell you if they want to hear it or not. Either way, you will learn something.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-6293098841746220116?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/6293098841746220116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=6293098841746220116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/6293098841746220116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/6293098841746220116'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/09/sponsoring-opensqlcamp.html' title='Sponsoring OpenSQLCamp'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-550274637164842220</id><published>2009-08-25T18:20:00.000+02:00</published><updated>2009-08-25T20:59:50.495+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='speaking'/><category scheme='http://www.blogger.com/atom/ns#' term='keynote'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>First Kosovo Free Software Conference</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://kosovasoftwarefreedom.org/"&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/SpOtVIYBmmI/AAAAAAAAAuU/wlWBGdvPoiM/flossk_logo_20090821_1504058924.jpg" alt="Kosovo Free Software Conference" title="Kosovo Free Software Conference" border="0"&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;The first &lt;a href="http://kosovasoftwarefreedom.org/"&gt;Free Software Conference in Kosovo&lt;/a&gt; is being held on August 29-30 in Prishtina, Kosovo.&lt;br /&gt;The newborn state, which declared independence in 2008, is growing in several ways. Besides economic and political growth, also technology is expanding. In this fresh environment, free and open source software can have an important role.&lt;br /&gt;The &lt;a href="http://kosovasoftwarefreedom.org/index.php/program.html"&gt;conference schedule&lt;/a&gt; includes local and international speakers. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;I have a strong professional and personal relationship with Kosovo. Before and after the war, from 1998 to 2002, I was part of the OSCE-UN mission that helped the country in its first steps towards independence. And there I found my wife. Thus, it's with great pleasure that I will do a keynote on the theme of &lt;i&gt;Freedom beyond free of charge&lt;/i&gt;. &lt;br /&gt;And although the talk won't be about MySQL, it will nonetheless have a role in the story. Some of the freedom that was achieved during the UN Mission in Kosovo days is also due a combination of Linux, FreeBSD, MySQL, and many more free software projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-550274637164842220?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/550274637164842220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=550274637164842220' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/550274637164842220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/550274637164842220'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/08/first-kosovo-free-software-conference.html' title='First Kosovo Free Software Conference'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-4684636743451489631</id><published>2009-08-20T23:20:00.003+02:00</published><updated>2009-08-20T23:57:37.677+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='partitioning'/><category scheme='http://www.blogger.com/atom/ns#' term='spider'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='opensqlcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='sharding'/><category scheme='http://www.blogger.com/atom/ns#' term='froscon'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>MySQL Sandbox and Spider at FrOSCon and OpenSQLCamp</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://froscon.org"&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/So2-Zf8MIDI/AAAAAAAAAuQ/vs0YjiT13lQ/spider_mysql.png" alt="MySQL Spider" title="MySQL Spider" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://FrOSCon"&gt;FrOSCon&lt;/a&gt; and the &lt;a href="http://opensqlcamp.org"&gt;OpenSQLCamp&lt;/a&gt; are about to start. &lt;br /&gt;I am packing for Sankt Augustin, where I will attend the fourth edition of FrOSCon and the second OpenSQLCamp. I will have two sessions, &lt;a href="http://programm.froscon.org/2009/events/427.en.html"&gt;Sharding for the masses&lt;/a&gt;, about the &lt;a href="https://launchpad.net/spiderformysql"&gt;Spider storage engine&lt;/a&gt; and &lt;a href="http://programm.froscon.org/2009/events/380.en.html"&gt;MySQL Sandbox 3&lt;/a&gt;, about one of my favorite tools.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The program is very rich. There will be several tracks in the main event and in the associated conferences. If you have any involvement or simply some curiority in open source matters, You will find something interesting at FrOSCon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-4684636743451489631?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/4684636743451489631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=4684636743451489631' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/4684636743451489631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/4684636743451489631'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/08/mysql-sandbox-and-spider-at-froscon-and.html' title='MySQL Sandbox and Spider at FrOSCon and OpenSQLCamp'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-7576101064425861750</id><published>2009-08-18T12:34:00.004+02:00</published><updated>2009-08-18T17:53:01.347+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='innodb'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='5.1'/><category scheme='http://www.blogger.com/atom/ns#' term='snapshot'/><title type='text'>Testing the InnoDB plugin with MySQL snapshots</title><content type='html'>&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://www2.blogger.com/post-create.g?blogID=16959946"&gt;&lt;img src="http://lh4.ggpht.com/_gVfZHGgf5LA/SoqxvSbEF6I/AAAAAAAAAuM/F8oJ79yCS7o/s576/plug2_800x679.JPG" alt="MySQL plugins" title="MySQL Plugins" width="300" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://blogs.sun.com/datacharmer/entry/mysql_labs_server_snapshots_available"&gt;The cat&lt;/a&gt; is &lt;a href="http://mituzas.lt/2009/08/18/plugin-and-5-1/"&gt;out of the bag&lt;/a&gt;.&lt;br /&gt;MySQL 5.1 will include the InnoDB plugin, and thanks to &lt;a href="http://labs.mysql.com/"&gt;&lt;br /&gt;labs.mysql.com&lt;/a&gt; you can try the new version right away.&lt;br /&gt;Here is a step-by-step guide to testing the InnoDB plugin with MySQL snapshot 5.1.39 and MySQL Sandbox.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;&lt;b&gt;1. Install &lt;a href="http://search.cpan.org/%7Egmax/MySQL-Sandbox-3.0.04/lib/MySQL/Sandbox.pm#INSTALLATION"&gt;MySQL::Sandbox&lt;/a&gt;&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;This is a straightforward part. Please refer to the &lt;a href="http://search.cpan.org/%7Egmax/MySQL-Sandbox-3.0.04/lib/MySQL/Sandbox.pm#INSTALLATION"&gt;manual&lt;/a&gt; for the details.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;b&gt;2. get the &lt;a href="http://labs.mysql.com/"&gt;binaries&lt;/a&gt; &lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;Check the list of available binaries and download the one that matches your architecture and operating system.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;b&gt;3. Install the sandbox&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;Since we want to use the InnoDB plugin, we need to start the Sandbox with the builtin innodb engine disabled.&lt;br /&gt;&lt;pre&gt;make_sandbox \&lt;br /&gt;/path/to/mysql-5.1.39-snapshot20090812-osx10.5-i386.tar.gz \&lt;br /&gt;-c ignore-builtin-innodb&lt;br /&gt;&lt;/pre&gt; The option passed with "-c" will be written to the options file.&lt;br /&gt;Make sure that the sandbox is installed and the server starts. If it doesn't, check the error log at $HOME/sandboxes/msb_5_1_39/data/msandbox.err and try to figure out what happened.&lt;br /&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;b&gt;4. Check the available engines&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;~/sandboxes/msb_5_1_39/use&lt;br /&gt;Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;br /&gt;Your MySQL connection id is 2&lt;br /&gt;Server version: 5.1.39-snapshot20090812 Source distribution&lt;br /&gt;&lt;br /&gt;Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&lt;br /&gt;&lt;br /&gt;select engine, support from information_schema.engines;&lt;br /&gt;+------------+---------+&lt;br /&gt;| engine     | support |&lt;br /&gt;+------------+---------+&lt;br /&gt;| MyISAM     | DEFAULT |&lt;br /&gt;| MRG_MYISAM | YES     |&lt;br /&gt;| BLACKHOLE  | YES     |&lt;br /&gt;| CSV        | YES     |&lt;br /&gt;| MEMORY     | YES     |&lt;br /&gt;| FEDERATED  | NO      |&lt;br /&gt;| ARCHIVE    | YES     |&lt;br /&gt;+------------+---------+&lt;br /&gt;&lt;/pre&gt;As you can see, InnoDB is not in the list.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;b&gt;5. Install the innodb plugin&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;install plugin innodb soname 'ha_innodb_plugin.so';&lt;br /&gt;Query OK, 0 rows affected (0.85 sec)&lt;br /&gt;&lt;br /&gt;select @@innodb_version;&lt;br /&gt;+------------------+&lt;br /&gt;| @@innodb_version |&lt;br /&gt;+------------------+&lt;br /&gt;| 1.0.4            |&lt;br /&gt;+------------------+&lt;br /&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;b&gt;6. Install the additional INFORMATION SCHEMA tables&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;INSTALL PLUGIN INNODB_TRX SONAME 'ha_innodb_plugin.so';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;INSTALL PLUGIN INNODB_LOCKS SONAME 'ha_innodb_plugin.so';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;INSTALL PLUGIN INNODB_LOCK_WAITS SONAME 'ha_innodb_plugin.so';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;INSTALL PLUGIN INNODB_CMP SONAME 'ha_innodb_plugin.so';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;INSTALL PLUGIN INNODB_CMP_RESET SONAME 'ha_innodb_plugin.so';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;INSTALL PLUGIN INNODB_CMPMEM SONAME 'ha_innodb_plugin.so';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;INSTALL PLUGIN INNODB_CMPMEM_RESET SONAME 'ha_innodb_plugin.so';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;b&gt;7. Finally, check the results&lt;/b&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;select plugin_name, plugin_type, plugin_status from information_schema.plugins;&lt;br /&gt;+---------------------+--------------------+---------------+&lt;br /&gt;| plugin_name         | plugin_type        | plugin_status |&lt;br /&gt;+---------------------+--------------------+---------------+&lt;br /&gt;| binlog              | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| partition           | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| ARCHIVE             | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| BLACKHOLE           | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| CSV                 | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| FEDERATED           | STORAGE ENGINE     | DISABLED      |&lt;br /&gt;| MEMORY              | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| MyISAM              | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| MRG_MYISAM          | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| InnoDB              | STORAGE ENGINE     | ACTIVE        |&lt;br /&gt;| INNODB_TRX          | INFORMATION SCHEMA | ACTIVE        |&lt;br /&gt;| INNODB_LOCKS        | INFORMATION SCHEMA | ACTIVE        |&lt;br /&gt;| INNODB_LOCK_WAITS   | INFORMATION SCHEMA | ACTIVE        |&lt;br /&gt;| INNODB_CMP          | INFORMATION SCHEMA | ACTIVE        |&lt;br /&gt;| INNODB_CMP_RESET    | INFORMATION SCHEMA | ACTIVE        |&lt;br /&gt;| INNODB_CMPMEM       | INFORMATION SCHEMA | ACTIVE        |&lt;br /&gt;| INNODB_CMPMEM_RESET | INFORMATION SCHEMA | ACTIVE        |&lt;br /&gt;+---------------------+--------------------+---------------+&lt;br /&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;Now you can read the &lt;a href="http://www.innodb.com/doc/innodb_plugin-1.0/"&gt;InnoDB plugin manual&lt;/a&gt; and have as much fun as you can.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-7576101064425861750?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/7576101064425861750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=7576101064425861750' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7576101064425861750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7576101064425861750'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/08/testing-innodb-plugin-with-mysql.html' title='Testing the InnoDB plugin with MySQL snapshots'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_gVfZHGgf5LA/SoqxvSbEF6I/AAAAAAAAAuM/F8oJ79yCS7o/s72-c/plug2_800x679.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-1239479639974716114</id><published>2009-08-09T23:29:00.005+02:00</published><updated>2009-08-10T00:17:53.851+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='planet'/><category scheme='http://www.blogger.com/atom/ns#' term='tagging'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='participation'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><category scheme='http://www.blogger.com/atom/ns#' term='voting'/><category scheme='http://www.blogger.com/atom/ns#' term='librarian'/><category scheme='http://www.blogger.com/atom/ns#' term='planetmysql'/><title type='text'>Beefing up community feeds</title><content type='html'>&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://planet.mysql.com"&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/Sn9FwCWpCgI/AAAAAAAAAto/oTCPwV8WCI0/planet_mysql_voting2.jpg" alt="Planet MySQL" title="Planet MySQL " border="0" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;If you weren't paying attention, you may have missed the latest news in &lt;a href="http://planet.mysql.com"&gt;Planet MySQL&lt;/a&gt;. A few months ago, the site has added the ability of voting for posts (in addition to searching and tagging, which make it much more useful than it was before).&lt;br /&gt;However, if you, like many, read Planet MySQL using a feed reader, the recent benefits are not easily usable.&lt;br /&gt;To allow everyone to vote on the posts they like, even from a feed reader, the feeds now include two links at the end of for each post, to vote on a deserving post even from a feed reader.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The feed may look like this one:&lt;br /&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/Sn9HJAX3_UI/AAAAAAAAAts/KJ_81uURRWA/s720/feed_reader.png" border="1"&gt;&lt;br /&gt;Since I liked this post, I can click on &lt;i&gt;Vote UP&lt;/i&gt;, and the link opens in my default browser, showing the result of the voting.&lt;br /&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/Sn9HsAEnKnI/AAAAAAAAAtw/8TQIv7uQzp0/voted_feed.png" border="1"&gt;&lt;br /&gt;The same happens for the &lt;a href="http://dev.mysql.com/librarian"&gt;MySQL Librarian&lt;/a&gt; feed. At the end of each post, you can click on &lt;i&gt;vote UP&lt;/i&gt; or &lt;i&gt;vote DOWN&lt;/i&gt; directly from your feed reader.&lt;br /&gt;In both cases, the vote works only if you are already logged in. If you aren't, you will be taken to the login page.&lt;br /&gt;This is not the end of the story. More goodies will come. Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-1239479639974716114?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/1239479639974716114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=1239479639974716114' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/1239479639974716114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/1239479639974716114'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/08/beefing-up-community-feeds.html' title='Beefing up community feeds'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-870151367762969577</id><published>2009-07-27T17:15:00.005+02:00</published><updated>2009-07-27T18:54:09.419+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contribution'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='librarian'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Automating MySQL Librarian tasks</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/librarian"&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/Sm3PXpbrTxI/AAAAAAAAAsw/4U_T_w3Bngg/librarian_mass_insert_circle.jpg" alt="MySQL Librarian" title="MySQL Librarian" border="0" width="200"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;The &lt;a href="http://dev.mysql.com/librarian"&gt;MySQL Librarian&lt;/a&gt; is a collection of community generated content, easy to search and to extend. If you have missed the announcement, you may look at &lt;a href="http://dev.mysql.com/tech-resources/articles/introducing-librarian.html"&gt;Introducing the MySQL Librarian.&lt;/a&gt;.&lt;br /&gt;To add a new link, you have several ways. You can just use the &lt;a href="http://dev.mysql.com/librarian/add.html"&gt;Add A Link&lt;/a&gt; feature inside the Librarian. If the link to be added comes from &lt;a href="http://planet.mysql.com"&gt;Planet MySQL&lt;/a&gt;, every post has a link to facilitate the insertion to the Librarian. For everything else, adding a link is a manual task. Until today. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h3&gt;Adding easily to the Librarian&lt;/h3&gt;&lt;br /&gt;&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://fmpwizard.blogspot.com/"&gt;Diego Medina&lt;/a&gt;, who should be well known in the community as a very active promoter of MySQL Proxy, and one of the most creative bug finders, has made two additions that have already been incorporated into the Librarian.&lt;br /&gt;If you go to the &lt;a href="http://dev.mysql.com/librarian"&gt;MySQL Librarian&lt;/a&gt; now, you will find a "bookmarklet" that you can drag and drop to your browser toolbar (if your browser is either FireFox or Safari, that is). After that, you have a button in your toolbar, which you can use to quickly add a new link.&lt;/td&gt;&lt;td&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/Sm3avcU6YeI/AAAAAAAAAtI/Okk8FDAoupE/Librarian_Browser_tools.png" border="1"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;For example, let's consider an article that we may want to add to the Librarian. Something like &lt;a href="http://feedproxy.google.com/~r/MysqlProxyAndOtherThoughts/~3/uCRSlb5-I9U/mockload-on-launchpad-mysql-proxy.html"&gt;MockLoad on Launchpad - MySQL Proxy&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_gVfZHGgf5LA/Sm3SmtbyiVI/AAAAAAAAAs0/ItIGgija-SU/s576/Diego_article.png"&gt;&lt;img src="http://lh6.ggpht.com/_gVfZHGgf5LA/Sm3SmtbyiVI/AAAAAAAAAs0/ItIGgija-SU/s576/Diego_article.png" border="1" width="600"&gt;&lt;/a&gt; &lt;br /&gt;If you have already dragged and dropped the bookmarklet, you can click on your new button, and get to the Librarian page, with almost all the detailed already filled in for you.&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/Sm3SmpDZLmI/AAAAAAAAAs4/Zsnt5505tXc/s800/inserting_into_librarian.png" /&gt;&lt;br /&gt;&lt;h3&gt;Search engines&lt;/h3&gt;&lt;br /&gt;Diego didn't limit his contribution to adding links. He has also created a new search engine plugin for FireFox, which lets you use the MySQ Librarian as your search engine.&lt;br /&gt;&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/Sm3X4AcJO7I/AAAAAAAAAtE/fGGHjP0D7Ws/s400/add_librarian_search_engine.png"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/Sm3Sm6jIojI/AAAAAAAAAs8/txItOw_oja0/s400/using_librarian_search_engine_1.png"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;Adding the Librarian engine&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;Using the Librarian engine&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;If your default search engine is the Librarian, your search will be sent to MySQL Librarian, as easily as you search in Google or in any other engine.&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_gVfZHGgf5LA/Sm3Sm2YD3wI/AAAAAAAAAtA/QmfXkVnRYVk/s640/using_librarian_search_engine_2.png"&gt;&lt;br /&gt;Thanks, Diego!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-870151367762969577?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/870151367762969577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=870151367762969577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/870151367762969577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/870151367762969577'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/07/automating-mysql-librarian-tasks.html' title='Automating MySQL Librarian tasks'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-7675817523413262768</id><published>2009-07-22T09:34:00.003+02:00</published><updated>2009-07-22T09:48:21.750+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='campus'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='opensqlcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='voting'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='proposal'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>OpenSQLCamp democracy</title><content type='html'>&lt;table border="0" cellpadding="10"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://opensqlcamp.org/Events/2009/Reviewing_and_Voting"&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/SmbBo9MPpSI/AAAAAAAAAss/qyOsLk2VSSk/OpenSQL_badge.gif" alt="OpenSQLCAmp voting" title="OpenSQLCamp voting" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;We have seen this before. Actually, we got the idea from Drupal, where talk proposals are public, and the most voted ones get in the schedule. Nonetheless, it's a pleasure to see that a transparent voting system is accepted and used.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The &lt;a href="http://opensqlcamp.org"&gt;OpenSQLCamp 2009&lt;/a&gt; European edition, is under scrutiny. There are &lt;a href="http://opensqlcamp.org/Events/2009/Proposed_Sessions"&gt;27 session proposals&lt;/a&gt;, from which we will need to get 12 in the schedule.&lt;br /&gt;The &lt;a href="http://opensqlcamp.org/Events/2009/Reviewing_and_Voting"&gt;open voting&lt;/a&gt; is done via Twitter or the mailing list. &lt;br /&gt;I have a good feeling about it. Since I am proposing a public talk, I must be prepared for public scrutiny. It's only fair that my proposal is evaluated by the same audience that will later decide to come see my presentation. It's an incentive to write a clear and compelling proposal. I can't get away with "I am well known. I will say something about replication." &lt;br /&gt;If you are attending OpenSQLCamp at &lt;a href="http://froscon.org"&gt;FrOSCon&lt;/a&gt;, let us know what you would like to see. Let the best proposals win.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-7675817523413262768?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/7675817523413262768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=7675817523413262768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7675817523413262768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7675817523413262768'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/07/opensqlcamp-democracy.html' title='OpenSQLCamp democracy'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-7901093131150841228</id><published>2009-07-06T11:10:00.000+02:00</published><updated>2009-07-06T12:32:36.247+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='partitioning'/><category scheme='http://www.blogger.com/atom/ns#' term='spider'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='sharding'/><category scheme='http://www.blogger.com/atom/ns#' term='froscon'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>Sharding for the masses: the spider storage engine</title><content type='html'>&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://www2.blogger.com/post-edit.g?blogID=16959946&amp;amp;postID=7901093131150841228"&gt;&lt;img src="http://lh5.ggpht.com/_gVfZHGgf5LA/SlEkPbjyicI/AAAAAAAAAsM/SVu31V3e5w8/s512/spider.001.png" alt="The Spider storage engine" title="the Spider storage engine" border="0" width="250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;In my previous article about &lt;a href="http://datacharmer.blogspot.com/2009/04/test-driving-spider-storage-engine.html"&gt;the Spider storage engine&lt;/a&gt;, I made some tests and I saw that the engine has potential. I did also identify some problems, which were promptly addressed by the author. I have looked at the latest version (0.12), and the results are very much encouraging.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Installing the &lt;a href="https://edge.launchpad.net/spiderformysql"&gt;Spider storage engine&lt;/a&gt; is not trivial but not extremely difficult either. My &lt;a href="http://datacharmer.blogspot.com/2009/04/test-driving-spider-storage-engine.html"&gt;previous article&lt;/a&gt; has a step-by-step explanation. Before installing, though, you need to apply one patch to the server, to enable &lt;a href="http://launchpad.net/partitionconditionpushdownformysql"&gt;condition pushdown&lt;/a&gt; to the partitions engine. What is it about? In short, when you issue a query from the Spider table, with a WHERE clause, the query is passed to a backend database &lt;b&gt;without the WHERE clause&lt;/b&gt;. True, it's filtered by partition, but each partition may have a large data set, and this means a full table scan on the backend server. In a few cases, this is not a big deal, because the general performance of the Spider engine is better than a non-partitioned table, but it can be improved.&lt;br /&gt;The lack of conditions pushdown is a problem already known in the Federated engine. With the above patch applied, the Spider engine pushes the condition down to the back end, and the query is executed with the WHERE clause intact.&lt;br /&gt;Let's consider this simple query:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;select * from salaries where from_date='1996-01-10' limit 10;&lt;/code&gt;&lt;/pre&gt;Before applying the patch, the backend database would execute this:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;select `emp_no`,`salary`,`from_date`,`to_date`&lt;br /&gt;from `employees`.`salaries` limit 0,9223372036854775807&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;After the patch, the backend receives and execute the more sensible&lt;br /&gt;&lt;pre&gt;&lt;code&gt;select `emp_no`,`salary`,`from_date`,`to_date`&lt;br /&gt;from `employees`.`salaries`&lt;br /&gt;where (`from_date` = '1996-01-10')&lt;br /&gt;limit 0,9223372036854775807&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;A final observation. While I was testing the latest version, I noticed something that should have been clear from the beginning, i.e. that a spider engine set of backends can have multiple front-ends. Meaning that you can create a Spider table from a different host, and access the same backends that another host is already using. In theory, it means more flexibility when dealing with large amount of data. In practice, we'll have to test it more and see what happens.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-7901093131150841228?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/7901093131150841228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=7901093131150841228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7901093131150841228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7901093131150841228'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/07/sharding-for-masses-spider-storage.html' title='Sharding for the masses: the spider storage engine'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_gVfZHGgf5LA/SlEkPbjyicI/AAAAAAAAAsM/SVu31V3e5w8/s72-c/spider.001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-2542150928529788986</id><published>2009-06-28T23:15:00.001+02:00</published><updated>2009-06-28T23:33:50.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sandbox'/><category scheme='http://www.blogger.com/atom/ns#' term='admin'/><category scheme='http://www.blogger.com/atom/ns#' term='gearman'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='replication'/><category scheme='http://www.blogger.com/atom/ns#' term='remote'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Remote replication setup with Gearman and MySQL Sandbox</title><content type='html'>&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://mysqlsandbox.net/tools"&gt;&lt;img src="http://lh6.ggpht.com/_gVfZHGgf5LA/SkfNYiGICZI/AAAAAAAAArc/5vanJVj2iY4/Sakila_sandbox_479x396_gearman.png" alt="replication via Gearman" title="Replication via Gearman" border="0" width="250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;A few months ago, &lt;a href="http://www.livejournal.com/users/krow/"&gt;Brian Aker&lt;/a&gt; invited me to have a look at &lt;a href="http://gearman.org/"&gt;Gearman&lt;/a&gt;, saying that I could find interesting combinations with MySQL Proxy. I did not forget, and I kept thinking about interesting ways of using it. The first idea that I managed to apply is not related to Proxy, but to a practical problem that I have been keeping in reserve for years, i.e. installing replication systems from remote, without effort.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;After some fiddling around with the alternatives, I convinced myself that Gearman is the way to go. Before I proceed to show what I did, though, perhaps it's useful if I spend a few words about Gearman itself.&lt;br /&gt;&lt;h3&gt;Gearman overview&lt;/h3&gt;It's a strange word. If you don't pay close attention, you read "German" and you may think "why should an administration tool be German? Doesn't Open Source apply across country boundaries?" And when you realize that there is an "a" after the "e", you are as baffled as before. What's this? &lt;i&gt;Gearman&lt;/i&gt; is an anagram of &lt;i&gt;manager&lt;/i&gt;. Because managers, so the explanation goes, don't do anything, but only direct workers towards their jobs. And this could be a good explanation of what Gearman is: it's a system to organize distributed jobs. &lt;br /&gt;&lt;a href="http://www.gearman.org/doku.php#how_does_gearman_work"&gt;&lt;img src="http://lh6.ggpht.com/_gVfZHGgf5LA/SkfP6VxBWiI/AAAAAAAAArg/Agca7_ivSCg/s512/sample_gearman_setup.jpg" alt="how gearman works" title="How Gearman works" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This picture explains the concept. You, as a &lt;b&gt;client&lt;/b&gt;, need to have a &lt;b&gt;job&lt;/b&gt; done. You ask the &lt;b&gt;gearman server&lt;/b&gt; which somehow asks all the registered &lt;b&gt;workers&lt;/b&gt; for their ability to perform such job. If any of the function names advertised by the workers matches the client request, the server assigns the job to the worker, together with the workload sent by the client, and then returns to the client the results that the worker has provided.&lt;br /&gt;The system is flexible, because you can set as many servers and workers as needed, in several hosts. And it is fault tolerant, because the same worker can register its functions to several servers, and several workers can advertise the same functions to the same or a different server. Depending on the nature of the task, a client can ask several workers for a portion of the task, or it can just ask the first available one to perform the whole job. Since the workers can be located in several servers, you can distribute the load of a heavy job among many hosts. Your imagination is the limit.&lt;br /&gt;&lt;h3&gt;Installing a replication system with Gearman&lt;/h3&gt;If you are familiar with &lt;a href="http://mysqlsandbox.net/"&gt;MySQL Sandbox&lt;/a&gt;, you know that its main aim is to install servers quickly and efficiently, and to save valuable time by providing shortcut scripts for each sandbox. You can create a replication sandbox with one master and two slaves in the same server in a handful of seconds. However, they are all in the same server. This means that you can use this sandbox system to test the correctness of your application, but you can't test efficiency and scalability very well.&lt;br /&gt;On one side, we have a flexible method to install single sandboxes. On the other side, we have a general purpose distributed system that can do jobs in remote servers. It is a logical choice to put these two frameworks together.&lt;br /&gt;&lt;h4&gt;Requirements&lt;/h4&gt;&lt;br /&gt;Before you start, you need to install MySQL Sandbox and Gearman in all the servers that will host a database node.You also need to have downloaded the appropriate tarball in each host. If the boxes are compatible, you can download once and copy from box to box (I am playing with the idea of doing the copy through Gearman), but that is not always a safe assumption. If one of the boxes has a different operating system or architecture (as in my case: two Macs and one Tux), you need a different tarball.&lt;br /&gt;Another task to perform before installing is opening the necessary ports. You will need to open the Gearman port (4730) and the port(s) used by MySQL master and slaves. &lt;br /&gt;&lt;h4&gt;Gluing pieces together&lt;/h4&gt;Installing the Gearman framework is not trivial. For many users, it is not as difficult as setting up a MySQL replicated system, but it may have some pitfalls.&lt;br /&gt;Unless you are comfortable programming in C, in addition to the Gearman server you may want to install the API for your favorite language. I used &lt;a href="http://search.cpan.org/%7Edschoen/Gearman-XS-0.2/"&gt;Gearman::XS&lt;/a&gt;, a Perl module wrapped around the C API. It installs easily on some operating systems, but it requires some manual help in some others.&lt;br /&gt;Anyway, after one hour, I had it installed in six servers with five operating systems and I am confident that I can install it almost anywhere (if that anywhere looks like Unix).&lt;br /&gt;&lt;a href="http://mysqlsandbox.net/tools"&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/SkfNI0o8tcI/AAAAAAAAArY/8mzKQg-5anU/s512/gearman_replication.jpg" alt="Sandbox replication with Gearman" title="Sandbox replication with Gearman" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Unlike the sample framework of the previous picture, I can't use a single Gearman server. Or, actually, I can, but it would require quite a lot of additional traffic and code complexity in the client, and therefore I used one server for each host where I had to install something.&lt;br /&gt;Once that decision was taken, everything went smoothly. Each host has a server and one or two workers that registered the "make_sandbox" function with a &lt;a href="http://mysqlsandbox.net/tools/remote_installer.html"&gt;remote installer&lt;/a&gt; script. The client knows which role is assigned to each host. Although it is not strictly necessary: the IPs could be shuffled around, and the final result would not change. Anyway, using the &lt;a href="http://mysqlsandbox.net/tools/make_distributed_replication.html"&gt;make_distributed_replication&lt;/a&gt; scripts, the client installs (or, rather, asks a worker to install) the master in the first host, and the slaves in the second and third host. At each step, there is a rudimentary error check, to make sure that the installation is being performed as expected. During the operation, the client produces a few scripts that make the administration easy.&lt;br /&gt;At the end of the installation, you can connect to the master and the slaves using the familiar &lt;i&gt;m&lt;/i&gt;, &lt;i&gt;s1&lt;/i&gt;, and &lt;i&gt;s2&lt;/i&gt; scripts, and do mass operations with &lt;i&gt;use_all&lt;/i&gt; and &lt;i&gt;check_slaves&lt;/i&gt;.&lt;br /&gt;To the user, the layout looks like the result of make_replication_sandbox in one machine, but you are dealing with a system spread among several hosts.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;$ ./make_distributed_replication.pl&lt;br /&gt;installing master&lt;br /&gt;installing slave 0&lt;br /&gt;initializing slave 0&lt;br /&gt;installing slave 1&lt;br /&gt;initializing slave 1&lt;br /&gt;&lt;br /&gt;$ ./check_slaves&lt;br /&gt;slave 1:&lt;br /&gt;          Slave_IO_Running: Yes&lt;br /&gt;         Slave_SQL_Running: Yes&lt;br /&gt;slave 2:&lt;br /&gt;          Slave_IO_Running: Yes&lt;br /&gt;         Slave_SQL_Running: Yes&lt;br /&gt;&lt;br /&gt;$ ./m&lt;br /&gt;Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;br /&gt;Your MySQL connection id is 4&lt;br /&gt;Server version: 5.0.83-log MySQL Community Server (GPL)&lt;br /&gt;&lt;br /&gt;Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&lt;br /&gt;&lt;br /&gt;master&gt; exit&lt;br /&gt;Bye&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;My first test was to load some heavy data, using the &lt;a href="http://launchpad.net/test-db"&gt;employees test database&lt;/a&gt;, and I am happy to report that the execution is much faster than a replication in the same host.&lt;br /&gt;&lt;h3&gt;TO DO list&lt;/h3&gt;This is just a proof of concept. It seems to work well, but there is still much work to do. The error checking must be improved a lot both in the client and in the worker. Before registering the function, the worker must check that the external applications are available. When receiving a request, the worker can check if the desired tarball exists and if there is no conflict with already installed servers.&lt;br /&gt;The client should be able to accept IPs, ports, and tarball versions from the command line. Some functions to cleanup and diagnose the remote servers should be implemented as well.&lt;br /&gt;But I am very pleased about this first step.&lt;br /&gt;Comments are welcome. This is my first usage of Gearman, and any way of improving on the basic concepts of this framework will be welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-2542150928529788986?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/2542150928529788986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=2542150928529788986' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/2542150928529788986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/2542150928529788986'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/06/remote-replication-setup-with-gearman.html' title='Remote replication setup with Gearman and MySQL Sandbox'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-1872169230401482702</id><published>2009-06-21T11:20:00.004+02:00</published><updated>2009-06-21T12:46:15.699+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='qa'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Failing by choice. Another bug-vs-feature debate ends</title><content type='html'>&lt;h3&gt;A long standing bug&lt;/h3&gt;Among the many outstanding bugs for MySQL, there is one that has sparked a fierce discussion, not only in the bug report itself, but also in blogs, forums, mailing lists.&lt;br /&gt;&lt;a href="http://bugs.mysql.com/bug.php?id=19027"&gt;Bug #19027: MySQL 5.0 starts even with Fatal InnoDB errors&lt;/a&gt; was neglected for long time, until finally it got fixed, and it is available in MySQL 5.1.36.&lt;br /&gt;First off, what is it about?&lt;br /&gt;In short, if an engine doesn't initialize correctly, the MySQL server starts anyway, without the offending engine. Depending on how you use the failing engine, this could be either a minor annoyance or a complete disaster.&lt;br /&gt;&lt;b&gt;Annoyance&lt;/b&gt;: ARCHIVE fails to initialize, and you create tables with the default engine (usually MyISAM), and after a while you realize that the disk is filling up faster than you expected. You will find out eventually.&lt;br /&gt;&lt;b&gt;Disaster&lt;/b&gt;: ARCHIVE fails to initialize, and you copy 300 GB of data into a table that you believed was ARCHIVE and instead is MyISAM, filling the disk and halting your server completely.&lt;br /&gt;&lt;b&gt;Annoyance&lt;/b&gt;: InnoDB fails to initialize on your new slave, and you create MyISAM tables instead. After a while you realize that this slave is serving queries way more slowly than the others.&lt;br /&gt;&lt;b&gt;Disaster&lt;/b&gt;: InnoDB fails to initialize on your master, which was already using InnoDB tables. None of you application work anymore. You can't read or write from your tables. You are completely stuck.&lt;br /&gt;&lt;h3&gt;The same old story: bug or feature?&lt;/h3&gt;While I admit that some cases could be classified as annoyances, I am convinced, by personal experience coupled with gut feeling, that disaster is a more frequent outcome of this situation. When the engine fails and the server happily starts without your valuable data you are in trouble. True, you can monitor the error log and have a cron job sending you an alert if this happens, but by then it may be already too late.&lt;br /&gt;So, why did it take this long to fix it? The bug was filed in April 2006.&lt;br /&gt;The reason is that this bug was labeled between low priority and feature request. The behavior was documented and consistent with other similar cases, and many developers felt that by satisfying the request of the bug reporter we were adding a new feature. If this were a philosophical discussion, yes, it would be so. But this is about real life usage of databases, and it's my strong opinion that it is a bug, because it can harm the user, and it feels wrong.&lt;br /&gt;I wrote about &lt;a href="http://datacharmer.blogspot.com/2007/01/what-is-bug.html"&gt;this matter&lt;/a&gt; before. A bug is not justified by being documented. A documented wrong behavior is a bug nonetheless.&lt;br /&gt;&lt;h3&gt;How it works&lt;/h3&gt;Let's have a look at the practicalities. In MySQL 5.1.35, you create a InnoDB table and then restart the server with a mistake in your my.cnf. You inadvertently changed the size of the InnoDB file. For example, you set &lt;i&gt;innodb_data_file_path=ibdata1:2000M&lt;/i&gt; while the original size was 200 MB.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;$ $HOME/sandboxes/msb_5_1_35/restart --innodb_data_file_path=ibdata1:2000M&lt;br /&gt;. sandbox server started&lt;br /&gt;# the server starts&lt;br /&gt;$ $HOME/sandboxes/msb_5_1_35/use -e "show engines" | grep -i innodb&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Your query for the InnoDB engine is met by Unix nothingness. InnoDB failed to initialize, but the server started, leaving your data crippled and the DBAs blissfully unaware, unless they were checking for this specific occurrence.&lt;br /&gt;What happens with 5.1.36? By default, it does exactly the same. If you think that this kind of failure could be a minor annoyance, you leave things as they are, and the failure of an engine, from CSV to InnoDB, won't bother you more than usually.&lt;br /&gt;However, if you want to force the server to abort when your engine fails, now you can say so. You need to specify the desired behavior in the options file.&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;command&lt;/th&gt;&lt;th&gt;meaning&lt;/th&gt;&lt;th&gt;example&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;engine_name=OFF&lt;/td&gt;&lt;td&gt;The specified engine will not be included. The server will start without it.&lt;/td&gt;&lt;td&gt;innodb=off&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;engine_name=ON&lt;/td&gt;&lt;td&gt;The specified engine will be included. If it fails, the server will start.&lt;/td&gt;&lt;td&gt;innodb=on&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;engine_name=FORCE&lt;/td&gt;&lt;td&gt;The specified engine will be included. If it fails, the server will NOT start.&lt;/td&gt;&lt;td&gt;innodb=force&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Testing the above assumptions with the latest version shows a different result.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ cd $HOME/sandboxes/msb_5_1_36&lt;br /&gt;./restart --innodb=force --innodb_data_file_path=ibdata1:2000M&lt;br /&gt;................... sandbox server not started yet&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;With the choice to fail now available, we can decide if an engine is so important that we can't live without, and instruct the server that it's better to fail than starting in crippled mode.&lt;br /&gt;Another usability bug bites the dust.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-1872169230401482702?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/1872169230401482702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=1872169230401482702' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/1872169230401482702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/1872169230401482702'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/06/failing-by-choice-another-bug-vs.html' title='Failing by choice. Another bug-vs-feature debate ends'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-7770615671944436149</id><published>2009-06-16T15:58:00.005+02:00</published><updated>2009-06-16T16:11:01.760+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sun.madrid'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='forum.twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='spain.madrid'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Giving away one copy of MySQL Administration Bible in Madrid</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://blogs.sun.com/jorgeSanchez/entry/sun_open_communities_forum_2009"&gt;&lt;img src="http://lh4.ggpht.com/_gVfZHGgf5LA/SiauR1eeCII/AAAAAAAAAmA/2goWXwfh8P0/s720/open_communities_forum.jpg" alt="Open Communities Forum" title="Open Communities Forum" width="350" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;I will be in Madrid on June 18-19, to participate to the &lt;a href="http://www.sunopencommunitiesforum.es/agenda.html"&gt;Sun Open Communities Forum&lt;/a&gt;. I will have two presentations on my own, and I will be a guest speaker during Victor Jimenez's session. There will be some ancillary activities, among which a lunch with the MySQL community and a MySQL workshop.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;During one of these activities, I will give away one copy of the &lt;a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470416912.html"&gt;MySQL Administrator’s Bible&lt;/a&gt;. If you are a MySQL enthusiast and you are in Madrid, that's an extra reason to attend the forum. For the ones who still don't know how good this book is, you can have a look at this &lt;a href="http://marksitblog.blogspot.com/2009/06/mysql-administrators-bible.html"&gt;Review&lt;/a&gt;.&lt;br /&gt;During the forum, there will be an &lt;a href="http://blogs.sun.com/jorgeSanchez/entry/sun_open_communities_forum_2009"&gt;announcement about the MySQL community in Spain&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-7770615671944436149?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/7770615671944436149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=7770615671944436149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7770615671944436149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/7770615671944436149'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/06/giving-away-one-copy-of-mysql.html' title='Giving away one copy of MySQL Administration Bible in Madrid'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_gVfZHGgf5LA/SiauR1eeCII/AAAAAAAAAmA/2goWXwfh8P0/s72-c/open_communities_forum.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-8909657428062470876</id><published>2009-06-12T23:47:00.003+02:00</published><updated>2009-06-13T00:03:59.916+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>A quick look at Google Fusion Tables</title><content type='html'>I was curious about &lt;a href="http://tables.googlelabs.com/public/tour/tour1.html"&gt;Google Fusion Tables&lt;/a&gt;, and gave it a try.&lt;br /&gt;I uploaded the &lt;i&gt;employees&lt;/i&gt; table from the &lt;a href="http://launchpad.net/test-db"&gt;employees test database&lt;/a&gt;, 16 MB of data, about 300,000 rows. Since the maximum limit per table is 100 MB, I expected interesting results.&lt;br /&gt;However, one of my first tests, with aggregation was quite disappointing.&lt;br /&gt;A simple group by gender was executed in about &lt;b&gt;30 seconds&lt;/b&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gVfZHGgf5LA/SjLQC9qD7LI/AAAAAAAAAmo/r_UbWkxr9M8/s1600-h/Picture+27.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 181px;" src="http://3.bp.blogspot.com/_gVfZHGgf5LA/SjLQC9qD7LI/AAAAAAAAAmo/r_UbWkxr9M8/s400/Picture+27.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5346564456971496626" /&gt;&lt;/a&gt;&lt;br /&gt;InnoDB on my laptop did a much better job:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;select gender , count(*) from employees group by gender;&lt;br /&gt;+--------+----------+&lt;br /&gt;| gender | count(*) |&lt;br /&gt;+--------+----------+&lt;br /&gt;| M      |   179973 | &lt;br /&gt;| F      |   120051 | &lt;br /&gt;+--------+----------+&lt;br /&gt;2 rows in set (0.32 sec)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Here's the link to &lt;a href="http://tables.googlelabs.com/DataSource?dsrcid=15433/15433"&gt;my test table&lt;/a&gt;, if you want to give it a try. You need to have a Google account to see it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-8909657428062470876?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/8909657428062470876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=8909657428062470876' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8909657428062470876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8909657428062470876'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/06/quick-look-at-google-fusion-tables.html' title='A quick look at Google Fusion Tables'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gVfZHGgf5LA/SjLQC9qD7LI/AAAAAAAAAmo/r_UbWkxr9M8/s72-c/Picture+27.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-8112997527900891979</id><published>2009-06-11T23:58:00.001+02:00</published><updated>2009-06-12T00:02:34.479+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sandbox'/><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='laziness'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcut'/><title type='text'>MySQL Sandbox and laziness</title><content type='html'>&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://mysqlsandbox.net/news.html"&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/SjFXASA4iRI/AAAAAAAAAmk/0wX2sSUx9Ac/s400/Sakila_Sandbox_shortcut_500x_424.jpg" alt="MySQL Sandbox shortcut" title="MySQL Sandbox shortcut" width="250" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Laziness strikes again.&lt;br /&gt;MySQL Sandbox was created with the intent of avoiding repetitive work when creating and using several servers. Turns out that even the current framework, which many say that is really time saving and enhances productivity, was not enough. So my desire for laziness, which is, as everybody should know &lt;a href="http://www.perlfoundation.org/perl5/index.cgi?laziness"&gt;a chief virtue for a programmer&lt;/a&gt; has made me code a shortcut script, which can joggle sandboxes as never before. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Enter the &lt;i&gt;sb&lt;/i&gt; script (available in version 3.0.03). Now I can shorten my typing experience with sandboxes quite a lot:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  $ sb 5135&lt;br /&gt;  # same as calling &lt;br /&gt;  # $SANDBOX_HOME/msb_5_1_35/use&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Nice, isn't it? It saves me quite a lot of keys. Not only that. If this sandbox is not active, the script will start it for me. That's yet a few keystrokes more that I am saving.&lt;br /&gt;What if I want a replication sandbox? Easy:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  $ sb r5135&lt;br /&gt;  # same as calling &lt;br /&gt;  # $SANDBOX_HOME/rsandbox_5_1_35/m&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;For a multiple sandbox instead of a replication one, use "m5135."&lt;br /&gt;Now, for the really amazing stuff. Let's suppose that the sandbox doesn't exist yet.&lt;br /&gt;No problem. &lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  $ sb 5.1.35&lt;br /&gt;  # same as calling &lt;br /&gt;  # make_sandbox 5.1.35&lt;br /&gt;  # and&lt;br /&gt;  # $SANDBOX_HOME/msb_5_1_35/use&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;And if you don't have a pre-expanded directory for 5.1.35 under $SANDBOX_BINARY as I do? Also this is easily done:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  $ sb mysql-5.1.35-YOUR_OS.tar.gz&lt;br /&gt;  # same as calling &lt;br /&gt;  # make_sandbox mysql-5.1.35-YOUR_OS.tar.gz&lt;br /&gt;  # and&lt;br /&gt;  # $SANDBOX_HOME/msb_5_1_35/use&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Creating and using a replication sandbox is really easy as well:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  $ sb r5.1.35&lt;br /&gt;  # same as calling &lt;br /&gt;  # make_replication_sandbox 5.1.35&lt;br /&gt;  # and&lt;br /&gt;  # $SANDBOX_HOME/rsandbox_5_1_35/m&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;a href="http://search.cpan.org/~gmax/MySQL-Sandbox-3.0.03/lib/MySQL/Sandbox.pm#sb_-_the_Sandbox_shortcut"&gt;manual&lt;/a&gt; explains the above cases and some more (Yes: there is actually more).&lt;br /&gt;Go on! get lazy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-8112997527900891979?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/8112997527900891979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=8112997527900891979' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8112997527900891979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8112997527900891979'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/06/mysql-sandbox-and-laziness.html' title='MySQL Sandbox and laziness'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_gVfZHGgf5LA/SjFXASA4iRI/AAAAAAAAAmk/0wX2sSUx9Ac/s72-c/Sakila_Sandbox_shortcut_500x_424.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-8031450441800681473</id><published>2009-06-09T17:50:00.000+02:00</published><updated>2009-06-09T17:57:26.236+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='opensqlcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='speaking'/><category scheme='http://www.blogger.com/atom/ns#' term='froscon'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Speaking at FrOSCon 2009 and getting ready to OpenSQLCamp-Europe</title><content type='html'>&lt;a href="http://FrOSCon.org"&gt;&lt;img src="http://lh3.ggpht.com/_gVfZHGgf5LA/Si5Pzf3bSyI/AAAAAAAAAmg/XhTsQixYnC8/froscon_opensqlcamp_logo.jpg" alt="FrOSCon 2009" title="FrOSCon 2009" border="0"&gt;&lt;/a&gt;&lt;br /&gt;For the fourth time in a row, I will be speaking at &lt;a href="http://froscon.org"&gt;FrOSCon&lt;/a&gt;, one of the most charming open source events in Europe. &lt;br /&gt;Hosted in the bright environment of the Department of Computer Science of the University of Applied Sciences Bonn-Rhein-Sieg, this event will get you hooked from the beginning. The organization is done by volunteers, who have always done an amazing job, with even better results than more expensive and famous conferences.&lt;br /&gt;This year, there will be some more action than ever before. In addition to the main event, the organizers have given away a few developers rooms, to let some projects build their own event within the main one. There will be a Java subconference, and, closer to my interests, the European edition of the &lt;a href="http://opensqlcamp.org"&gt;OpenSQLCamp 2009&lt;/a&gt;, which applies to all open database related projects, such as MySQL, PostgreSQL, JavaDB, and many others that are listed in the announcements page. The principal organizer is &lt;a href="http://www.lenzg.net/archives/258-Speaking-at-FrOSCon-and-organizing-the-OpenSQLCamp-2009,-European-Edition.html"&gt;Lenz Grimmer&lt;/a&gt;, who is looking for volunteers to share the burden. &lt;br /&gt;The organizers have also launched &lt;a href="http://www.froscon.de/index.php?id=15&amp;mid=100&amp;ret=15&amp;L=1&amp;L=1"&gt;a creative contest&lt;/a&gt;, which most geeks will find irresistible. Check it out!&lt;br /&gt;FrOSCon started as one of the many LAMP events, and in its fourth year it has emerged as an example for others. I warmly recommend it to all people interested in open source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-8031450441800681473?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/8031450441800681473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=8031450441800681473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8031450441800681473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8031450441800681473'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/06/speaking-at-froscon-2009-and-getting.html' title='Speaking at FrOSCon 2009 and getting ready to OpenSQLCamp-Europe'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-8927906732827904481</id><published>2009-06-09T12:18:00.007+02:00</published><updated>2009-06-09T15:00:33.995+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tour'/><category scheme='http://www.blogger.com/atom/ns#' term='bbq'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='germany'/><title type='text'>Joining the PHP BBQ in Hamburg and Kiel</title><content type='html'>&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://forge.mysql.com/wiki/PHP_BBQ_Tour" title="Australian barbecue and countryside by datacharmer, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3105/2281527488_a7e7a8f7f1.jpg" width="300" alt="Australian barbecue and countryside" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;There must be something that gets coders and barbecue together. In Australia, I was invited to a &lt;a href="http://www.flickr.com/photos/datacharmer/2281527488/in/set-72157603955600291"&gt;hackers barbecue&lt;/a&gt;, while at &lt;a href="http://froscon.org/"&gt;FrOSCon&lt;/a&gt;, the Saturday evening meal is a grill fest.&lt;br /&gt;It seems just right that the PHP coders in Germany are getting together with a &lt;a href="http://forge.mysql.com/wiki/PHP_BBQ_Tour"&gt;BBQ Tour&lt;/a&gt;, starting on Monday, June 15, and touching seven German towns in one week.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I will join the happy campers on Saturday, June 20, in Hamburg, and finish off the tour in Kiel the next day.&lt;br /&gt;The event is open. However, for logistic reasons, a registration is required in some of them. Check &lt;a href="http://forge.mysql.com/wiki/PHP_BBQ_Tour"&gt;the schedule&lt;/a&gt; for more details.&lt;br /&gt;Being informal events, we may or may not have presentations and demos, but being inter-geek meetings, there will be some fun and mutual learning for sure. I look forward for it. Most of my "aha" technical moments came during serendipitous social gatherings. Beer and food are great science conductors!&lt;br /&gt;Follow &lt;a href="http://twitter.com/froscon"&gt;FrOSCon on Twitter&lt;/a&gt; and &lt;a href="http://twitter.com/opensql"&gt;OpenSQLCamp on Twitter&lt;/a&gt; for more updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-8927906732827904481?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/8927906732827904481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=8927906732827904481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8927906732827904481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8927906732827904481'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/06/joining-php-bbq-in-hamburg-and-kiel.html' title='Joining the PHP BBQ in Hamburg and Kiel'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16959946.post-8400781552675650644</id><published>2009-06-06T09:15:00.003+02:00</published><updated>2009-06-06T09:46:40.328+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmarks'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><title type='text'>Unreliable androids</title><content type='html'>There is an article with a cute title that is gaining popularity:&lt;br /&gt;&lt;a href="http://antoniocangiano.com/2009/06/05/do-androids-count-electric-sheep-with-db2-or-mysql/comment-page-1/"&gt;Do Androids Count Electric Sheep with DB2 or MySQL?&lt;/a&gt;&lt;br /&gt;Allegedly, DB2 is demonstrated as incredibly faster than MySQL, with a benchmark that repeats the same COUNT query 100 times.&lt;br /&gt;&lt;br /&gt;This is a naive (at best) benchmark that doesn’t tell me nothing about the database potential. But anyway, if you enable the query cache in MySQL, the repetition of 100 queries is at least three times faster than DB2.&lt;br /&gt;&lt;br /&gt;Try&lt;br /&gt;set global query_cache_size=1024*1024;&lt;br /&gt;and repeat that test.&lt;br /&gt;&lt;br /&gt;Moreover: the table structure doesn’t correspond to the data from the freebase project. &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CREATE TABLE `people` (&lt;br /&gt; `id` int(11) DEFAULT NULL auto_increment PRIMARY KEY,&lt;br /&gt; `name` varchar(255) NOT NULL,&lt;br /&gt; `fbid` varchar(255) NOT NULL,&lt;br /&gt; `gender` varchar(255),&lt;br /&gt; `profession` varchar(255)&lt;br /&gt;) ENGINE=InnoDB&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Too bad there is no integer ID in that table, and there are 23 fields instead of 5.&lt;br /&gt;These androids don’t strike me as extremely reliable.&lt;br /&gt;&lt;br /&gt;A cross-system benchmark is reliable only if you either (a) know both systems very well or (b) you invite one expert of the systems involved to make sure you are using both of them in a fair way.&lt;br /&gt;Oh, and if you can make a table that has smarter fields than VARCHAR(255), your benchmark may look more credible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16959946-8400781552675650644?l=datacharmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://datacharmer.blogspot.com/feeds/8400781552675650644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=16959946&amp;postID=8400781552675650644' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8400781552675650644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16959946/posts/default/8400781552675650644'/><link rel='alternate' type='text/html' href='http://datacharmer.blogspot.com/2009/06/unreliable-androids.html' title='Unreliable androids'/><author><name>datacharmer</name><uri>http://www.blogger.com/profile/15801583338057324813</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01765046954063080151'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry></feed>