<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/'>
<channel>
  <title>Brian &quot;Krow&quot; Aker&apos;s Idle Thoughts</title>
  <link>http://krow.livejournal.com/</link>
  <description>Brian &quot;Krow&quot; Aker&apos;s Idle Thoughts - LiveJournal.com</description>
  <lastBuildDate>Tue, 30 Jun 2009 16:21:31 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>krow</lj:journal>
  <lj:journalid>12598</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://l-userpic.livejournal.com/39906800/12598</url>
    <title>Brian &quot;Krow&quot; Aker&apos;s Idle Thoughts</title>
    <link>http://krow.livejournal.com/</link>
    <width>99</width>
    <height>92</height>
  </image>

<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/640375.html</guid>
  <pubDate>Tue, 30 Jun 2009 16:21:31 GMT</pubDate>
  <title>Drizzle, Rethinking MySQL for the Web (Video from OSBridge)</title>
  <link>http://krow.livejournal.com/640375.html</link>
  <description>Here is the link to the video of the talk I gave at OSBridge -&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blip.tv/file/2296093&quot;&gt;http://blip.tv/file/2296093&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is the standard &quot;this is Drizzle Talk&quot;.</description>
  <comments>http://krow.livejournal.com/640375.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/640053.html</guid>
  <pubDate>Sun, 28 Jun 2009 01:05:57 GMT</pubDate>
  <title>Rosalynd</title>
  <link>http://krow.livejournal.com/640053.html</link>
  <description>&lt;div class=&quot;flickr-frame&quot;&gt;	&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3666910678/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2434/3666910678_b8af71369b.jpg&quot; class=&quot;flickr-photo&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class=&quot;flickr-caption&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3666910678/&quot;&gt;DSC_0022&lt;/a&gt;, originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/brianaker/&quot;&gt;krow&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;				&lt;p class=&quot;flickr-yourcomment&quot;&gt;	Gratuitous pictures of my dog :)&lt;/p&gt;</description>
  <comments>http://krow.livejournal.com/640053.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/639886.html</guid>
  <pubDate>Sun, 28 Jun 2009 01:03:23 GMT</pubDate>
  <title>Shade Structure - Mark I Design</title>
  <link>http://krow.livejournal.com/639886.html</link>
  <description>&lt;div class=&quot;flickr-frame&quot;&gt;	&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3666885444/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2438/3666885444_19faac3838.jpg&quot; class=&quot;flickr-photo&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class=&quot;flickr-caption&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3666885444/&quot;&gt;P1000547&lt;/a&gt;, originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/brianaker/&quot;&gt;krow&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;				&lt;p class=&quot;flickr-yourcomment&quot;&gt;	A bunch of photos from our adventure today in setting up part of the new shade structure this year for Burning Man. &lt;br /&gt;&lt;br /&gt;Today? Successful? &lt;br /&gt;&lt;br /&gt;Yes, but we learned a lot.&lt;br /&gt;&lt;br /&gt;Next week? &lt;br /&gt;&lt;br /&gt;We move on to Mark II design. I&apos;ll write more about all of this later. I just wanted to get some photos up :)&lt;/p&gt;</description>
  <comments>http://krow.livejournal.com/639886.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/639667.html</guid>
  <pubDate>Sat, 27 Jun 2009 20:23:54 GMT</pubDate>
  <title>And so it begins....</title>
  <link>http://krow.livejournal.com/639667.html</link>
  <description>&lt;a href=&quot;http://pics.livejournal.com/krow/pic/00103c60/&quot;&gt;&lt;img src=&quot;http://pics.livejournal.com/krow/pic/00103c60/s320x240&quot; alt=&quot;photo.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://krow.livejournal.com/639667.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/639366.html</guid>
  <pubDate>Tue, 23 Jun 2009 07:19:23 GMT</pubDate>
  <title>Lullaby Moon</title>
  <link>http://krow.livejournal.com/639366.html</link>
  <description>&lt;div class=&quot;flickr-frame&quot;&gt;	&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3653495626/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2424/3653495626_555e808416.jpg&quot; class=&quot;flickr-photo&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class=&quot;flickr-caption&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3653495626/&quot;&gt;DSC_0387&lt;/a&gt;, originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/brianaker/&quot;&gt;krow&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;				&lt;p class=&quot;flickr-yourcomment&quot;&gt;	From this month&apos;s &lt;a href=&quot;http://www.lucianeare.org/lullabymoon.htm&quot;&gt;http://www.lucianeare.org/lullabymoon.htm&lt;/a&gt;&lt;/p&gt;</description>
  <comments>http://krow.livejournal.com/639366.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/639040.html</guid>
  <pubDate>Wed, 10 Jun 2009 19:14:26 GMT</pubDate>
  <title>Regression, The Bummer</title>
  <link>http://krow.livejournal.com/639040.html</link>
  <description>Wahoo!&lt;br /&gt;&lt;br /&gt;We finally &lt;a href=&quot;http://jpipes.com/index.php?/archives/296-Drizzle-Performance-Regression-Solved-TCMalloc-vs.-No-TCMalloc.html&quot;&gt;found the regression problem in Drizzle&lt;/a&gt; that we have been looking for over the last couple of months.&lt;br /&gt;&lt;br /&gt;In the processes of doing this was have walked every line of code. I sat the other night doing a single step through the entire sysbench run looking for anything out of place. Nothing came up at all.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.oddments.org/?p=67&quot;&gt;Eric&lt;/a&gt; was the person who finally asked the question &quot;could it be tcmalloc&quot;? No one had assumed it because it typically is a good solution (and we will be looking into why it turned out to be at fault, we will probably push now to more aggressively remove the MEMROOT system we inherited since we suspect it/it doesn&apos;t play well with C++).&lt;br /&gt;&lt;br /&gt;We have not been able to push any patches in the last couple of months that really fixed other performance issues that we know exist.&lt;br /&gt;&lt;br /&gt;Why?&lt;br /&gt;&lt;br /&gt;Because we feared complicating the problem of finding the original problem. We have all spent time looking through our ancestors to see if there was something we missed.&lt;br /&gt;&lt;br /&gt;1) Could it be C++?&lt;br /&gt;2) Could reducing the number of locks, creating a traffic jam around a single lock?&lt;br /&gt;3) Was UTF-8 at fault?&lt;br /&gt;&lt;br /&gt;In the end it was none of these :)&lt;br /&gt;&lt;br /&gt;So for us?&lt;br /&gt;&lt;br /&gt;We have patches coming soon to optimize the UTF-8 system, to minimize LOCK_open,  optimize/simplify the THR lock system simpler, and to partition caches internally.&lt;br /&gt;&lt;a href=&quot;http://pics.livejournal.com/krow/pic/0010251p/&quot;&gt;&lt;img src=&quot;http://pics.livejournal.com/krow/pic/0010251p/s320x240&quot; alt=&quot;chart.png&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://krow.livejournal.com/639040.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/638941.html</guid>
  <pubDate>Wed, 10 Jun 2009 18:24:34 GMT</pubDate>
  <title>Stored Procedures or Server Side Scripting?</title>
  <link>http://krow.livejournal.com/638941.html</link>
  <description>Here is a bit of code I worked up for us a recently for Drizzle:&lt;br /&gt;&lt;br /&gt;drizzle&amp;gt; DELIMITER |&lt;br /&gt;Note that there is no semicolon after the &apos;|&apos; symbol, which we will use as the delimiter for our purposes. You have to choose a delimiter that does not appear in your procedure, and it can be more than one character.&lt;br /&gt;&lt;br /&gt;drizzle&amp;gt; CREATE PROCEDURE perl_hello (param1 string)&lt;br /&gt;    -&amp;gt; return &quot;Hello &quot; . $_[0] . &quot;!&quot;&lt;br /&gt;    -&amp;gt; |&lt;br /&gt;Query OK, 0 rows affected (0.05 sec)&lt;br /&gt;&lt;br /&gt;drizzle&amp;gt; CALL perl_hello(&apos;Brian&apos;);&lt;br /&gt;    -&amp;gt; |&lt;br /&gt;Query OK, 1 row affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;drizzle&amp;gt; DELIMITER ;&lt;br /&gt;drizzle&amp;gt; SELECT @perl\G&lt;br /&gt;*************************** 1. row ***************************&lt;br /&gt;@perl: Hello Brian!&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Stored Procedures!?!&lt;br /&gt;&lt;br /&gt;In an actual language!?!&lt;br /&gt;&lt;br /&gt;About a week ago I was talking to a CTO for a company who is looking at adoption of Drizzle. One of things he came back with was &quot;I don&apos;t need stored procedures, but I do need server side scripting&quot;.&lt;br /&gt;&lt;br /&gt;Back at the very first MySQL User&apos;s Conference we had a debate over the future of stored procedures in MySQL. I and some others really wanted the first stored procedure language to be external, David really wanted it to be PHP. I didn&apos;t see the value in implementing a single language. I thought people would be more interested in writing code in whatever language they wanted. Also, I figured that an external system would allow for different groups to develop languages more rapidly.&lt;br /&gt;&lt;br /&gt;Fast forward to when we began Drizzle. Parsers are where you spend a lot of your time. The smaller the parser the better off you are. So I went to task removing all of the signs of the SP language from Drizzle. We have been free of them now for over a year now (yes, long before we went public). Things are finally shaping up so that when we begin on Bell, our next milestone, stored procedures, or something like them, are now on our list.&lt;br /&gt;&lt;br /&gt;Though are they stored procedures, or is this server-side scripting?&lt;br /&gt;&lt;br /&gt;A few premises of the design:&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Any language should be pluggable. We won&apos;t have a native language.&lt;br /&gt;&lt;li&gt; We only support re-entrant engines. This solves all of the pre-locking problems that exist currently. We haven&apos;t removed 40% of the locks in Drizzle, only to have to come up with a bunch of new ones to support engines which were never built to handle this stuff.&lt;br /&gt;&lt;li&gt; While it won&apos;t be required, we will focus first on enabling scripting languages that are not in-process. Why is that? We don&apos;t want anyone to crash the database. Informix had this problem early on and got a bad rep for it. We want to avoid this.&lt;br /&gt;&lt;li&gt; We will enable driver writers to be able to communicate in a native way. AKA if you are writing something in Java, you will be able to use a JDBC interface inside of the database. For Perl DBI, etc. I want to be able to test my SP&apos;s in any environment. The difference between running in of the database, and out of should be trivial or non-existent.&lt;br /&gt;&lt;br /&gt;I am a little bit torn about using the SP call/creation SQL commands in Drizzle. You won&apos;t be doing the typical SP language (well... unless someone wants to write a plugin for them!). I would also like to encourage people to think differently about what writing server side code should look like. Personally I don&apos;t feel that stored procedures are the right solution for a lot of the cases, keep your business logic in your application layer(!), but we also know that users expect to be able to be able to run code locally. Triggering/Callback mechanisms can be very useful though, and enabling them is a part of this. Doing Triggers today in C is simple, but that is not something that everyone should/would/could want to do.&lt;br /&gt;&lt;br /&gt;Putting this in the plugin structure means no overhead to the parser or the rest of the database. Keeping them out of process means no drain or memory expansion of the Database. SMP boxes will benefit because you can confine the language VM to a particular set of processors/amount of memory.&lt;br /&gt;&lt;br /&gt;We don&apos;t want the database to ever blow up because of bugs in the execution language!&lt;br /&gt;&lt;br /&gt;And if you never want them? You never load the plugin in the first place.&lt;br /&gt;&lt;br /&gt;Why Perl? I&apos;ve embedded Perl for years and know how to make it work. I&apos;ve only done Java once, so I will leave that to other experts.&lt;br /&gt;&lt;br /&gt;I suspect I can find a Java person somewhere inside of Sun :)</description>
  <comments>http://krow.livejournal.com/638941.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>14</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/638654.html</guid>
  <pubDate>Thu, 04 Jun 2009 17:05:56 GMT</pubDate>
  <title>Drizzle, State of Testing</title>
  <link>http://krow.livejournal.com/638654.html</link>
  <description>Testing, Testing, Testing...&lt;br /&gt;&lt;br /&gt;I&apos;ve gotten a number of questions about how we are doing testing, and even how our methodology for accepting code works :)&lt;br /&gt;&lt;br /&gt;A lot of this comes from running open source projects for almost a couple of decades (hell, if I toss in uploading public domain to software to BBS&apos;es for the Commodore 64 it is a bit longer!).&lt;br /&gt;&lt;br /&gt;One of the most important rules I have learned over the years is that anything that is not automated and not required, will get skipped.&lt;br /&gt;&lt;br /&gt;Today Drizzle runs 213 tests, the entire MySQL test suite minus tests that are for features we don&apos;t have. We don&apos;t allow for any regression, meaning that no one is allowed to disable a test in order to get their code pushed. Our test suite was also modified so that we can run all of the tests against a particular engine. Today we do this with both Innodb and PBXT. So instead of having &quot;engine specific&quot; tests, we can test everything. Feedback we are getting from storage engine vendors is that this is golden. Even if they never release for Drizzle, they can use it to vastly increase the testing they do today.&lt;br /&gt;&lt;br /&gt;We also do not allow any code to be pushed that causes a compiler to toss a warning. We do this for a wide set of versions of gcc, and also for Sun Studio. We treat warnings as errors :)&lt;br /&gt;&lt;br /&gt;We are also enormously proud of this fact. This took a lot of effort :)&lt;br /&gt;&lt;br /&gt;Our most recent change is that we now include a regression test for performance for sysbench. For each push into our &quot;staging&quot; tree we run a full test at different steps  of &quot;connections&quot;. We test both read-only and read-write workloads. My only real complaint right now about this system is that we look at absolute numbers, and being a math geek, I would really like some more information on standard deviation :)&lt;br /&gt;&lt;br /&gt;The development process we use maximizes our use of tools. For Drizzle we accept no patches via email. Your patch must come through Launchpad, where you must have an account. We do this so that we can always track down &quot;who did what&quot;. This is done almost entirely without exception, and the exception being that I am sure someone at some time as either pointed out a bug in code to me or has made a comment on how something should be written while reading over my shoulder. &lt;br /&gt;&lt;br /&gt;We don&apos;t require anyone to sign a &quot;all your bases belong to us&quot; sort of contract. Speaking as myself, I personally find them unpalatable and frequently suggests developers think about them before ever signing. Code flowing is what I find important. With Drizzle we have had a 100+ contributors, and I suspect that number would be much smaller if we had taken a different point of view on this. One of the most interesting conversations I ever had about this topic was with Rasmus, who has continued to refuse to sign the Apache Foundation&apos;s agreement. If someone was to ever put code in from their employer, we can strip the code back out in seconds.  We can also hand over all of their information to the original copyright holder for them to prosecute. The ones of us who do final review of code are very nitpicky about this. One of the nice things about &quot;source code&quot; is that it has finger prints. Anything that doesn&apos;t follow our coding style, which is very specific, stands out.&lt;br /&gt;&lt;br /&gt;Code which was not original tends to always show it roots. I know from talking to Theodore Tso that IBM gives its developers who take in code to its open source projects, a class in how to identify copyright violations. IBM&apos;s general handling of open source always tends to impress me.&lt;br /&gt;&lt;br /&gt;Having a modular approach in our design also means that any &quot;large&quot; sort of change can be reduced down to a plugin. Our average patches are bug fixes or refactoring bits. If you find that you enjoy making code readable, fast, and standard looking, you will probably enjoy working on Drizzle.&lt;br /&gt;&lt;br /&gt;If you want to write fun and new code, then you should look at writing plugins!&lt;br /&gt;&lt;br /&gt;On a personal note, if I was to write a database from scratch, I would go after a completely different problem domain. I still happen to need a relational database though, which is why I work on Drizzle.&lt;br /&gt;&lt;br /&gt;That and the people who are working on the project are both awesome and fun :)&lt;br /&gt;&lt;br /&gt;Code flow in Drizzle is pretty simple. You write a patch, you submit a tree to Laundpad, and one of the captains reviews it and puts it into their tree. I pull from one of their trees and merge into a local tree. Before I push the code it has to pass all tests/etc on 64bit Intel Fedora, Open Solaris Sparc, Solaris Sparc, and OSX. When I get around to buying myself a new desktop Mac I am going to spin up a few more platforms in virtual boxes, so that I can test more platforms. There is a simple Gearman system I use to populate and run the code on all of these systems.&lt;br /&gt;&lt;br /&gt;Once the code passes on all of the above it goes to our staging tree on launchpad. From there the automated system gives me feedback on regression. If we pass then the code goes to trunk. Our turn around time for code is frequently about 24 hours. Since all of the above testing is done, we drop tarballs anytime we want too.&lt;br /&gt;&lt;br /&gt;It is pretty much clockwork for us. If a human wasn&apos;t involved I suspect we could just set a cronjob to handle it every two weeks (and who knows... if Lee gets bored with this, maybe he will do exactly that!).&lt;br /&gt;&lt;br /&gt;What is the future?&lt;br /&gt;&lt;br /&gt;Today we generate automated reports for cachegrind, callgrind, and valgrind. We run pahole by hand. We are told that there is a new tool for generating random queries for MySQL for crash testing, we need to look into this.&lt;br /&gt;&lt;br /&gt;I&apos;ve also got a set of tests written around drizzleslap (aka mysqlslap) that we need to toss in soon.&lt;br /&gt;&lt;br /&gt;All of these need to go into the process. We should never regress on L2 misses or branch predictions. We should never see holes in our structures/classes.&lt;br /&gt;&lt;br /&gt;We don&apos;t have enough tests for failure cases. Our test coverage is public:&lt;br /&gt;&lt;a href=&quot;http://drizzle.org/lcov/index.html&quot;&gt;http://drizzle.org/lcov/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I want to see that increased. The problem is that there has never been a test system for &quot;this is how to fail at X&quot;. A few hacks have been written, but we need to come up with a complete methodology for this. The one open source database that has an awesome test suite for this is SQLite, and we need to spend some time learning from them all of what they do.&lt;br /&gt;&lt;br /&gt;Over dinner recently with Josh Berkus, he mentioned the work they are doing on pgbench. I am hoping that we can get a patch in it so that it will support libdrizzle. That way we could use one of the Postgres tools as well. &lt;br /&gt;&lt;br /&gt;These are our next big steps :)&lt;br /&gt;&lt;br /&gt;Have any suggestions? Want to contribute? All of our tools are open source. We welcome extensions and they are general enough that almost any other database could use them as well!</description>
  <comments>http://krow.livejournal.com/638654.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>15</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/638411.html</guid>
  <pubDate>Tue, 26 May 2009 07:34:19 GMT</pubDate>
  <title>Folk Life</title>
  <link>http://krow.livejournal.com/638411.html</link>
  <description>&lt;div class=&quot;flickr-frame&quot;&gt;	&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3566224638/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3660/3566224638_451d54b252.jpg&quot; class=&quot;flickr-photo&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class=&quot;flickr-caption&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3566224638/&quot;&gt;Folk Life&lt;/a&gt;, originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/brianaker/&quot;&gt;krow&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;				&lt;p class=&quot;flickr-yourcomment&quot;&gt;	Photos fro Folklife.&lt;/p&gt;</description>
  <comments>http://krow.livejournal.com/638411.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/638015.html</guid>
  <pubDate>Tue, 26 May 2009 07:03:16 GMT</pubDate>
  <title>Ridge Poles</title>
  <link>http://krow.livejournal.com/638015.html</link>
  <description>&lt;div class=&quot;flickr-frame&quot;&gt;	&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3566119850/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3597/3566119850_c445207887.jpg&quot; class=&quot;flickr-photo&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class=&quot;flickr-caption&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/brianaker/3566119850/&quot;&gt;DSC_0137&lt;/a&gt;, originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/brianaker/&quot;&gt;krow&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;				&lt;p class=&quot;flickr-yourcomment&quot;&gt;	A few pictures of the ridge pole design for our main structure for Burning Man this year. A piece of rebar that the PVC is being seated over is what keeps the pole suspended in the air :)&lt;/p&gt;</description>
  <comments>http://krow.livejournal.com/638015.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/637896.html</guid>
  <pubDate>Mon, 25 May 2009 04:17:13 GMT</pubDate>
  <title>Sleepers on the Beach</title>
  <link>http://krow.livejournal.com/637896.html</link>
  <description>&lt;a href=&quot;http://pics.livejournal.com/krow/pic/00101hhk/&quot;&gt;&lt;img src=&quot;http://pics.livejournal.com/krow/pic/00101hhk/s320x240&quot; alt=&quot;photo.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://krow.livejournal.com/637896.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/637455.html</guid>
  <pubDate>Wed, 20 May 2009 18:43:37 GMT</pubDate>
  <title>Libmemcached, BZR, Launchpad</title>
  <link>http://krow.livejournal.com/637455.html</link>
  <description>Today I moved from using Mercurial to using bzr on Launchpad for &lt;a href=&quot;http://launchpad.net/libmemcached&quot;&gt;libmemcached&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Why BZR?&lt;br /&gt;&lt;br /&gt;I use Launchpad for pretty much all of my projects at this point. I have been really happy with it, and I have found that bzr works well for Linux/Windows/Mac. &lt;a href=&quot;http://launchpad.net/drizzle&quot;&gt;Drizzle&lt;/a&gt;, &lt;a href=&quot;http://launchpad.net/gearmand&quot;&gt;Gearman&lt;/a&gt; and others are already there so this just simplifies my daily workflow.&lt;br /&gt;&lt;br /&gt;This should help with me being able to take patches a bit more quickly (and for that matter do reviews). Having contributors push their patches to their own trees, allows me to easily pull patches and do reviews. With Drizzle we keep a &quot;staging&quot; tree just so that we can regression test any code before it goes to trunk. Since code in Drizzle goes through several people before I see it, we each get to make revisions on it and look for issues like copyright violations/etc. By tracking code by Launchpad account, we always know who code came from.&lt;br /&gt;&lt;br /&gt;For libmemcached I will also be enabling the bug system on Launchpad. While tracking via email has worked, I would like to come up with something a bit more formal.&lt;br /&gt;&lt;br /&gt;I&apos;ve been using Laundpad for over a year now and I am really happy with it. Career wise I have used several proprietary systems, of which Bitkeeper was the best, and several open source ones, of which Subversion was the worst (it was the only system that ever lost code).&lt;br /&gt;&lt;br /&gt;All of the distributed revision control systems are pretty good now. I&apos;ve used all of the major ones and have not really had many issues. The reason I go with bzr really has to do with workflow with Launchpad.&lt;br /&gt;&lt;br /&gt;Mercurial is great, and I will continue to use it for a lot of personal projects. It is the only open source distributed revision control system that I find to be easy to host. Its ability to do push/pull from HTTPS is a major asset for me. So for work I do where I need to continue to host the data I will be sticking with it. I completely understand why Google went with it, and I really wish BZR would add this feature.&lt;br /&gt;&lt;br /&gt;Looking back over the last few years it is amazing to see how far the revision source control system have gone. Just a few years ago all of the tools were garbage and it was a nightmare to pick one.&lt;br /&gt;&lt;br /&gt;Thankfully we are well past that.</description>
  <comments>http://krow.livejournal.com/637455.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/637297.html</guid>
  <pubDate>Tue, 19 May 2009 15:54:49 GMT</pubDate>
  <title>Libmemcached Version 0.29 Released</title>
  <link>http://krow.livejournal.com/637297.html</link>
  <description>We have released version 0.29 of libmemcached.&lt;br /&gt;&lt;br /&gt;The highlights:&lt;br /&gt;   * Fixed malloc usage to calloc for spots where we need zero filled memory.&lt;br /&gt;   * All code warnings now treated as errors.&lt;br /&gt;   * Fixes for debian packaging.&lt;br /&gt;   * Added new pooling mechanism.&lt;br /&gt;   * MEMCACHED_BEHAVIOR_NO_BLOCK no longer also sets MEMCACHED_BEHAVIOR_BUFFER_REQUESTS.&lt;br /&gt;   * Updated generic rpm.&lt;br /&gt;&lt;br /&gt;The new pooling mechanism is thread safe so if you have been looking for a way to limit your number of memcachd_st structures and you use threads you are now set!&lt;br /&gt;This work was done to improve the connection handling in Drizzle for Memcachd (and it is going into the UDF for MySQL as well).&lt;br /&gt;&lt;br /&gt;You can find out more information here:&lt;br /&gt;&lt;a href=&quot;http://tangent.org/552/libmemcached.html&quot;&gt;http://tangent.org/552/libmemcached.html&lt;/a&gt;</description>
  <comments>http://krow.livejournal.com/637297.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/637108.html</guid>
  <pubDate>Sun, 17 May 2009 03:49:50 GMT</pubDate>
  <title>Mushroom hunting success!</title>
  <link>http://krow.livejournal.com/637108.html</link>
  <description>&lt;a href=&quot;http://pics.livejournal.com/krow/pic/001001za/&quot;&gt;&lt;img src=&quot;http://pics.livejournal.com/krow/pic/001001za/s320x240&quot; alt=&quot;photo.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://krow.livejournal.com/637108.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/636721.html</guid>
  <pubDate>Wed, 13 May 2009 22:40:56 GMT</pubDate>
  <title>Memcached, Speaking of Performance...</title>
  <link>http://krow.livejournal.com/636721.html</link>
  <description>I&apos;ve been looking at the cost recently of fetches for libmemcached, and seeing if there was anything I could do to increase performance.&lt;br /&gt;&lt;br /&gt;What did I find? Half the cost currently is in the snprintf() sitting at the protocol sender.&lt;br /&gt;&lt;br /&gt;Half!&lt;br /&gt;&lt;br /&gt;Good news about this?&lt;br /&gt;&lt;br /&gt;If you are using the new binary protocol with Memcached this goes away completely :)&lt;br /&gt;&lt;br /&gt;snprintf() sucks.&lt;br /&gt;&lt;a href=&quot;http://pics.livejournal.com/krow/pic/000zz98k/&quot;&gt;&lt;img src=&quot;http://pics.livejournal.com/krow/pic/000zz98k/s320x240&quot; alt=&quot;pastedGraphic.tiff&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://krow.livejournal.com/636721.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/636657.html</guid>
  <pubDate>Wed, 13 May 2009 21:22:04 GMT</pubDate>
  <title>Innodb Concurrency, No Kidding...</title>
  <link>http://krow.livejournal.com/636657.html</link>
  <description>Back in 2007 I, and then several others, pointed out the Innodb Concurrency should be set to zero (or any large number) if you are planning on scaling.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://krow.livejournal.com/542306.html&quot;&gt;http://krow.livejournal.com/542306.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I don&apos;t get why anyone is congratulating themselves on this self discovery, since we have all known about this for over two years. It is great to see that the default setting for 5.4 is finally being fixed but this shouldn&apos;t be a revelation to anyone who has been working with the server for years (and the Innodb team fixed this in their own plugin a while ago, which should be no surprise since they author the code). This was one of the first, and frankly simple, changes made to Drizzle.&lt;br /&gt;&lt;br /&gt;Here are some more obvious ones:&lt;br /&gt;&lt;li&gt; Kill the query cache (and disable Stored procedures and their cache if you can).&lt;br /&gt;&lt;li&gt; Remove the locks around show process list.&lt;br /&gt;&lt;li&gt; Fix the binlog (or just ditch it).&lt;br /&gt;&lt;li&gt; Fix all of the locking in the access controls.&lt;br /&gt;&lt;li&gt; Increase the default table cache.&lt;br /&gt;&lt;li&gt; Depending on your filesystem/etc move to multi file Innodb (for that matter, take the Innodb plugin for a spin for compression).&lt;br /&gt;&lt;li&gt; ...&lt;br /&gt;&lt;br /&gt;Want the best bang for the buck for performance?&lt;br /&gt;&lt;br /&gt;Buy SSD for your databases, and go figure out how to use a caching layer so as to not need to manage a bunch of replication servers.&lt;br /&gt;&lt;br /&gt;If you are worried about managing your caching server I would look at &lt;a href=&quot;http://www.gear6.com/&quot;&gt;Gear6&lt;/a&gt; or &lt;a href=&quot;http://www.virident.com/bhive/t/4/index.jsp&quot;&gt;Virident&lt;/a&gt;. I am especially impressed with the Gear6 replication technology.</description>
  <comments>http://krow.livejournal.com/636657.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/636310.html</guid>
  <pubDate>Mon, 11 May 2009 16:17:47 GMT</pubDate>
  <title>Books, Libraries, Victory?</title>
  <link>http://krow.livejournal.com/636310.html</link>
  <description>Victory!&lt;br /&gt;&lt;br /&gt;Well sort of.&lt;br /&gt;&lt;br /&gt;This morning I finally completed the loading of all of my books into &lt;a href=&quot;http://www.librarything.com/catalog/brianaker&quot;&gt;LibraryThing&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The reason I started this project was to keep myself from buying duplicates (and to keep down the number of duplicates within my friend circle in general).&lt;br /&gt;&lt;br /&gt;The problem is, most of the books I don&apos;t care about really. Other then graphic novels, the rest are for the most part paperbacks I just loan out. Some I get back, some I don&apos;t. I&apos;ve given away scores of O&apos;Reilly books and dozens of copies of a couple of other series. When I find some books for under a buck I just buy them so that I can give them out to others.&lt;br /&gt;&lt;br /&gt;It is not like I own every book  I have ever read.&lt;br /&gt;&lt;br /&gt;What I would love to have is a dump of the database from my childhood libraries (or from the library in Iowa City, I read a lot as a graduate student). Part of me would love to know some of the titles of books I have almost completely forgotten. This sort of information would be fun to have.&lt;br /&gt;&lt;br /&gt;As for books I currently have?&lt;br /&gt;&lt;br /&gt;The graphic novels I worry about duplicating since I pick up a lot of these, almost all, at used bookstores. So it is handy to pull up a browser and sort through a stack of them before I go to the checkout counter.&lt;br /&gt;&lt;br /&gt;Everything else?&lt;br /&gt;&lt;br /&gt;If I was to move nowadays I would shed a lot of books before I did. Less and less, do I see the point of keeping them around. There are only a few technical books that have stayed relevant enough for me to want to keep them. For fiction, once I have read the book I am done with it. I hardly ever go back and reread fiction.&lt;br /&gt;&lt;br /&gt;If it wasn&apos;t for DRM, I would just switch to electronic books (and I fully expect DRM to go away with books within the next few years).&lt;br /&gt;&lt;br /&gt;The value of an object is inversely valued based on a ratio of its weight and awkwardness when carried up a flight of stairs. When I stopped moving every year I stopped tracking this as much, but I still ponder this fact whenever I buy something (I live on the third floor of an old house with a very narrow stairwell). Books weigh a lot when you have to carry crates of them.&lt;br /&gt;&lt;br /&gt;The main realization of this morning when I completed cataloging all of the books?&lt;br /&gt;&lt;br /&gt;I think I still have a crate of Geology and Math textbooks downstairs that I have never unpacked.&lt;br /&gt;&lt;br /&gt;So much for completion.</description>
  <comments>http://krow.livejournal.com/636310.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/636036.html</guid>
  <pubDate>Sat, 09 May 2009 00:15:09 GMT</pubDate>
  <title>Drizzle, Regression, STL Bitset</title>
  <link>http://krow.livejournal.com/636036.html</link>
  <description>So how is the regression issue coming along?&lt;br /&gt;&lt;br /&gt;Glad you asked!&lt;br /&gt;&lt;br /&gt;Earlier in the week Jay found that the bitset patch gave us significant regression. This particular patch was a move from using a built in bitmap system MySQL had, to using the bitset found in the standard template library.&lt;br /&gt;&lt;br /&gt;Since then we have been able to find issues with it, but no conclusion on how to solve it via a new design/container/etc.&lt;br /&gt;&lt;br /&gt;So what are we doing?&lt;br /&gt;&lt;br /&gt;Earlier this week I refactored the interface to the Table objects to create, well, an interface!&lt;br /&gt;&lt;br /&gt;It is not perfect but it encapsulated a large chunk of the code. Monty today put back into the original MY_BITMAP but did so behind this interface. Jay has run the numbers and declared that the regression can no longer be found.&lt;br /&gt;&lt;br /&gt;What will happen from here?&lt;br /&gt;&lt;br /&gt;We are going to work on the interface some more. Basically make it so that we can change the back end to the bitmap without changing a lot of code.&lt;br /&gt;&lt;br /&gt;Right now we have a couple of ideas on how to solve the problem (I favor a bool in Field object, Monty wants to look at vector&lt;bool&gt;, Mats has a bitvector). We will test each of these and find a solution that gives us in the end better code with no regression.&lt;br /&gt;&lt;br /&gt;Solving this issue we had to look at a number of things. Our methods, the outcome of a tree rollback, and if performance in this case mattered. The problem wasn&apos;t simple, and all solutions had draw backs. The main thing we were not going to do was push some code which caused regression that we would then &quot;find a solution for in the future&quot;. That was not acceptable. Rolling back the tree? We could do this, I favored it if we had no other solution, but we determined that we could patch up the tree without causing this sort of disruption.&lt;br /&gt;&lt;br /&gt;And?&lt;br /&gt;&lt;br /&gt;Encapsulating the interface gives us room to find a new solution.&lt;br /&gt;&lt;br /&gt;So what came out of all of this?&lt;br /&gt;&lt;br /&gt;We are moving to a staging tree.&lt;br /&gt;&lt;br /&gt;As of now we have an lp:drizzle/staging tree. This tree should not be pulled from. We will send code here before it is sent to trunk. If code fails the performance regression testing then we will pull it back.&lt;br /&gt;&lt;br /&gt;So what does this mean? No more pushes from main that bypass staging. We have pointed the automatic regression testing at this tree. I am going to be suggesting that we point Hudson and Buildbot at it as well. If a tree can pass here then it will be moved to the main tree.&lt;br /&gt;&lt;br /&gt;And what are the thoughts on regression for the future?&lt;br /&gt;&lt;br /&gt;Jay asked me today &quot;what do we mean by regression?&quot;. To me we can calculate regression pretty easily. We look at the standard deviation of all previous runs and apply it to the current tree. If we find that we are within norms then the new code is fine (and I suspect we will refine this formula in the future). This was my suggestion.&lt;br /&gt;&lt;br /&gt;But what if regression happens and there is an argument for letting it happen?&lt;br /&gt;&lt;br /&gt;Then we talk about it on the mailing list. Right now most of us have seen the numbers showing that 5.4 is faster then Drizzle at 16 concurrent connections. We have been looking into this, but we may find that some of the decisions that let us scale out to more connections/processors contributed to this. That is ok. Our target is not the 16 connections sites, it is the sites that need mass numbers of connections/threads/processors. If we find a change that hurts us at 1-N and N is a small number that may be ok.&lt;br /&gt;&lt;br /&gt;What will we do when we are confronted by this? We talk abut it on IRC and we will send the information to the mailing list.&lt;br /&gt;&lt;br /&gt;More eyeballs is a good thing.</description>
  <comments>http://krow.livejournal.com/636036.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/635679.html</guid>
  <pubDate>Wed, 06 May 2009 18:15:47 GMT</pubDate>
  <title>Innodb Embedded Engine</title>
  <link>http://krow.livejournal.com/635679.html</link>
  <description>A couple of notes:&lt;br /&gt;&lt;br /&gt;1) I have already shared these thoughts with the Innodb team (and received some encouraging thoughts).&lt;br /&gt;2) I wrote this about a week ago. Drizzle/Memcached/Gearman keep me busy so I only got to spend a couple of weekend days to look over the Innobase Embedded Engine. I wish I had more time to go in depth.&lt;br /&gt;3) Innodb has a forum for the engine here where you can get more answers: &lt;a href=&quot;http://forums.innodb.com/list.php?8&quot;&gt;http://forums.innodb.com/list.php?8&lt;/a&gt;&lt;br /&gt;4) You can download the technology from here: &lt;a href=&quot;http://www.innodb.com/products/embedded-innodb/&quot;&gt;http://www.innodb.com/products/embedded-innodb/&lt;/a&gt;&lt;br /&gt;5) I&apos;d love to see someone take the embedded engine and port it directly to the Drizzle Engine Interface. I think that the interface they have done would make a much better starting point for integration then what we have today.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Technology&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The Innodb Embedded Engine is the same technology used for the Innodb Plugin. That is awesome... think about it. You are getting a threaded storage engine for embedded use that understands schema. Schema-less certainly has its place but there are a lot of cases where schema matters. Better? We are talking about using a real OLTP engine and being able to skip all of the SQL and go straight to the interface. A number of the storage engines vendors have talked about doing this over the years, but this is the first time one of them as delivered.&lt;br /&gt;&lt;br /&gt;All of the settings that you can do from the normal MySQL/Drizzle configuration are available. You are exposed to the direct API so you can get at the bits if all you really need is a simple interface (joins are not supported).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Observations&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;How are the examples?&lt;br /&gt;&lt;br /&gt;Without a bit of work they won&apos;t compile. There are problems in the include declarations for paths.&lt;br /&gt;&lt;br /&gt;Simple stuff like this:&lt;br /&gt;/usr/local/include/embedded_innodb-1.0/api0api.h:26:23: error: ib0config.h: No such file or directory&lt;br /&gt;&lt;br /&gt;The paths were incorrectly setup in the header file. My suggestion to the authors would be to look at libxml2 to see how to properly setup header files.&lt;br /&gt;&lt;br /&gt;Also? Don&apos;t include the config file. You break everyone else who is using auto tools. If you see errors like this you know you will have issues:&lt;br /&gt;&lt;br /&gt;&lt;proto&gt;&lt;br /&gt;/usr/local/include/embedded_innodb-1.0/ib0config.h:348:1: warning: &quot;PACKAGE_NAME&quot; redefined&lt;br /&gt;&lt;/proto&gt;&lt;br /&gt;&lt;br /&gt;The naming conventions are pretty poor. For instance the include file names make no sense:&lt;br /&gt;api0api.h  db0err.h  ib0config.h&lt;br /&gt;&lt;br /&gt;The naming scheme is reflective of Innodb&apos;s history but for end-developer usage they could have picked something a little bit cleaner (unless you are a Solid DB author, since they use exactly the same naming conventions) .&lt;br /&gt;&lt;br /&gt;I noticed when writing code that I must insert as a table name &quot;something/something&quot;. You are required to build names like this:&lt;br /&gt;snprintf(table_name, sizeof(table_name), &quot;%s/%s&quot;, dbname, name);&lt;br /&gt;&lt;br /&gt; From what I gather from the assert the &quot;/&quot; is required for the embedded plugin to know the name of a schema to create.&lt;br /&gt;&lt;br /&gt;The error system lacks some sort of error to string function. Having this would make debugging much simpler.&lt;br /&gt;&lt;br /&gt;I may be wrong about this though. The examples are a bit confusing and the call ib_database_create() makes me think that there is more to explain then what the current manual has in it. The documentation is far above the quality of what is frequently found for a first release like this... kudos to Oracle for doing this. The only issue I found was a discrepancy in the ib_cursor_moveto() function and a few other random mistakes.&lt;br /&gt;&lt;br /&gt;Unlike SQLite, the Embedded Innodb requires multiple files to run. Depending on your use case this will be annoying. The &quot;single file&quot; feature of SQLite really makes it useful as a replacement for writing your own file formats.&lt;br /&gt;&lt;br /&gt;The library makes use of its own types, like ib_bool_t, instead of just using standard C99 types. This type of programming is currently a pet peeve of mine. I am getting tired of dealing with &quot;yet another set of types&quot;. It makes it a pain to integrate with other code and just increases complexity for the end developer for no good reason.&lt;br /&gt;&lt;br /&gt;And writing to stdout on startup? That is a no no. I don&apos;t want my libraries writing to stdout on me. Libraries should be quiet, not noisy.&lt;br /&gt;&lt;br /&gt;Errors like this make the point that it is not only noisy, but that it still isn&apos;t really ready for prime time yet:&lt;br /&gt;&lt;proto&gt;&lt;br /&gt;090425 14:38:31  InnoDB: Error: table test/Foo does not exist in the InnoDB internal&lt;br /&gt;InnoDB: data dictionary though the client is trying to drop it.&lt;br /&gt;InnoDB: Have you copied the .frm file of the table ?&lt;br /&gt;&lt;/proto&gt;&lt;br /&gt;&lt;br /&gt;or...&lt;br /&gt;&lt;br /&gt;&lt;proto&gt;&lt;br /&gt;090425 15:36:52  InnoDB: Error: Client is freeing a thd&lt;br /&gt;&lt;/proto&gt;&lt;br /&gt;&lt;br /&gt;That remind you of anything? :)&lt;br /&gt;&lt;br /&gt;The API is based on what has been needed so far to make Innodb work with MySQL, so MySQL above specific errors are not surprising. The lack of API calls to list all tables in a schema is another example of this. With MySQL you had the FRM files, so there was no need to be able to get at the list of tables Innodb owned, so no API call exists for this (which is a common need in a standalone database).&lt;br /&gt;&lt;br /&gt;One other big item, this library is using a lot of global variables. Take a look at ib_cfg_set_int(). Notice the lack of context for setting variables. This means that the library really was not meant to be used in any sort of multi-tenancy use case. This really limits its usage pattern. A better design would be to create a &quot;context&quot; and pass that to the startup of the library. I&apos;ve wanted Innodb to cleanup its usage of global variables for years, and I had hoped that with the creation of a library this would have been solved.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Final Thoughts&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I can see a lot of use for this library. Concurrency with SQLite is a big issue for write, and libraries like Berkeley DB lack schema, and I personally like the concept of an embedded engine knowing more about the data then the length of the byte array being stored in it.&lt;br /&gt;&lt;br /&gt;Still? The library could use a lot of polish. It still shows the warts of being an internal project that has been pushed out into the public. I really hope that before a final release occurs that the authors will clean up the interface and consider the end developer.&lt;br /&gt;&lt;br /&gt;As far Drizzle/MySQL goes? I can certainly see basing a future storage engine interface around the concepts found in this library. It is not perfect but it is certainly better then what we have today. It is also obvious after looking at the interface that there is more that can be done in regard to performance if the interfaces were better aligned.&lt;br /&gt;&lt;br /&gt;There is a lot of potential in this project.</description>
  <comments>http://krow.livejournal.com/635679.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/635552.html</guid>
  <pubDate>Thu, 16 Apr 2009 00:21:17 GMT</pubDate>
  <title>Benchmarks, Comparing Drizzle to others</title>
  <link>http://krow.livejournal.com/635552.html</link>
  <description>&quot;I  was  surprised for example to hear from Jay that the Drizzle team should not compare its performance to MySQL only to Drizzle itself&quot;&lt;br /&gt;&lt;br /&gt;This quote came from a piece of email today asking me about why we, as in the Drizzle project, have not been publishing comparison benchmarks.&lt;br /&gt;&lt;br /&gt;First of all, this is not a Sun request, this was a request from me to the other core members of the project.&lt;br /&gt;&lt;br /&gt;Let me explain...&lt;br /&gt;&lt;br /&gt;I don&apos;t think projects can ever objectively compare themselves to other projects. Look at all of the heat that went on for years between Postgres and MySQL. I think we, the Drizzle Project, are better off publishing code and helping others create benchmarks, but avoiding doing the comparisons ourselves.&lt;br /&gt;&lt;br /&gt;We are inherently biased.&lt;br /&gt;&lt;br /&gt;One of the first things that went up on the Drizzle wiki were the pages that were labeled &quot;this is not what we are&quot;. Namely we wanted to create a place for people to be able to fill in that sort of information, and debate it.&lt;br /&gt;&lt;br /&gt;We should be facing truth about what we do, and listening outwardly for feedback on how we are doing.&lt;br /&gt;&lt;br /&gt;When it comes to benchmarks, I really believe we must stay out of the business of doing anything other then regression testing. I welcome everyone, and anyone else to do benchmarks.&lt;br /&gt;&lt;br /&gt;I ask for groups to work with us so that we can improve upon what is  found (and trust me... there is still plenty for us to find).&lt;br /&gt;&lt;br /&gt;So the lack of comparison benchmarks has nothing to do with Sun, is has more to do with my own requests.&lt;br /&gt;&lt;br /&gt;Drizzle as a project is about providing a new Kernel for MySQL, and I really believe others can do the benchmarks better then we can.&lt;br /&gt;&lt;br /&gt;Those not attached to the core project come off as a legitimate source of information in a way that we simply can not, and should not, try to be.&lt;br /&gt;&lt;br /&gt;On that same note... the Drizzle Project doesn&apos;t produce an OLTP engine. At some point we will get into the game of publicly comparing engines, but when we do it we will not be pulling any punches. We will be working with everyone we test with to make sure our final reports are as accurate as possible. I feel pretty free to compare libraries/plugins/engines that we make use of in Drizzle&lt;br /&gt;&lt;br /&gt;It is only through public scrutiny that we can really provide distributions that bundle Drizzle with solid decisions on what to package.</description>
  <comments>http://krow.livejournal.com/635552.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/635306.html</guid>
  <pubDate>Fri, 10 Apr 2009 01:50:03 GMT</pubDate>
  <title>Up at Index</title>
  <link>http://krow.livejournal.com/635306.html</link>
  <description>&lt;a href=&quot;http://pics.livejournal.com/krow/pic/000zye79/&quot;&gt;&lt;img src=&quot;http://pics.livejournal.com/krow/pic/000zye79/s320x240&quot; alt=&quot;photo.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://krow.livejournal.com/635306.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/634896.html</guid>
  <pubDate>Mon, 06 Apr 2009 18:57:03 GMT</pubDate>
  <title>Niagra, Daily Work</title>
  <link>http://krow.livejournal.com/634896.html</link>
  <description>First off, I have not been much of a of for Sparc in a number of years. Partly because I didn&apos;t feel like paying for the machines, and partly because I am not much of a fan of Solaris (the user space for development has a lot to be desired). In the last few months we have been working on getting Drizzle to work on Sparc/Solaris which has been an interesting adventure.&lt;br /&gt;&lt;br /&gt;MySQL never compiled on Solaris without warnings, and it almost never could pass the full regression test system.&lt;br /&gt;&lt;br /&gt;With &lt;a href=&quot;http://launchpad.net/drizzle&quot;&gt;Drizzle&lt;/a&gt;, I felt like if we were going to say we ran on Sparc/Solaris that I wanted to be able to say that we supported it without a bunch of exceptions.&lt;br /&gt;&lt;br /&gt;It took us months... and I mean months to get things cleaned up for it. In the process I&apos;ve gained a bit more respect for the platform (keep in mine... I was a big fan of SunOS, the predecessor to Solaris).&lt;br /&gt;&lt;br /&gt;A few nice things I have noticed:&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Compiling on the Niagra machine is fast. I run gmake -j and the thing just plows through the compile. Its faster then my 8proc Intel and way faster then my Mac Mini. What is impressive about this is that the Sparc is doing the compile with the write cache not enabled, while Linux and OSX are (hell... OSX has a fake sync() call, how lame is that?)&lt;br /&gt;&lt;br /&gt;&lt;li&gt; The Sun Studio compiler consistently finds more bugs/gives me better warnings then gcc. Sure, it lacks the built in atomic calls that gcc has, but thanks to working with the Sun Studio team we have been able to make use of their atomic.h and make a very simple compatibility layer. We don&apos;t handle our own assembler, we let the experts do that.&lt;br /&gt;&lt;br /&gt;&lt;li&gt; The more we reduce locks, the faster it gets. I am still arguing with some of the authors of the other MySQL type trees about this... there is still a concept that some locks are ok. I am finding that every turn even the most innocuous are still an issue. As an example, there is a lock around the query string for &quot;show proccesslist&quot;. That one particular lock has turned out to be a real bane in production environments where you have lots of clients logging in and out... especially when you toss in monitoring. It took a few weeks to get rid of the locks there but we have them all gone now. It made a noticeable difference for some of the live usages of Drizzle (aka... just beyond benchmarks).&lt;br /&gt;&lt;br /&gt;All in all I am becoming a bit happier with the Sun/Solaris environment. I would prefer to just have Debian on the box, with an &quot;apt-get solaris-kernel&quot; to test against. It would give me a better apples to apples comparison. Valgrind and a number of other tools would be nice... but in general?&lt;br /&gt;&lt;br /&gt;I am finding that the environment is not as bad as I thought it would be to maintain, and that there are some actual benefits.</description>
  <comments>http://krow.livejournal.com/634896.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/634678.html</guid>
  <pubDate>Thu, 02 Apr 2009 18:54:14 GMT</pubDate>
  <title>WebOps Speakers Club @ Web2.0 Expo</title>
  <link>http://krow.livejournal.com/634678.html</link>
  <description>&lt;div class=&quot;flickr-frame&quot;&gt;	&lt;a href=&quot;http://www.flickr.com/photos/jesserobbins/3406740363/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3300/3406740363_58b8458a90.jpg&quot; class=&quot;flickr-photo&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class=&quot;flickr-caption&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/jesserobbins/3406740363/&quot;&gt;WebOps Speakers Club @ Web2.0 Expo&lt;/a&gt;, originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/jesserobbins/&quot;&gt;jesse robbins&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;				&lt;p class=&quot;flickr-yourcomment&quot;&gt;	&lt;/p&gt;</description>
  <comments>http://krow.livejournal.com/634678.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/634557.html</guid>
  <pubDate>Wed, 01 Apr 2009 17:35:21 GMT</pubDate>
  <title>Just how many patches does Drizzle take in?</title>
  <link>http://krow.livejournal.com/634557.html</link>
  <description>This morning I woke up to an IM of &quot;Just how many patches do you all take?&quot;&lt;br /&gt;&lt;br /&gt;I suspect the question was asked because of Masood&apos;s post about &lt;a href=&quot;http://blogs.sun.com/MortazaviBlog/entry/one_bug_fix_at_a&quot;&gt;contributions for MySQL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Looking at yesterday&apos;s commits I see that we took in contributions from four people. There were 26 patches in total from those four people, and of those we had to correct two of the patches. One of those people comes from a team of three at one company who are working fulltime on Drizzle at the moment in order to get their code released.&lt;br /&gt;&lt;br /&gt;Only one actual paid for by Sun employee committed anything yesterday :)&lt;br /&gt;&lt;br /&gt;Which reminds me that I need to get back to hacking, the global locks around @variables are not going to fix themselves :)&lt;br /&gt;&lt;br /&gt;More fun numbers:&lt;br /&gt;&lt;br /&gt;Last month?&lt;br /&gt;&lt;br /&gt;47 contributors according to Launchpad.&lt;br /&gt;&lt;br /&gt;In total sense the project became public last year?&lt;br /&gt;&lt;br /&gt;Somewhere around a hundred people.&lt;br /&gt;&lt;br /&gt;We have five active Drizzle developers in Sun right now (Lee has been too busy as of late with other stuff, hopefully we can change that!).&lt;br /&gt;&lt;br /&gt;None of this includes work on the new drivers.</description>
  <comments>http://krow.livejournal.com/634557.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://krow.livejournal.com/634166.html</guid>
  <pubDate>Tue, 31 Mar 2009 16:47:55 GMT</pubDate>
  <title>Web 2.0 Expo, Drizzle</title>
  <link>http://krow.livejournal.com/634166.html</link>
  <description>Just as a reminder I will be giving a talk on Drizzle at Web 2.0 Expo in San Francisco this week on Thursday at 1:30.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.web2expo.com/webexsf2009/public/schedule/detail/5782&quot;&gt;http://www.web2expo.com/webexsf2009/public/schedule/detail/5782&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will be hanging around the conference for the day so feel free to say hello :)</description>
  <comments>http://krow.livejournal.com/634166.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
