<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-32407360</id><updated>2012-01-19T23:25:52.709+01:00</updated><category term='virtualization'/><category term='openid'/><category term='postgresql'/><category term='parallel computing'/><category term='robotics'/><category term='REST'/><category term='patterns'/><category term='security'/><category term='programming'/><category term='storage'/><category term='open source'/><category term='cloud'/><category term='Oracle'/><category term='Java'/><category term='VLDB'/><category term='Web'/><category term='JAOO'/><category term='sqlpage'/><category term='paradigm of the week'/><category term='open source days 2008'/><category term='benchmarking'/><category term='performance'/><category term='SAN'/><category term='cloud-computing'/><category term='sysadm'/><category term='architecture'/><category term='programming languages'/><category term='Informix'/><category term='database'/><title type='text'>Troels' blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32407360.post-1290227168795507006</id><published>2011-10-01T22:57:00.014+02:00</published><updated>2011-10-02T19:47:11.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAN'/><category scheme='http://www.blogger.com/atom/ns#' term='storage'/><title type='text'>What a dying SFP looks like</title><content type='html'>Fibre channel (FC) storage is handy, and generally very reliable, in my experience. I certainly do not miss the days of messing around with disks in a server-room. And I like the fact that RAIDs may be cut up into slices (LUNs) which may be shared by many servers, resulting in very efficient use of the disks (if so wanted).&lt;br /&gt;&lt;br /&gt;One part about FC that I dislike (in addition to the price tags): &lt;a href="http://en.wikipedia.org/wiki/Small_form-factor_pluggable_transceiver"&gt;SFP&lt;/a&gt;s. Why on earth are transceivers not an integral part of a Fibre Channel switch? Having the transceivers be separate units means more electrical contact points, and a potential support mess (it's not hard to imagine a situation where the support contract of an SFP has run out, while the switch itself is still covered).&lt;br /&gt;&lt;br /&gt;Anyway: Today, I experienced an defunct SFP, for the first time. The following observations may give a hint of how to discover that an SFP is starting to malfunction. The setup is an IBM DS4800 storage system where port 2 on controller B is connected to port 0 on an IBM TotalStorage SAN32B FC switch (which is an IBM-branded Brocade 5100 switch).&lt;br /&gt;&lt;br /&gt;Friday morning at 07:49, in syslog: A few messages like this from the FC switch:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;raslogd: 2011/09/30-07:49:07, [SNMP-1008], 2113, WWN 10:... | FID 128, INFO, IBM_2005_B32_B,&amp;nbsp; The last device change happened at : Fri Sep 30 07:49:01 2011&lt;/div&gt;&lt;br /&gt;At the same time the storage system started complaining about "Drive not on preferred path due to ADT/RDAC failover", meaning that at least one server had started using a non-optimal path, most likely due to I/O timeouts on the preferred path. And a first spike in the &lt;i&gt;bad_os&lt;/i&gt; count occurred for the FC switch port:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-s7ZV77E8SKA/Tod1CKSeIxI/AAAAAAAAAEk/unIMCjd0UTw/s1600/dying_sfp-bad_os.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-s7ZV77E8SKA/Tod1CKSeIxI/AAAAAAAAAEk/unIMCjd0UTw/s1600/dying_sfp-bad_os.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt; bad_os&lt;/i&gt; is a counter which exists in Brocade switches, and possibly others. Brocade describes it as the number of invalid &lt;i&gt;ordered sets&lt;/i&gt; received.&lt;br /&gt;&lt;br /&gt;At 10:55, in syslog:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;raslogd: 2011/09/30-10:55:02, [FW-1424], 2118, WWN 10:... | FID 128, WARNING, IBM_2005_B32_B, Switch status changed from HEALTHY to MARGINAL&lt;/div&gt;At the same time, there was a slightly larger spike in the &lt;i&gt;bad_os&lt;/i&gt; graph.&lt;br /&gt;Coinciding: The storage system sent a mail warning about "Data rate negotiation failed" for the port.&lt;br /&gt;&lt;br /&gt;At 17:00: The count for bit-traffic flat-lined (graph not shown). I.e.: All traffic had ceased.&lt;br /&gt;&lt;br /&gt;At no point did the graphs for C3 discards, encoding errors or CRC errors show any spikes.&lt;br /&gt;&lt;br /&gt;The next morning, the involved optical cable was switched; that didn't help. Inserting another SFP helped, leading to the conclusion that the old SFP had started to malfunction.&lt;br /&gt;&lt;br /&gt;Morale: Make sure to not just keep spare cables around. A spare SFP should also be kept in stock.&lt;br /&gt;And monitor your systems: A centralized and regularly inspected syslog is invaluable. Generating graphs for key counters is also mandatory for mature systems operation; one way to collect and display key counts for Brocade switches is to use Munin and a &lt;a href="http://troels.arvin.dk/code/munin/brocade_san_switch_ports_"&gt;Munin plugin&lt;/a&gt; which I wrote.&lt;br /&gt;&lt;br /&gt;PS: Brocade documentation states that SFP problems might result in the combination of rises in CRC errors and encoding/disparity errors. This did not happen in this situation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-1290227168795507006?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/1290227168795507006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=1290227168795507006' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/1290227168795507006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/1290227168795507006'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2011/10/what-dying-sfp-looks-like.html' title='What a dying SFP looks like'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-s7ZV77E8SKA/Tod1CKSeIxI/AAAAAAAAAEk/unIMCjd0UTw/s72-c/dying_sfp-bad_os.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-759827802593859836</id><published>2010-06-23T02:53:00.014+02:00</published><updated>2010-12-24T10:40:18.638+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Separation or co-location of database and application</title><content type='html'>In a classical three-tier architecture (database, application-server, client), a choice will always have to be made: Should the database and the application-server reside on separate servers, or co-located on a shared server?&lt;br /&gt;&lt;br /&gt;Often, I see recommendations for separation, with vague claims about performance improvements. But I assert that the main argument for separation is bureaucratic (license-related), and that separation may well hurt performance. Sure, if you separate the application and the database on separate servers, you gain an easy scale-out effect, but you also end up with a less efficient communication path.&lt;br /&gt;&lt;br /&gt;If a database and an application is running on the same operating system instance, you may use very efficient communication channels. With DB2, for example, you may use shared-memory based inter-process communication (IPC) when the application and the database are co-located. If they are on separate servers, TCP must be used. TCP is a nice protocol, offering reliable delivery, congestion control, etc, but it also entails several protocol layers, each contributing overhead.&lt;br /&gt;&lt;br /&gt;But let's try to quantify the difference, focusing as closely on the query round-trips as possible.&lt;br /&gt;&lt;br /&gt;I wrote a little Java program, &lt;i&gt;&lt;a href="http://troels.arvin.dk/db/db2/code/LatencyTester/LatencyTester.java.html"&gt;LatencyTester&lt;/a&gt;&lt;/i&gt;, which I used to measure differences between a number of database&amp;lt;&amp;gt;application setups. Java was chosen because it's a compiled, statically typed language; that way, the test-program should have as little internal execution overhead as possible. This can be important: I have sometimes written database benchmark programs in Python (which is a much nicer programming experience), but as Python can be rather inefficient, I ended up benchmarking Python, instead of the database.&lt;br /&gt;&lt;br /&gt;The program connects to a DB2 database in one of two ways:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you specify a servername and a username, it will communicate using "&lt;a href="http://www.opengroup.org/dbiop/"&gt;DRDA&lt;/a&gt;" over TCP&lt;/li&gt;&lt;li&gt;If you leave out servername and username it will use a local, shared memory based channel.&lt;/li&gt;&lt;/ul&gt;After connecting to the database, the program issues 10000 queries which shouldn't result in I/Os, because no data in the database system is referenced. The timer starts after connection setup, just before the first query; it stops immediately after the last query.&lt;br /&gt;&lt;br /&gt;The application issues statements like &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;VALUES(&lt;i&gt;...&lt;/i&gt;)&lt;/span&gt; where &lt;i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;...&lt;/span&gt;&lt;/i&gt; is a value set by the application. Note the lack of a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SELECT&lt;/span&gt; and a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FROM&lt;/span&gt; in the statement. When invoking the program, you must choose between &lt;i&gt;short&lt;/i&gt; or &lt;i&gt;long&lt;/i&gt; statements. If you choose &lt;i&gt;short&lt;/i&gt;, statements like this will be issued:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;VALUES(&lt;i&gt;?&lt;/i&gt; + 1)&lt;/div&gt;where &lt;i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;?&lt;/span&gt;&lt;/i&gt; is a randomly chosen host variable.&lt;br /&gt;If you choose &lt;i&gt;long&lt;/i&gt;,&amp;nbsp; statements like&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;VALUES('&lt;i&gt;lksjflkvjw...pvoiwepwvk&lt;/i&gt;')&lt;/div&gt;will be issued, where &lt;i&gt;lksjflkvjw...pvoiwepwvk&lt;/i&gt; is a 2000-character pseudo-randomly composed string.&lt;br /&gt;In other words: The program may run in a mode where very short or very long units are sent back and forth between the application and the database. The short queries are effectively measuring latency, while the long queries may be viewed as measuring throughput.&lt;br /&gt;&lt;br /&gt;I used the program to benchmark four different setups:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Application and database on the same server, using a local connection&lt;/li&gt;&lt;li&gt;Application and database on the same server, using a TCP connection&lt;/li&gt;&lt;li&gt;Application on a virtual server hosted by the same server as the database, using TCP&lt;/li&gt;&lt;li&gt;Application and database on different physical servers, but on the same local area network (LAN), using TCP&lt;/li&gt;&lt;/ul&gt;The results are displayed in the following graph:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://troels.arvin.dk/db/db2/code/LatencyTester/queries_per_second-large.png" target="_blank"&gt;&lt;img alt="Results from LatencyTester" src="http://3.bp.blogspot.com/_ySR6zPxLIoY/TCGhm0ZkuzI/AAAAAAAAACs/9rxHn7ObPEY/s320/queries_per_second.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;small&gt;Click on figure to enlarge; opens in new window&lt;/small&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Clearly, the the highest number of queries per second is seen when the database and the application are co-located. This is especially true for the short queries: Here, more than four times as many queries may be executed per second when co-locating on the same server, compared to separating over a LAN. When using TCP on the same server, short-query round-trips run at around half the speed.&lt;br /&gt;&lt;br /&gt;The results need to be put in perspective, though: While there are clear differences, the absolute numbers may not matter much in the Real World. The average query-time for short local queries were 0.1ms, compared to 0.8ms for short queries over the LAN. Let's assume that we are dealing with a web application where each page-view results in ten short queries. In this case, the round-trip overhead for a location connection is 10x0.1ms=1ms, whereas round-trip overhead for the LAN-connected setup is 10x0.8ms=8ms. Other factors (like query disk-I/O, and browser-to-server roundtrips) will most likely dominate, and the user will hardly notice a difference.&lt;br /&gt;&lt;br /&gt;Even though queries over a LAN will normally not be noticeably slower, LANs may sometimes exhibit congestion. And all else being equal, the more servers and the more equipment being involved, the more things can go wrong.&lt;br /&gt;&lt;br /&gt;Having established that application/database server-separation will not improve query performance (neither latency, nor throughput), what other factors are involved in the decision between co-location and separation?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Software licensing terms may make it cheaper to put the database on its own, dedicated hardware: The less CPUs beneath on the database system, the less licensing costs. The same goes for the application server: If it is priced per CPU, it may be very expensive to pay for CPUs which are primarily used for other parts of the solution.&lt;/li&gt;&lt;li&gt;Organizational aspects may dictate that the the DBA and the application server administrator each have their "own boxes". Or conversely, the organization may put an effort into operating as few servers as possible to keep administration work down.&lt;/li&gt;&lt;li&gt;The optimal operating system for the database may not be the optimal operating system for the application server.&lt;/li&gt;&lt;li&gt;The database server may need to run on hardware with special, high-performance storage system attachments. - While the application server (which probably doesn't perform much disk I/O) may be better off running in a virtual server, taking advantage of the flexible administration advantages of virtualization.&lt;/li&gt;&lt;li&gt;Buying one very powerful piece of server hardware is sometimes more expensive than buying two servers which add up to the same horsepower. But it may also be the other way around, especially if cooling, electricity, service agreements, and rack space is taken into account.&lt;/li&gt;&lt;li&gt;Handling authentication and group memberships may be easier when there is only one server. E.g., DB2 and PostgreSQL allows the operating system to handle authentication if an application connects locally, meaning that no authentication configuration needs to be set up in the application. (Don't you just hate it when passwords sneak into the version control system?)&lt;/li&gt;&lt;li&gt;A mis-behaving (e.g. memory leaking) application may disturb the database if the two are running on the same system. Operating systems generally provide mechanisms for resource-constraining processes, but that can often be tricky to setup.&lt;/li&gt;&lt;/ul&gt;Summarized:&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr style="vertical-align: top;"&gt;&lt;td style="background-color: silver; width: 50%;"&gt;&lt;b&gt;Pro&lt;/b&gt; separation&lt;/td&gt;&lt;td style="background-color: silver; width: 50%;"&gt;&lt;b&gt;Con&lt;/b&gt; separation&lt;/td&gt;&lt;/tr&gt;&lt;tr style="vertical-align: top;"&gt;&lt;td&gt;Misbehaving application will not be able to disturb the database as much.&lt;/td&gt;&lt;td&gt;Slightly higher latency.&lt;/td&gt;&lt;/tr&gt;&lt;tr style="vertical-align: top;"&gt;&lt;td&gt;May provide for more tailored installations (the database gets its perfect environment, and so does the application).&lt;/td&gt;&lt;td&gt;Less predictable connections on shared networks.&lt;/td&gt;&lt;/tr&gt;&lt;tr style="vertical-align: top;"&gt;&lt;td&gt;If the application server is split into two servers in combination with a load balancing system, each application server may be patched individually without affecting the database server, and with little of no visible down-time for the users.&lt;/td&gt;&lt;td&gt;More hardware/software/systems to maintain, monitor, backup, and document.&lt;/td&gt;&lt;/tr&gt;&lt;tr style="vertical-align: top;"&gt;&lt;td&gt;May save large amounts of money if the database and/or the application is CPU-licensed.&lt;/td&gt;&lt;td&gt;Potentially more base software licensing fees (operating systems, supporting software).&lt;/td&gt;&lt;/tr&gt;&lt;tr style="vertical-align: top;"&gt;&lt;td&gt;Potentially cheaper to buy two modest servers than to buy one top-of-the-market server.&lt;/td&gt;&lt;td&gt;Potentially more expensive to buy two servers if cooling and electricity is taken into account.&lt;/td&gt;&lt;/tr&gt;&lt;tr style="vertical-align: top;"&gt;&lt;td&gt;Allows for advanced scale-out/application-clustering scenarios.&lt;/td&gt;&lt;td&gt;Prevents easy packaging of a complete database+application product, such as a turn-key solution in a single VMWare or Amazon EC2 image.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Am I overlooking something?&lt;br /&gt;Is the situation markedly different with other DBMSes?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-759827802593859836?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/759827802593859836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=759827802593859836' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/759827802593859836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/759827802593859836'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2010/06/separation-or-co-location-of-database.html' title='Separation or co-location of database and application'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ySR6zPxLIoY/TCGhm0ZkuzI/AAAAAAAAACs/9rxHn7ObPEY/s72-c/queries_per_second.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-4839689302330055035</id><published>2009-12-28T23:36:00.001+01:00</published><updated>2009-12-28T23:57:47.993+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL innovation: Exclusion constraints</title><content type='html'>It seems like the next generation of PostgreSQL will have a new, rather innovative feature: &lt;i&gt;Exclusion constraints&lt;/i&gt;. The feature is &lt;a href="http://thebuild.com/blog/2009/12/23/sfpug-operator-exclusion-constraints/"&gt;explained in a video&lt;/a&gt; from a presentation at a recent San Francisco PostgreSQL Users' Group; the presentation couples the new feature with the &lt;a href="http://pgfoundry.org/projects/temporal"&gt;time &lt;i&gt;period&lt;/i&gt;&lt;/a&gt; data type.&lt;br /&gt;&lt;br /&gt;In a perfect World where databases implement the full ISO SQL standard (including non-core features), exclusion constraints could be nicely expressed as SQL assertions, but the perfect World hasn't happened yet. And I think that I know the reason for this: SQL assertions seem like a strong cocktail of NP-hard problems - they are probably very hard to implement in an efficient way.&lt;br /&gt;&lt;br /&gt;In our less than perfect World, it's nice that PostgreSQL will soon offer a way to specify exclusion constraints other than the UNIQUE constraint.&lt;br /&gt;&lt;br /&gt;The presenter, Jeff Davis, has an &lt;a href="http://thoughts.j-davis.com/"&gt;interesting blog&lt;/a&gt;, by the way. An on the subject of video, Vimeo has a little &lt;a href="http://vimeo.com/postgresql"&gt;collection of PostgreSQL video clips&lt;/a&gt; that looks interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-4839689302330055035?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/4839689302330055035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=4839689302330055035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/4839689302330055035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/4839689302330055035'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/12/postgresql-innovation-exclusion.html' title='PostgreSQL innovation: Exclusion constraints'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-1487574998047181362</id><published>2009-10-04T23:17:00.004+02:00</published><updated>2009-10-04T23:32:24.201+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlpage'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>SQL comparison update: PostgreSQL 8.4</title><content type='html'>I finally got around to adjusting my SQL comparison page, so that the &lt;a href="http://www.postgresql.org/docs/8.4/static/release-8-4.html"&gt;improvements in PostgreSQL 8.4&lt;/a&gt; are taken into account. PostgreSQL is now standards-compliant in the &lt;a href="http://troels.arvin.dk/db/rdbms/#select-limit"&gt;sections about limiting result sets&lt;/a&gt;; actually, PostgreSQL is the first DBMS that I know of which supports SQL:2008's OFFSET + FETCH FIRST construct for pagination. PostgreSQL's new support for &lt;span style="font-style: italic;"&gt;window functions&lt;/span&gt; is also very nice.&lt;br /&gt;&lt;br /&gt;My page doesn't cover common table expressions (CTEs) yet, but it's certainly nice to see more and more DBMSes (including PostgreSQL, since version 8.4) supporting them. Even non-recursive CTEs are important, because they can really clean up SQL queries and make them more readable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-1487574998047181362?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/1487574998047181362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=1487574998047181362' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/1487574998047181362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/1487574998047181362'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/10/sql-comparison-update-postgresql-84.html' title='SQL comparison update: PostgreSQL 8.4'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-4194151880604905160</id><published>2009-10-04T03:36:00.004+02:00</published><updated>2009-10-04T23:32:29.826+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlpage'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>SQL comparison updates: Oracle 11R2, diagnostic logs</title><content type='html'>I finally found some time to update my &lt;a href="http://troels.arvin.dk/db/rdbms/"&gt;page which compares SQL implementations&lt;/a&gt;. I performed a general update regarding Oracle, now that Oracle 11R2 has been released. And I added a new (incomplete) section which describes &lt;a href="http://troels.arvin.dk/db/rdbms/#other-diagnostic_log"&gt;where the different DBMSes store diagnostic logs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I turned out that very little has changed in Oracle since generation 10. The only remarkable new SQL feature in Oracle 11 is support for &lt;a href="http://en.wikipedia.org/wiki/Common_table_expressions"&gt;CTE&lt;/a&gt;s and &lt;a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/statements_10002.htm#SQLRF55576"&gt;proper CTE-based recursive SQL&lt;/a&gt; (introduced in version 11, release 2) -- but as I don't cover this topic on my page, updating the Oracle items was mostly a question of updating documentation links. Oracle &lt;span style="font-style: italic;"&gt;still&lt;/span&gt; doesn't support the standard by having a CHARACTER_LENGTH and a SUBSTRING function, for example. This is &lt;span style="font-weight: bold;"&gt;simple&lt;/span&gt;, low-hanging fruit, Oracle(!) Sigh. It seems like Oracle's market position has made them (arrogantly) ignore the SQL standard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-4194151880604905160?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/4194151880604905160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=4194151880604905160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/4194151880604905160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/4194151880604905160'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/10/sql-comparison-updates-oracle-11r2.html' title='SQL comparison updates: Oracle 11R2, diagnostic logs'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-5024664832950257556</id><published>2009-08-31T23:47:00.010+02:00</published><updated>2009-09-01T00:13:10.321+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VLDB'/><category scheme='http://www.blogger.com/atom/ns#' term='storage'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>VLDB2009: Non-cloud storage</title><content type='html'>Not all of VLDB2009 was related to cloud storage. Luckily, local and SAN storage is still being explored. Here are some notes from selected presentations.&lt;br /&gt;&lt;br /&gt;Mustafa Canim: &lt;span style="font-style: italic;"&gt;An Object Placement Advisor for DB2 Using Solid State Storage&lt;/span&gt;: What data should be put on disks, and what data on solid state disk storage? &lt;a href="http://en.wikipedia.org/wiki/Solid-state_drive"&gt;Solid state drives&lt;/a&gt; (SSDs) shine at random read I/O, but in most situations, there's limited funds, so only part of a database will be eligible for SSD placement. It turns out that if a naïve/simplified strategy like &lt;span style="font-style: italic;"&gt;let's place all indexes on SSD&lt;/span&gt; is used, only a small overall performance gain is measurable, and it's hardly a justification of the expensive SSD storage. But if placement of database objects (tables/indexes) is based on measurements from a representative workload, then data which is often seeked to can be placed on the SSDs. Canim has created a prototype application which uses DB2 profiling information to give advice on the most optimal use for &lt;span style="font-style: italic;"&gt;x&lt;/span&gt;GB of SSD storage, and he demonstrated very convincing price/performance gains from his tool. The principle should be easy to apply to other DBMSes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.umass.edu/%7Edagrawal/"&gt;Devesh Agrawal&lt;/a&gt;: &lt;a href="http://www.cs.umass.edu/%7Edagrawal/publications/vldb-latree.pdf"&gt;&lt;span style="font-style: italic;"&gt;Lazy-Adaptive Tree: An Optimized Index Structure for Flash Devices&lt;/span&gt;&lt;/a&gt;: Since SSDs do &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; shine at random writes, an SSD-optimized index structure would be highly welcome. The Lazy-Adaptive (LA) Tree index is a (heavily) modified B+ tree which buffers writes in a special way, yielding significant performance improvements.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ySR6zPxLIoY/SpxH3bz96vI/AAAAAAAAABo/RGpYIoW0RSE/s1600-h/diads-demo.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_ySR6zPxLIoY/SpxH3bz96vI/AAAAAAAAABo/RGpYIoW0RSE/s200/diads-demo.jpg" alt="Nedyalko Borisov demonstrating DIADS" id="BLOGGER_PHOTO_ID_5376251072857631474" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.cs.duke.edu/%7Enedyalko/"&gt;Nedyalko Borisov&lt;/a&gt; and &lt;a href="http://www.cs.duke.edu/%7Eshivnath/"&gt;Shivnath Babu&lt;/a&gt; had a poster and a demonstration about a prototype application they have created: &lt;a style="font-style: italic;" href="http://www.cs.duke.edu/%7Eshivnath/diads.html"&gt;DIADS&lt;/a&gt;. DIADS integrates information from DB2 query access plans with knowledge about the storage infrastructure (all the way from files on the disk, through the LVM and SAN layers, to individual disks) to help diagnosing performance bottlenecks. This would certainly be useful for DBAs, and it could probably bridge the worlds of DBAs and storage people. They are considering making it an open source project. By the way: I believe that I've heard Hitachi claim to be selling a tool with a similar objective: &lt;a href="http://www.hds.com/products/storage-software/hitachi-tuning-manager.html"&gt;Hitachi Tuning Manager&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finally, a little rule of thumb from &lt;a href="http://www.cs.umb.edu/%7Eponeil/"&gt;Patrick O'Neil&lt;/a&gt;'s &lt;span style="font-style: italic;"&gt;The Star Schema Benchmark and Augmented Fact Table Indexing&lt;/span&gt; (part of the &lt;a href="http://www.tpc.org/tpctc2009"&gt;TPC Workshop&lt;/a&gt;): Throughput of magnetic disks has grown much more than seek latency, so at the moment, 1MB of scanning can justify 1 seek.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-5024664832950257556?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/5024664832950257556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=5024664832950257556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/5024664832950257556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/5024664832950257556'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/08/vldb2009-non-cloud-storage.html' title='VLDB2009: Non-cloud storage'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ySR6zPxLIoY/SpxH3bz96vI/AAAAAAAAABo/RGpYIoW0RSE/s72-c/diads-demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-7953448495503124860</id><published>2009-08-28T22:34:00.008+02:00</published><updated>2009-09-01T00:11:47.592+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='VLDB'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>VLDB2009: Sloppy by choice</title><content type='html'>One of the recurring themes at the VLDB2009 conference was how to create massively scalable database systems, by decreasing expressiveness, transaction coverage, data integrity guarantees—or any combination of these. The theoretical justification for this is partly explained by the &lt;a href="http://www.cs.berkeley.edu/%7Ebrewer/cs262b-2004/PODC-keynote.pdf"&gt;CAP Theorem&lt;/a&gt;. Much has already been written about database key-value/object stores, cloud databases, etc. But there were still a few surprises.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Ramakri&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;shnan's keynote&lt;/span&gt;&lt;br /&gt;Yahoo!'s &lt;a href="http://research.yahoo.com/Raghu_Ramakrishnan"&gt;Raghu Ramakrishnan&lt;/a&gt; (whose &lt;a href="http://pages.cs.wisc.edu/%7Edbbook/"&gt;textbook&lt;/a&gt; many readers of this article will know) gave a &lt;a href="http://vldb2009.org/?q=node/22"&gt;keynote&lt;/a&gt; on the subject. It was actually new to me that Yahoo! is also entering the cloud business; it's getting crowded in the sky, for sure. As we know, the business idea is this: A large operation like Amazon already has a massive, distributed IT infrastructure; so letting other companies in isn't that much of an extra burden. And the more users of the hardware, the easier it is to build a cost-efficient setup which can still handle spikes in performance demands (with many users it's very unlikely that their systems run at peak performance at the same time). Nice idea, but it may take a long while before users convert to using software which runs in the cloud, and it remains to be seen how many cloud vendors which can survive that long.&lt;br /&gt;&lt;br /&gt;Anyway, Raghu Ramakrishnan presented a much-needed comparison of cloud database solutions (pages 55-60 in &lt;a href="http://www.eu.apachecon.com/page_attachments/0000/0194/ApacheCon-09cloud.ppt"&gt;this presentation&lt;/a&gt;). The consistency model of Yahoo!'s cloud database system, &lt;a href="http://research.yahoo.com/files/pnuts.pdf"&gt;PNUTS&lt;/a&gt;, does not provide &lt;a href="http://en.wikipedia.org/wiki/ACID"&gt;ACID&lt;/a&gt;, but nor is it 'sloppy' to the degree of &lt;a href="http://queue.acm.org/detail.cfm?id=1394128"&gt;BASE&lt;/a&gt;. Another nice aspect of Yahoo!'s cloud systems is that much of it is based on open source software. Yay Yahoo!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;When to be sloppy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;At the conference, some claimed that cloud storage can also be used for important data, but no one gave a plausible example. In cloudy times, we should not forget that not all data are about tweets, status updates, weblog postings, etc. There are actually data which is actually &lt;span style="font-style: italic;"&gt;important&lt;/span&gt;. That's why I liked the &lt;a style="font-style: italic;" href="http://www.dbis.ethz.ch/research/publications/ConsistencyRationing.pdf"&gt;Consistency Rationing in the Cloud: Pay only when it matters&lt;/a&gt; presentation: It provided at framework for categorizing data in degrees of acceptable sloppiness, based on the cost associated with potential inconsistencies, versus the savings gained from the lower transaction overhead.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Panel on cloud storage&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;On Wednesday, there was a panel discussion on &lt;a href="http://vldb2009.org/?q=node/23"&gt;How Best to Build Web-Scale Data Managers&lt;/a&gt;, moderated by &lt;a href="http://research.microsoft.com/en-us/people/philbe/"&gt;Philip Bernstein&lt;/a&gt;. Random notes from the discussion:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A Surprising, and somewhat strange viewpoint from Bernstein: We should not ditch ACID (not surprising coming from Mr Transaction himself), but we should &lt;span style="font-weight: bold;"&gt;give hierarchical DBMSes a new chance&lt;/span&gt;. According to Bernstein: The reason why it will not fail this time is that we have become so good at handling materialized views, and they allow us to make sure that fast queries are not restricted to restricting/scanning one one dimension. Bernstein failed to alleviate my fear of the return of another major drawback of hierarchical databases: navigational queries. &lt;/li&gt;&lt;li&gt;While there's much not-so-important data out there, the phenomenon of moderate amounts of important data hasn't gone away (not every business is a twitter.com). So although the non-ACID, non-relational database systems may have a lot of attention, it doesn't matter for the makers of "traditional" DBMSes, because RDBMS business is doing great. &lt;/li&gt;&lt;li&gt;Sub-question: &lt;span style="font-weight: bold; font-style: italic;"&gt;Why do web start-ups seem to make use of key-value stores, and not use Oracle&lt;/span&gt;&lt;span style="font-style: italic;"&gt;'s DBMS (for example) when they need to scale to beyond a single data server?&lt;/span&gt; There wasn't much opposition to the view that—in addition to being administration labor intensive—the cost of an Oracle cluster is way out of budget in many businesses. So: If database researchers want to help prevent relational+transactional research from becoming increasingly irrelevant, it's time to help the open source database projects. While I agree that researchers can make a difference in the open source world, but I's skeptical to the perception of RDBMSes being abandoned; whatever numbers I've seen actually indicate the opposite. And while Facebook—for example—has a key-value store, their non-clickstream-data is actually in sharded MySQL databases, as far as I've heard; sharded MySQLs will never win relational database beauty contests, but at least it's tabular data, accessible with SQL, and with node-local transactions. &lt;/li&gt;&lt;li&gt;Interesting point: SAP, an application with undisputed business significance, is well known for using nothing but the most basic RDBMS features. With that in mind, one should be cautious to denounce cloud databases for lack of expressiveness.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Finally, a couple of pictures from the nearby Tête d'Or Park:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ySR6zPxLIoY/SpxKGE0r_6I/AAAAAAAAABw/nyFvTojo1Os/s1600-h/lyon-garden.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_ySR6zPxLIoY/SpxKGE0r_6I/AAAAAAAAABw/nyFvTojo1Os/s320/lyon-garden.jpg" alt="" id="BLOGGER_PHOTO_ID_5376253523407929250" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ySR6zPxLIoY/SpxKhQHFK9I/AAAAAAAAAB4/siqs0NZFtC8/s1600-h/lyon-lake.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_ySR6zPxLIoY/SpxKhQHFK9I/AAAAAAAAAB4/siqs0NZFtC8/s320/lyon-lake.jpg" alt="" id="BLOGGER_PHOTO_ID_5376253990294334418" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-7953448495503124860?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/7953448495503124860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=7953448495503124860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/7953448495503124860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/7953448495503124860'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/08/vldb2009-sloppy-by-choice.html' title='VLDB2009: Sloppy by choice'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ySR6zPxLIoY/SpxKGE0r_6I/AAAAAAAAABw/nyFvTojo1Os/s72-c/lyon-garden.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-2521557112656962571</id><published>2009-08-28T00:58:00.008+02:00</published><updated>2009-08-31T19:50:23.857+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='benchmarking'/><category scheme='http://www.blogger.com/atom/ns#' term='VLDB'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>VLDB2009: TPC Workshop</title><content type='html'>Monday, I attended the Transaction Processing Council (TPC) &lt;a href="http://www.tpc.org/tpctc2009/"&gt;Workshop&lt;/a&gt; about the latest developments in database benchmarks. The workshop was kicked off with a keynote from a true database hero, &lt;a href="http://eecsfacweb.mit.edu/facpages/stonebraker.html"&gt;Michael Stonebraker&lt;/a&gt;. Mr. Stonebraker has not only published significant research papers—he is also initiated a number of projects and startups: Postgres (the precursor to the great &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; DBMS), &lt;a href="http://www.vertica.com/"&gt;Vertica&lt;/a&gt; (one of the pioneers within the "&lt;a href="http://en.wikipedia.org/wiki/Column-oriented_DBMS"&gt;column-oriented&lt;/a&gt;"/"column-store" database realm), &lt;a href="http://www.streambase.com/"&gt;StreamBase&lt;/a&gt;, and others. Stonebraker held it that benchmarks have been instrumental in increasing competition among vendors, but there are aspects to be aware of: As the benchmarks allow the vendors to tune the DBMS (and sometimes create setups not resembling most setups, like using five figure disk counts), this doesn't improve the out-of-box experience—an experience which all too often needs to be significantly tweaked. Stonebraker also criticized the TPC from being too vendor focused, instead of having focus on users and (simple) applications. And he urged the TPC to speed up the development of new benchmark types (I'm thinking: geospatial, recovery, ...), partly by cutting down on organizational politics.&lt;br /&gt;&lt;br /&gt;Personally, I'm astonished that some (most?) of the big DBMS vendors prohibit their users from publishing performance findings. This curbs discussion among practitioners, and it decreases reproducibility and detail of research papers ("product A performed like this, product B performed like that"). I doubt that this actually holds in a court of law, but it would certainly take guts (and a big wallet) to challenge it. I'm also annoyed that the vendors don't really support the TPC much: The &lt;a href="http://tpc.org/tpce/"&gt;TPC-E&lt;/a&gt; benchmark (OLTP-benchmark, sort-of modernized version of &lt;a href="http://tpc.org/tpcc/"&gt;TPC-C&lt;/a&gt;) is two years old, yet only one vendor (Microsoft) has published any results yet.&lt;br /&gt;&lt;br /&gt;Nevertheless, references to TPC benchmarks were prevalent at the conference, being referred to in several papers.&lt;br /&gt;&lt;br /&gt;I'm planning to try running &lt;a href="http://tpc.org/tpch/"&gt;TPC-H&lt;/a&gt; on our most important database systems, to see if it is feasible to use it for regular performance measurements—in order to become aware of performance pro-/re-gressions. By the way: It would be of great if IBM (and others) published a table of reference DB2 TPC findings for a variety of normal hardware configurations. That way, a DBA like me could get an indication of whether I've set up our systems properly.&lt;br /&gt;&lt;br /&gt;Other speakers had various ideas for new benchmarks, including benchmarks which measure performance per kWh, and benchmarks which expose how well databases handle error situations.&lt;br /&gt;&lt;br /&gt;A researcher from VMWare pledged for benchmarks of databases running in virtual environments. He presented some numbers of a TPC-C-like workload running on ESX guests, showing that a DBMS (MSSQL, I believe) can be set up to run at 85%-92% of the native speed. Certainly acceptable. And much in like with what I'm experiencing. I hope that figures like this can gradually kill the myth that DBMSes shouldn't run in virtual hosts—a myth which results in a situation where many organizations don't realize the full potentials of virtualization (increased overall hardware utilization/lower need for manpower/less late-night service windows, as workloads can be switched to other hosts when a server needs hardware service).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ySR6zPxLIoY/SpcVQt6GdiI/AAAAAAAAABY/V61PU-7WeWY/s1600-h/troels_being_sceptical.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 178px; height: 200px;" src="http://2.bp.blogspot.com/_ySR6zPxLIoY/SpcVQt6GdiI/AAAAAAAAABY/V61PU-7WeWY/s200/troels_being_sceptical.jpg" alt="" id="BLOGGER_PHOTO_ID_5374788057235355170" border="0" /&gt;&lt;/a&gt;I forgot to take a picture from the workshop, so here's a picture of me being sceptical about traditional DBMS vendors—next to the Saôme river.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-2521557112656962571?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/2521557112656962571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=2521557112656962571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/2521557112656962571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/2521557112656962571'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/08/vldb2009-tpc-workshop.html' title='VLDB2009: TPC Workshop'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ySR6zPxLIoY/SpcVQt6GdiI/AAAAAAAAABY/V61PU-7WeWY/s72-c/troels_being_sceptical.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-2827238743892514761</id><published>2009-08-28T00:45:00.005+02:00</published><updated>2009-08-28T00:57:51.760+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VLDB'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>At VLDB2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ySR6zPxLIoY/SpcPZo2LRKI/AAAAAAAAABQ/7IbZmVwT5ME/s1600-h/10yearbestpaper.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_ySR6zPxLIoY/SpcPZo2LRKI/AAAAAAAAABQ/7IbZmVwT5ME/s200/10yearbestpaper.jpg" alt="" id="BLOGGER_PHOTO_ID_5374781613425771682" border="0" /&gt;&lt;/a&gt;I'm attending the 35th &lt;a href="http://vldb.org/"&gt;VLDB&lt;/a&gt; conference in Lyon: &lt;a href="http://vldb2009.org/"&gt;VLDB2009&lt;/a&gt;. The conference portrays itself as the premier international forum for database researchers, vendors, practitioners, application developers, and users. Of the 700 people (from 44 countries), I'm one of the few practitioners at the conference; and though there's a risk that the conference will be too research oriented, I've signed up, especially hoping to get the latest updates and thoughts on&lt;br /&gt;&lt;ul&gt;&lt;li&gt;probabalistic databases&lt;/li&gt;&lt;li&gt;column-oriented databases&lt;/li&gt;&lt;li&gt;performance quantification&lt;/li&gt;&lt;li&gt;cloud databases&lt;/li&gt;&lt;/ul&gt;During the next couple of days, I'll share my experiences here.&lt;br /&gt;&lt;br /&gt;I—and others—&lt;a href="http://twitter.com/#search?q=vldb2009"&gt;have tweeted&lt;/a&gt; a bit from the conference, as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-2827238743892514761?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/2827238743892514761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=2827238743892514761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/2827238743892514761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/2827238743892514761'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/08/at-vldb2009.html' title='At VLDB2009'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ySR6zPxLIoY/SpcPZo2LRKI/AAAAAAAAABQ/7IbZmVwT5ME/s72-c/10yearbestpaper.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-7256788064536905424</id><published>2009-08-27T22:05:00.002+02:00</published><updated>2009-08-27T22:14:59.964+02:00</updated><title type='text'>MTU adjustment needed on Orange wifi</title><content type='html'>I'm on the road. On the hotel, there's wifi, provided by Orange (France Télécom). The connection has been strange: Most of the time, I couldn't connect to Facebook and MSN Messenger (XMPP/Jabber connections worked fine, though); SSH connections were also unstable. Finally found out that it helped changing my network settings such that the &lt;span style="font-style: italic;"&gt;MTU&lt;/span&gt; parameter was decreased to 1200.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-7256788064536905424?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/7256788064536905424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=7256788064536905424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/7256788064536905424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/7256788064536905424'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/08/mtu-adjustment-needed-on-orange-wifi.html' title='MTU adjustment needed on Orange wifi'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-2252297359354172256</id><published>2009-05-26T00:47:00.006+02:00</published><updated>2009-12-29T17:03:01.844+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAN'/><category scheme='http://www.blogger.com/atom/ns#' term='storage'/><title type='text'>Storage system experiences</title><content type='html'>&lt;span style="font-size: 130%; font-weight: bold;"&gt;Background&lt;/span&gt;&lt;br /&gt;Some people dislike Storage Area Networks (SANs). This may be due to complexity; and it may be because SAN management is often delegated to a special group of administrators which may then become an organizational bottleneck.&lt;br /&gt;&lt;br /&gt;Personally, I very much &lt;span style="font-style: italic;"&gt;like&lt;/span&gt; SANs. I do &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; miss messing around with disks and cables and enclosures in the server room. In my opinion, the complexity of a SAN is easily balanced out by easy and timely allocation of storage chunks to servers. And as a database administrator, I'm very fond of being able to share RAIDs between several servers, resulting in storage backed by a large amount of spindles. Also, it's nice to be able to monitor I/O activity across a large set of systems.&lt;br /&gt;&lt;br /&gt;At work, we use two different FC SANs. One SAN connects Windows/ESX/Linux Dell servers to a Hitachi AMS500 storage system, while another SAN connects IBM servers to IBM DS4800 controlled storage.&lt;br /&gt;&lt;br /&gt;I've had 2½ years of experience with the IBM storage system which keeps 24TB of data. We've had the AMS500 for ½ a year; it stores around 20TB of data. Both storage systems are configured with RAID5/6 logical drives with varying speed profiles, for different kinds of use patterns.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;GUI management interface&lt;/span&gt;&lt;br /&gt;The GUI management interface for DS4800, &lt;span style="font-style: italic;"&gt;Storage Manager&lt;/span&gt; (SM), is vastly superior to AMS500's &lt;span style="font-style: italic;"&gt;Storage Manager Modular&lt;/span&gt; (SMM). SM lets you assign text lables to your LUs, while SMM only works with numeric LUNs; this means that SM lets you get away with less separately maintained systems documentation. Also, it's much easier to view snapshots of I/O activity in IBMs Storage Manager. And IBMs Storage Manager was very easy to install while Hitachi's Storage Manager Modular required a fair amount of tweaks during installation, due to Java runtime issues (seemingly because Hitachi's software is bundled with an ancient JRE).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Command line interface&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;For both storage systems, the command line tools use rather awkward syntax and calling conventions. I wish that the programmers of these tools would lean more towards modern Linux/unix command line conventions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Health monitoring&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;For both storage systems, you are encouraged to install software which regularly checks storage system health; in case of trouble, it alerts you by e-mail and "phones home" to the respective support organizations. Again, the IBM software is easy to install, while we had problems getting the Hitachi software to install on contemporary server software.&lt;br /&gt;&lt;br /&gt;The AMS500 lets you turn on SNMP, so that you can easily poll for the health of the system from your central monitoring system; nice. DS4800 doesn't seem to offer this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Stability&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;During my 2½ years with the DS4800, we have had three serious breakdowns: Two related to firmware trouble, and one related to a controller hardware defect. This is too much, I think.&lt;br /&gt;We haven't had experienced instability with the AMS500 during the ½ year that we've had it in production.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;UPDATE Dec 2009&lt;/i&gt;: We got our first stability problem with AMS500 &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;:-(&lt;/span&gt;&lt;br /&gt;A misconfigured ESX-cluster generated a large number of I/O requests for a LUN which had been deleted, and the AMS500 started getting periodic absence seizures. In AMS500's defence: Had we been up-to-date with regard to AMS500 firmware, this wouldn't have caused trouble.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Performance&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Benchmarking storage systems is hard, especially because you normally don't have the luxury of being able to shut down all other I/O than that generated by the benchmark. So although I've conducted an extensive set of performance measurements, I can only say that the systems seem to perform equally well.&lt;br /&gt;&lt;br /&gt;One difference, though: Hitachi recommends that you stick with rather narrow RAIDs; if needed, these may then be joined into larger storage areas using a special &lt;span style="font-style: italic;"&gt;LUSE&lt;/span&gt; feature, or using logical volume management at the hosts. This is somewhat annoying: We would generally like to have wide RAIDs comprising a large number of spindles; AMS500 makes it a bit more complicated to meet this goal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Price&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;At the time of our AMS500 acquisition, Hitachi's storage system was substantially less expensive than IBMs comparable offerings. The comparison may be a bit unfair, though, because our procurement is tightly controlled by government procurement contracts.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Support&lt;/span&gt;&lt;br /&gt;We haven't used IBMs support offerings much, because we have historically used consultants from an IBM partner for support of our DS4800. But, regarding software and documentation, IBMs support is mostly very good: It's easy to download updates for both firmware, management software, and documentation. IBMs documentation of how to use DS4800 multipathing with Linux is inconsistent and confusing, though.&lt;br /&gt;&lt;br /&gt;Hitachi's support is a mixed experience. They have appointed a technician from their Danish office to us, and this works very well: He is easy to get in touch with, and he provides good answers. On the other hand, Hitachi's distribution of software and documentation is &lt;span style="font-style: italic;"&gt;miserable&lt;/span&gt;: The software is hidden behind a confusing extranet, and even after months of mail/phone correspondance with the extranet support (and other parts of Hitachi's organization), we haven't been able to log in and download software or documentation. So we have resorted to ask our tech contact to send us CDs via snail mail once in a while. Another Hitachi annoyance is licence keys: Why on Earth do we need to enter licence keys when installing multipath driver software (on Windows); as if there would ever be a black market for that kind of software. And when the going gets tough in operations (e.g. if a new server needs to be quickly installed after a server breakdown), it's frustrating to have to spend time trying to dig out that CD with licence keys. &lt;span style="font-weight: bold;"&gt;Argh!&lt;/span&gt; What are they thinking?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Multipathing&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Multipathing with the DS4800 works well with Windows and PowerVM servers, but we never got it to work perfect with Linux on Intel. It's strange that IBM puts a significant amount of work into Linux, but still can't make it simple and easy to integrate an important storage product with Linux.&lt;br /&gt;&lt;br /&gt;Multipathing with AMS500 works well (and out of the box) on Linux and ESX if you follow certain conventions (Red Hat &lt;a href="http://kbase.redhat.com/faq/docs/DOC-15393"&gt;knowlegebase article&lt;/a&gt;; Hitachi ESX &lt;a href="http://www.hds.com/assets/pdf/vmware-multipathing-recommendations-for-hitachi-modular-storage-systems.pdf"&gt;configuration document&lt;/a&gt;). However, Hitachi's Windows HDLM drivers have trouble discovering new LUs, resulting in the need for several reboots when a new LU is mapped to a Windows host; when the discovery is up and running, things work fine with Windows, too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Overall experiences&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pro IBM: Good management software, simple distribution of software and documentation.&lt;br /&gt;Con IBM: Hich price. More breakdowns than should be expected, I think.&lt;br /&gt;&lt;br /&gt;Pro Hitachi: Good price, good stability so far.&lt;br /&gt;Con Hitachi: Bad management software, very bad distribution of software and documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-2252297359354172256?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/2252297359354172256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=2252297359354172256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/2252297359354172256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/2252297359354172256'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2009/05/storage-system-experiences.html' title='Storage system experiences'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-4128487131668597673</id><published>2008-10-24T00:51:00.004+02:00</published><updated>2009-05-26T20:21:10.347+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlpage'/><category scheme='http://www.blogger.com/atom/ns#' term='Informix'/><title type='text'>SQL comparison updates: Informix, JDBC</title><content type='html'>A reader of my &lt;a href="http://troels.arvin.dk/db/rdbms/"&gt;SQL implementation comparison page&lt;/a&gt; suggested that I keep a change log for the page. Currently, I don't want to keep a detailed log, but I'll add blog posts here when I've made changes which are somewhat significant, tagging the posts 'sqlpage'.&lt;br /&gt;&lt;br /&gt;Today, I added a new section related to JDBC, because I'm tired of having to spend time looking up details like JDBC driver names and connection URLs in manuals. (I don't work much with Java, so I keep forgetting where to find this stuff when I need it.) The section is far from complete.&lt;br /&gt;&lt;br /&gt;I also started coverage of the Informix database, as I've recently become responsible for an important Informix database at work. Informix was once a very important player in the database game, but the story goes that the Informix company suddenly started getting managed very badly -- and at some point IBM bought Informix. Since then, IBM's strategy for Informix has been rather unclear. I have a personal, very weakly founded theory: I think IBM is positioning Informix as the place where the exciting new developments happen first; and when the new features are known to work well, they are introduced to DB2. This may not be a bad role for Informix.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-4128487131668597673?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/4128487131668597673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=4128487131668597673' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/4128487131668597673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/4128487131668597673'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/10/sql-comparison-updates-informix-jdbc.html' title='SQL comparison updates: Informix, JDBC'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-8165354742385839032</id><published>2008-10-15T22:51:00.003+02:00</published><updated>2008-10-15T23:42:36.207+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Flash 10</title><content type='html'>Adobe released generation 10 of its Flash player software today.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Good&lt;/span&gt;:&lt;br /&gt;Adobe provides a "&lt;a href="http://yum.baseurl.org/"&gt;yum&lt;/a&gt;" channel for the Flash player, so my PCs were automatically updated. This is nice and &lt;span style="font-style: italic;"&gt;responsible&lt;/span&gt;: Many security problems on home computers are actually due to 3rd party software which isn't automatically patched when the user performs a base system update. After fixing a problem (see below), Flash 10 seemed to run fine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bad&lt;/span&gt;:&lt;br /&gt;Unfortunately, Adobe still doesn't seem to provide x86_64 versions of the player. And consequently, 64-bit PCs need to have a bunch of -- otherwise irrelevant -- compatibility software installed. The need to maintain parallel 32 and 64 software worlds can also be tricky.&lt;br /&gt;&lt;br /&gt;I wonder what's keeping Adobe from making life a little bit easier for users by adding a 64-bit download option. Which reminds me that it's probably time to take a closer look at the &lt;a style="font-style: italic;" href="http://research.sun.com/projects/lively/"&gt;The Lively Kernel&lt;/a&gt; and &lt;a style="font-style: italic;" href="http://www.mono-project.com/Moonlight"&gt;Moonlight&lt;/a&gt; soon.&lt;br /&gt;&lt;br /&gt;Flash 10 systematically crashed on my home PC, until I added a 32-bit curl package to the system (Flash 10 seems to link to libcurl -- something that earlier versions didn't). Strangely, the Flash RPM package doesn't carry a dependency for libcurl, although it's clearly needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-8165354742385839032?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/8165354742385839032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=8165354742385839032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/8165354742385839032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/8165354742385839032'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/10/flash-10.html' title='Flash 10'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-8775069101516275812</id><published>2008-10-09T23:17:00.004+02:00</published><updated>2008-10-15T01:13:44.743+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>DB2 lets you drop a parent table</title><content type='html'>DB2 is usually a rather strict database system: It doesn't allow you to drop a procedure which is being used by a function. It uses pessimistic locking. It typically forces you to back up a tablespace if you aggressively load data into a table if the database isn't using circular logging. Etc.&lt;br /&gt;&lt;br /&gt;So I found it surprising that &lt;span style="font-weight: bold;"&gt;it allows you to drop a table which is being referred to in a foreign key&lt;/span&gt;. DB2 doesn't even warn you about the fact that the child table(s) have lost a potentially important constraint. That's evil.&lt;br /&gt;&lt;br /&gt;I know of no other DBMS which lets you do drop a parent table: PostgreSQL refuses it (unless you add a CASCADE option to the DROP statement), MSSQL refuses it. Not even MySQL lets you do it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;As always, MySQL has little surprises:&lt;br /&gt;&lt;pre&gt;CREATE TABLE child (&lt;br /&gt;   child_id INT NOT NULL,&lt;br /&gt;   parent_id INT NOT NULL,&lt;br /&gt;   whatever VARCHAR(50) NOT NULL,&lt;br /&gt;   PRIMARY KEY(child_id,parent_id),&lt;br /&gt;   CONSTRAINT child_fk FOREIGN KEY (parent_id) REFERENCES parent&lt;br /&gt;);&lt;br /&gt;ERROR 1005 (HY000): Can't create table './test/child.frm' (errno: 150)&lt;/pre&gt;&lt;br /&gt;So what is the reason behind that confusing error message (which also qualifies as evil)? -- "REFERENCES parent" must be explicit: "REFERENCES parent(parent_id)"...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-8775069101516275812?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/8775069101516275812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=8775069101516275812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/8775069101516275812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/8775069101516275812'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/10/db2-lets-you-drop-parent-table.html' title='DB2 lets you drop a parent table'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-4393130867503016502</id><published>2008-10-06T21:13:00.004+02:00</published><updated>2009-10-04T23:31:20.807+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>Recursive SQL, soon also in PostgreSQL</title><content type='html'>SQL:1999-style recursive SQL &lt;a href="http://www.postgresql.org/community/weeklynews/pwn20081005"&gt;has been added&lt;/a&gt; to the development version of PostgreSQL. Consequently, soon, three DBMSes (DB2, MSSQL, PostgreSQL) will be supporting the "WITH [RECURSIVE]" construct. Recursive SQL is becoming mainstream. (Oracle also has recursive SQL, but implemented in a limited and non-standard way.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-4393130867503016502?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/4393130867503016502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=4393130867503016502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/4393130867503016502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/4393130867503016502'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/10/recursive-sql-soon-also-in-postgresql.html' title='Recursive SQL, soon also in PostgreSQL'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-2949430357919053397</id><published>2008-10-04T19:38:00.016+02:00</published><updated>2008-10-27T23:47:43.497+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='open source days 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Open Source Days 2008, Saturday</title><content type='html'>&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ySR6zPxLIoY/SOfGUlwwDGI/AAAAAAAAAAw/F2-qva9cXGc/s1600-h/DSC00081.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_ySR6zPxLIoY/SOfGUlwwDGI/AAAAAAAAAAw/F2-qva9cXGc/s320/DSC00081.JPG" alt="" id="BLOGGER_PHOTO_ID_5253385547387243618" border="0" /&gt;&lt;/a&gt;Today was actually a work day for me, as we carried out a major service window. Fortunately, my duties during the service window were limited, so I managed to sneak over and attend a few sessions at &lt;a href="http://www.opensourcedays.org/2008/"&gt;Open Source Days&lt;/a&gt; while waiting for some SAN and operating system patches to be applied by co-workers.&lt;br /&gt;&lt;br /&gt;I attended the last half of Jan Wieck's &lt;a href="http://www.opensourcedays.org/2008/agenda/sessions/JanWieck.shtml"&gt;talk&lt;/a&gt; about &lt;a style="font-style: italic;" href="http://www.slony.info/"&gt;Slony-I&lt;/a&gt; (not "Slony-l", as written in the conference agenda). Slony-I is an asynchronous master-slave replication program for the &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; database management system. Unfortunately, I don't work much with PostgreSQL in my current job, but if I did, I'd certainly try out Slony-I. It can be useful for scalability (think: read-only database slaves in a CMS cluster) and continuous backup to an offline location. It can also be used when upgrading PostgreSQL, resulting in close to zero down time, because Slony-I can (to a certain degree) replicate between different PostgreSQL versions. Slony-I has some rather impressive replication routing features, so that you have have master-&gt;slave-&gt;slave-&gt;slave.&lt;br /&gt;&lt;br /&gt;This talk was an example of why I like participating in conferences with open source focus: Jan was very clear about Slony-I's limitations and weaknesses -- contrary to some corporate guy who might not be lying, but who might be suppressing unfortunate facts. Slony-I has a number of weak points: It's rather complex to install, configure, and manage. And the current version 1 does some dirty tricks with the system schema (will be cleaned up in version 2).&lt;br /&gt;&lt;br /&gt;Jan once had a plan for multi-master replication in Slony-I, but that idea has been dropped for now. Fine with me: Although it sounds cool, I would have a hard time trusting such a feature anyway, thinking about the implementation complexity it would entail.&lt;br /&gt;&lt;br /&gt;Next, &lt;a href="http://www.hagander.net/"&gt;Magnus Hagander&lt;/a&gt; spoke about &lt;a href="http://www.opensourcedays.org/2008/agenda/sessions/MagnusHagander.shtml"&gt;&lt;span style="font-style: italic;"&gt;Hidden gems of PostgreSQL&lt;/span&gt;&lt;/a&gt;. Magnus works at &lt;a href="http://redpill.se/"&gt;Redpill&lt;/a&gt; who provides 24x7 PostgreSQL support (among a number of other services). As far as I know, Redpill has recently opened an office in Denmark -- which means that it's now possible to sign up for local PostgreSQL support in our little pond.&lt;br /&gt;&lt;br /&gt;Magnus went through a few selected PostgreSQL features, meaning that he had the time to explain them properly:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;DDL operations (such as dropping a table) are transactional PostgreSQL. Magnus presented this as a rather exclusive feature which few other DBMSes have. Actually, DB2 has the feature, and it's a mixed blessing: Transactions are a tremendously handy and time-saving feature, including transactional DDL. But if DDLs are transactional, it also means that a user with very low privileges can lock the system catalog by performing a DDL and not committing -- meaning that other users (potentially equipped with loads of high permissions) are blocked from completing DDL operations. I assume that PostgreSQL's transactional DDL suffers from the same drawback(?) By the way, Magnus pointed out a serious drawback with performing DDLs in some other DBMSes that don't have transactional DDL: They may carry out an implicit commit when a DDL statement is executed; this leaves potential for rather uncomfortable situations.&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Update, Monday, Oct 6: PostgreSQL doesn't suffer from the problem described above for DB2.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PostgreSQL now has built-in full text indexing (FTI), based on a somewhat cleaned up version of "Tsearch2" which used to be an add-on to PostgreSQL. The FTI can be been used in a simple way, but you can also configure it in very specific and powerful ways, using language specific dictionaries and/or specialized parsers and stemmers.&lt;/li&gt;&lt;li&gt;Finally, Magnus when through a few of the packages in PostgreSQL's "contrib" add-on. The crypto add-on is something, I'd much like to have in DB2.&lt;/li&gt;&lt;/ul&gt;After the talks, I went to the &lt;a href="http://sslug.dk/"&gt;SSLUG&lt;/a&gt; booth to have a look at the &lt;a href="http://www.version2.dk/artikel/8585"&gt;extremely small PC&lt;/a&gt; which was on display there. Fascinating stuff. I really like the trend towards down-scaled and cheaper PCs, exemplified also by the &lt;a href="http://eeepc.asus.com/global/"&gt;EEE&lt;/a&gt; (which were everywhere at the conference). At the booth, I had a chat with Phillip S. Bøgh who told me that for a typical desktop PC, 81% of its energy consumption actually happens during production, long before it's sold to the customer. The corollary is that there is value in keeping old hardware alive, instead of buying new equipment whenever some large software company decides to try to force us to buy new products featuring new heights of bloat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-2949430357919053397?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/2949430357919053397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=2949430357919053397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/2949430357919053397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/2949430357919053397'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/10/open-source-days-2008-saturday.html' title='Open Source Days 2008, Saturday'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ySR6zPxLIoY/SOfGUlwwDGI/AAAAAAAAAAw/F2-qva9cXGc/s72-c/DSC00081.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-8861790145178831169</id><published>2008-10-04T00:04:00.004+02:00</published><updated>2008-10-10T11:33:36.211+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadm'/><category scheme='http://www.blogger.com/atom/ns#' term='open source days 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Open Source Days 2008, Friday</title><content type='html'>For several years, there has been an annual two-day open source conference in Denmark. It has had different names in the past ("Linux 98", "Open Networks 99", "Linuxforum 200{0,2,3,4,5,6,7}"), but nowadays, it's called "&lt;a href="http://www.opensourcedays.org/"&gt;Open Source Days&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;I've attended the conference almost every year. This year is no exception, although I may miss out on most of the Saturday talks.&lt;br /&gt;&lt;br /&gt;Here are my notes from Friday.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://www.opensourcedays.org/2008/agenda/sessions/SimonJosefsson.shtml"&gt;&lt;span style="font-style: italic;"&gt;OpenID&lt;/span&gt;&lt;/a&gt;, by &lt;a href="http://josefsson.org/"&gt;Simon Josefsson&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;Users of authentication-requiring web applications normally have an unfortunate choice: Use one or two passwords at all web sites, or store passwords in the local browser or a local password "wallet". The first option is clearly not attractive, because a rogue web site administrator could be using your credentials to log in as you on other web sites. The second option is troublesome if you use several PCs, or if your PC is stolen (workstations are often not regularly backed up). &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt; brings a good solution to this dilemma: Create an account at an OpenID provider which you choose to trust (I use &lt;a href="https://www.myopenid.com/"&gt;myOpenId&lt;/a&gt;, currently). Then, you can use that account at all sites supporting OpenID logins (several weblog sites, &lt;a href="http://www.plaxo.com/"&gt;Plaxo&lt;/a&gt;, &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;, etc). OpenID can also make life easier for web site developers.&lt;br /&gt;&lt;br /&gt;Simon Josefsson went through the OpenID protocol, superficially (time was limited). In a comparison with other authentication systems, he noted that OpenID is based on a voluntary trust relationship between website and authenticator, in contrast with--e.g.--&lt;a href="http://en.wikipedia.org/wiki/SAML"&gt;SAML&lt;/a&gt;. OpenID can only be used in a web context. All in all, OpenID is a rather simple and light-weight protocol.&lt;br /&gt;&lt;br /&gt;The main potential security problem with OpenID is phishing, but Simon noted that this is a problem with other systems as well: Even though the system may use non-web-browser password dialogs, such dialogs can be rather closely mimicked using Flash. The most effective solution to the phishing threat is to avoid relying (exclusively) on passwords, through SMS-based one-time codes, one-time code dongles, etc. Simon's company produces an elegant, small USB device which emulates USB keyboards; when you press a button on the device, a long password is emitted. In combination with an encryption system, this results in very secure authentication.&lt;br /&gt;&lt;br /&gt;Where I work, we face an identity handling challenge: We need to have the authenticator convey a list of group memberships for an account to the web application. OpenID has deliberately been kept simple, so there is no dedicated solution for that. But Simon noted that OpenID 2 includes an assertion mechanism which can--in priciple--be used to communicate any kind of attribute about a user to a web-site.&lt;br /&gt;Unfortunately, we can't really use OpenID for the before mentioned challenge, but I would certainly look at OpenID if I were to implement an authentication system elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;a style="font-style: italic;" href="http://www.opensourcedays.org/2008/agenda/sessions/NigelKersten.shtml"&gt;Using Puppet to manage Linux and Mac platforms in an enterprise environment&lt;/a&gt;, by &lt;a href="http://explanatorygap.net/"&gt;Nigel Kersten&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;Ever since I heard a recent &lt;a href="http://itc.conversationsnetwork.org/shows/detail3716.html"&gt;interview with Luke Kanies&lt;/a&gt;, I've wanted to know more about &lt;a href="http://reductivelabs.com/trac/puppet/"&gt;Puppet&lt;/a&gt;. Luke has an interestering statement about system administrators: Sysadmins need to move to a higher level, by adopting some of the methology used in software development. This relates to version control, traceability, abstraction, and code reuse. I very much agree on this.&lt;br /&gt;&lt;br /&gt;Without having personally tried Puppet yet, I think it's somewhat fair to characterize as a modern &lt;a href="http://www.cfengine.org/"&gt;cfengine&lt;/a&gt;, and as the unix-world's version of the Microsoft-world's SMS-tool (SMS having better reporting facilities, while Puppet probably has better scripting features). Puppet has gained a lot of attention in Linux and Mac sysadm circles, lately. Kersten is part of a team managing more than 10000 Linux and Mac internal workstations at Google.&lt;br /&gt;&lt;br /&gt;Puppet is written in the Ruby programming language. So it was reassuring to hear that Nigel Kersten is "a Python guy": Puppet is not just being hyped as an example of an Ruby implementation.&lt;br /&gt;&lt;br /&gt;Random notes from the talk: I learned that Puppet can actually work offline: Many rules will work without network dependencies. And it seems that Puppet can be a good way to implement local adjustments to software packages without having to mess around with local re-packaging. Puppet goes out of its way to avoid adjusting configuration files if there is no need (nice: that way, file mtimes don't mysteriously change without file content changes). Unfortunately, it sounds like there are issues to be worked out regarding Puppet installations on workstations where SELinux is in enforcing mode.&lt;br /&gt;&lt;br /&gt;Nigel has heard from no one with personal experiences getting Puppet running on AIX. And as we are (for better or for worse) using AIX on the majority of unix installations where I work, I probably can't justify fiddling with Puppet, currently.&lt;br /&gt;&lt;br /&gt;By the way: RedMonk has a podcast where Nigel Kersten &lt;a href="http://www.redmonk.com/cote/2008/06/11/puppet-at-google-redmonk-radio-episode-48/"&gt;is interviewed&lt;/a&gt;. (RedMonk's podcasts generally have too much random chit-chat for my taste, but this interview is actually good, as far as I remember).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;PostgreSQL&lt;/span&gt;&lt;br /&gt;During a lunch break, I had a talk with &lt;a href="http://www.hagander.net/"&gt;Magnus Hagander&lt;/a&gt; at &lt;a href="http://www.blogger.com/Redpill"&gt;Redpill&lt;/a&gt;'s excibition booth. Magnus Hagander is one of the developers of my favorite database system, &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;. PostgreSQL is generally being very conservative/unaggressive by default, in order to be a good citizen on any server installation. But often, the administrator of a PostgreSQL installation actually wants it to be very aggressive. I asked Magnus Hagander for a list of top-three PostgreSQL parameters he generally adjusts in PostgreSQL installations. His answer: shared buffers, work mem, checkpoint segment (and effective cache size).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://www.opensourcedays.org/2008/agenda/sessions/KrisBuytaert.shtml"&gt;&lt;span style="font-style: italic;"&gt;Open Source Virtualization, an Overview&lt;/span&gt;&lt;/a&gt;, by &lt;a href="http://krisbuytaert.be/"&gt;Kris Buytaert&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;I've been using &lt;a href="http://www.xen.org/"&gt;Xen&lt;/a&gt; virtualization for a while, both at home and at work. And I regularly touch IBM's Advanced POWER Virtualization as well as VMWare ESX. In other words, I'm interested in virtualization, not just from a theoretical perspective.&lt;br /&gt;&lt;br /&gt;So I went to Kris Buytaert for an update of the status of open source virtualization technologies. Kris Boytaert went through the history of open source virtualization. He listed three virtualization products which he currently recommends: Xen for servers, &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; for desktops, and &lt;a href="http://linux-vserver.org/"&gt;Linux-VServer&lt;/a&gt; for mass hosting of web-servers. And he mentioned the &lt;a href="http://www.openqrm.org/"&gt;openQRM&lt;/a&gt; solution which can be used for setting up a local cloud, as far as I understood. He had some surprising statements: If you have the choice between full, &lt;a href="http://en.wikipedia.org/wiki/X86_virtualization#Hardware_support"&gt;VT&lt;/a&gt;-based virtualization and &lt;a href="http://en.wikipedia.org/wiki/Paravirtualization"&gt;paravirtualization&lt;/a&gt;, then go for paravirtualization, for performance reasons. Live migration is of little practical use (contrary to experiences where I work). It sounded like Kris is somewhat skeptical with regard to &lt;a href="http://kvm.qumranet.com/"&gt;KVM&lt;/a&gt;; on the other hand, Kris described how Xen has been moving further and further away from the open source world, ever since it was bought by Citrix (Citrix: How can you let this slip away?)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://www.opensourcedays.org/2008/agenda/sessions/Poul-HenningKamp.shtml"&gt;&lt;span style="font-style: italic;"&gt;Best practices&lt;/span&gt;&lt;/a&gt;, by &lt;a href="http://people.freebsd.org/%7Ephk/"&gt;Poul-Henning Kamp&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;best practice&lt;/span&gt; concept is starting to annoy me. I've often heard obviously stupid solutions being motivated by "but that's best practice!"; the statement is often heard from someone with highly superficial knowledge about the related field. Recently, &lt;a href="http://wedonotuse.blogspot.com/"&gt;Mogens Nørgaard&lt;/a&gt; had some &lt;a href="http://www.crn.dk/index.php/news/video/id=27786"&gt;good comments&lt;/a&gt; about the phenomenon in his video column (in Danish only).&lt;br /&gt;&lt;br /&gt;In his talk, Poul-Henning was also skeptical about the &lt;span style="font-style: italic;"&gt;best practice&lt;/span&gt; term. He joked about people asking for operations to be done in a way which is "best practice, or better!". Apart from that, Poul-Henning went through various recommendations for programmers, C-programmers in particular: Do use assertions, and don't compile them away. Use code generation when possible. Print out your code, zoomed out to fit in few pages; surprisingly, that can reveal patterns in your code which you didn't realize. Use lints and other code checkers, and try compiling your code with different compilers on different platforms. Certainly good advice, but the talk left me wondering: How about changing to a programming language with better type safety, instead of all the band-aids? (I believe that Poul-Henning once touched upon this in another context, basically stating that C is the only realistic language for a systems programmer, for various reasons.)&lt;br /&gt;&lt;br /&gt;Many people have high regard for Poul-Henning, the coder. At this talk, however, the loudness of the applauses were in the guru-admiration league. --Which was a bit out of proportion for the talk, in my opinion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-8861790145178831169?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/8861790145178831169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=8861790145178831169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/8861790145178831169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/8861790145178831169'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/10/open-source-days-2008-friday.html' title='Open Source Days 2008, Friday'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-216386549509597452</id><published>2008-10-01T23:00:00.013+02:00</published><updated>2008-10-03T22:10:06.860+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel computing'/><category scheme='http://www.blogger.com/atom/ns#' term='JAOO'/><category scheme='http://www.blogger.com/atom/ns#' term='robotics'/><category scheme='http://www.blogger.com/atom/ns#' term='paradigm of the week'/><title type='text'>JAOO 2008, Wednesday</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Everything is dead and crap -- but here comes DCI&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://users.rcn.com/jcoplien/"&gt;James O. Coplien&lt;/a&gt; held a talk called &lt;a style="font-style: italic;" href="http://jaoo.dk/presentation/Not+your+Grandfather%27s+Architecture%3A+Taking+Architecture+into+the+Agile+World"&gt;Not your Grandfather's Architecture: Taking Architecture into the Agile World - take 2&lt;/a&gt;. The talk was highly unstructured, but entertaining. James declared a lot of concepts to be crap and/or dead, such as runtime-polymorphism, class diagrams, Java, and aspect orientation. E.g., class diagrams was declared waste of time, because the end user doesn't care about classes -- however, object diagrams were somehow very good (do users care about objects?). Much of the criticism was highly appropriate, but unclearly motivated. Next, James described a paradigm which was described as brand new, and as the way to "save" object orientation: &lt;a href="http://heim.ifi.uio.no/%7Etrygver/themes/babyide/babyide-index.html"&gt;DCI&lt;/a&gt;, short for Data, Context, Interaction. The paradigm was illustrated through C++ code examples, and seemed to rely on a special way of combining C++ class templates with multiple inheritance -- mixins, effectively. The goal of the new paradigm is allegedly to increase code readability. However confusingly the concepts were illustrated, I left with a feeling DCI may actually be something we will see more of.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;WeDo&lt;/span&gt;&lt;br /&gt;Next, I went to a &lt;a href="http://jaoo.dk/presentation/LEGO+Develops+a+new+robotics+platform+WeDo"&gt;session&lt;/a&gt; about Lego's new &lt;a href="http://www.lego.com/education/"&gt;WeDo&lt;/a&gt; product, presented in a clear and inspiring way by Eik Thyrsted Brandsgård. WeDo is a robotics Lego product, like Lego's &lt;a href="http://mindstorms.lego.com/"&gt;Mindstorms NXT&lt;/a&gt;. It will be available next year. WeDo has connections to the &lt;a href="http://laptop.org/"&gt;OLPC&lt;/a&gt; project; consequently, Lego has put an effort into making the product inexpensive. WeDo is also targeted at an audience younger than that of NXT, i.e. age 7+. Surprisingly, the presentation contained a lot of idealistic statements - and it was quite convincing: Through world-wide Lego robotics-competitions, kids may have a chance to become fans of technically creative peers -- instead of the teen-band of the year (my interpretation). And due to being affordable, WeDo may reach to a large number of schools and end-users, triggering creativity. Several components of WeDo are open source. Apart from that, Eik described Lego's development model where they take advantage of having partners world wide: A new idea is spawned in Denmark in the morning and made ready for consumption by software developers in the US. When the Danes go home, the Americans spend the day implementing it. Finally, the implementation is sent to the QA people in India. And the cycle starts over. In other words: Lego isn't just outsourcing for financial reasons. The talk was highly refreshing: Instead of paradigm/architecture name dropping (which some of JAOO's other presentations were full of), this was a talk which actually gave a strong urge to write some code! (My son will actually turn seven, soon...)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The Lively Kernel&lt;/span&gt;&lt;br /&gt;Before &lt;a href="http://en.wikipedia.org/wiki/Dan_Ingalls"&gt;Dan Ingalls&lt;/a&gt;' talk, &lt;a href="http://jaoo.dk/presentation/The+Lively+Kernel"&gt;&lt;span style="font-style: italic;"&gt;The Lively Kernel&lt;/span&gt;&lt;/a&gt;, I thought that Google's web-based office applications marked the frontier of online web applications. I was wrong. Ingalls performed an hour of outmost sorcery, dragging, dropping, copying and morphing highly live objects around. &lt;a href="http://research.sun.com/projects/lively/"&gt;The Lively Kernel&lt;/a&gt; is a collection of javascript, using &lt;a href="http://en.wikipedia.org/wiki/SVG"&gt;SVG&lt;/a&gt; as "canvas" instead of HTML. Think of the Lively Kernel as Flash, only built on open standards and without the plugin requirement (as long as you use a modern browser). Lively Kernel even includes a browser based development environment (profiler included), and it uses WebDAV for versioning. I wasn't sure if/how Lively Kernel applications can be integrated with existing web pages. If they can't be well integrated, they may suffer from the un-webbiness problem which is discussed in &lt;a href="http://itc.conversationsnetwork.org/shows/detail3712.html"&gt;an episode&lt;/a&gt; of the Stackoverflow podcast series. Looking forward, Ingalls mentioned that online collaboration features are somewhere around the corner. SVG has gained momentum now that most modern browsers support it and Wikipedia has started using it extensively; this could be another move forward. I wonder when Microsoft wakes up and adds built-in SVG support in Internet Explorer. By the way: FLOSS Weekly has an &lt;a href="http://www.twit.tv/floss29"&gt;interview&lt;/a&gt; with Ingalls about the Lively Kernel.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Pattern of boredom&lt;/span&gt;&lt;br /&gt;I'm a big fan of domain specific languages (first and foremost: SQL). So I chose to attend &lt;a style="font-style: italic;" href="http://jaoo.dk/presentation/Patterns+of+Internal+DSLs"&gt;Patterns of Internal DSLs&lt;/a&gt; by &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;. &lt;span style="font-style: italic;"&gt;External&lt;/span&gt; DSLs are like yacc grammars, while &lt;span style="font-style: italic;"&gt;internal&lt;/span&gt; DSLs are DSLs embedded into the host language. The talk seemed to be aimed at the (many) poor people forced to work with a language lacking expressiveness. Although Fowler did mention how some things can be done rather elegantly in Ruby, most of the talk described various ways of twisting and abusing a Java-like language in order to express data in a way where chatty language boiler plate syntax doesn't hide the essence of the data. (This reminds me of &lt;a href="http://itc.conversationsnetwork.org/shows/detail3697.html"&gt;yet another episode&lt;/a&gt; of the Stackoverflow podcast series where Spolsky distinguishes between languages in which you can easily express tree literals, and those where you can't.) I would recommend that Java programmers simply accept some lack of expressiveness and don't spend any time on the kind of DSL hacks which Fowler presented.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Parallel extensions to .Net&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;It's commonly heard that CPUs basically don't grow faster any more, so we need to employ several CPU cores if we want more performance. Natually, this entails that the multiple CPU cores can actually be fed some work -- which can be a serious challenge. In some parts of the IT world, the "parallelization problem" has already been solved: Server-side web applications can easily spread work to several cores, because the work of a web server is inherently concurrent. And SQL databases use a language which is for the most part very declarative, so the better DBMSes are actually able to chunk up work without special effort from the systems developer. But there are other cases where programmers need to implement parallel execution in more or less explicit ways, e.g. in traditional desktop applications, games, and in high-performance computing (HPC). The last JAOO talk I went to was on this subject.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://jaoo.dk/presentation/Concurrent+Programming+with+Parallel+Extensions+to+.NET"&gt;Concurrent Programming with Parallel Extensions to .NET&lt;/a&gt; was a suitable name for &lt;a href="http://www.bluebytesoftware.com/"&gt;Joe Duffy&lt;/a&gt;'s talk. Microsoft is working on making it easy for .Net developers to choose parallel versions of operations and data structures. Joe's talk gave good and comprehensive insight into that. The extensions are not finished yet, but a preview is available from Microsoft's &lt;a href="http://msdn.microsoft.com/en-us/concurrency/"&gt;Parallel Computing Development Center&lt;/a&gt;. However, even after the hard work from Microsoft's developers, parallel .Net will still be very much in the "sharp knives" category, and Joe strongly urged people to get acquainted with &lt;a href="http://haskell.org/"&gt;Haskell&lt;/a&gt; which he described as the One True North in this space (Duffy has a Haskell logo tattooed on his arm). It's always encouraging to hear a Microsoft employee recommend something in the open source world. Even more encouraging was that Joe told me that he'd heard that parallel extensions for .Net has already been committed for the &lt;a href="http://www.mono-project.com/Main_Page"&gt;Mono&lt;/a&gt; project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Conference over&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;That was it for JAOO 2008 (although some people were going to stay for a few more days, for Scrum tutorials). After the last talks, there were &lt;span style="font-style: italic;"&gt;meet the speakers&lt;/span&gt; sessions, but I (and many others) didn't have time for that. Maybe JAOO should arrange meet the speakers sessions every day next year?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-216386549509597452?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/216386549509597452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=216386549509597452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/216386549509597452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/216386549509597452'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/10/jaoo-2008-wednesday.html' title='JAOO 2008, Wednesday'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-7302800420274881568</id><published>2008-09-30T19:31:00.013+02:00</published><updated>2008-10-03T19:31:36.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='JAOO'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>JAOO 2008, Tuesday</title><content type='html'>Today, at &lt;a href="http://jaoo.dk/conference/"&gt;JAOO&lt;/a&gt;, I attended sessions related to architecture, REST, and network databases.&lt;br /&gt;&lt;br /&gt;For the record, I should state that I have strong distaste for the &lt;span style="font-style: italic;"&gt;software architecture&lt;/span&gt; / &lt;span style="font-style: italic;"&gt;architect&lt;/span&gt; terms. In my opinion, &lt;span style="font-style: italic;"&gt;software architecture&lt;/span&gt; is a muddy buzzword, just like the &lt;span style="font-style: italic;"&gt;architect&lt;/span&gt; title seems to cover a suspiciously broad category of profiles (Buzzword manager? Very experienced developer? Software development project manager?) I remember a recruiting conference where a company was hiring graduates for architect positions; if the &lt;span style="font-style: italic;"&gt;architect&lt;/span&gt; title can include people without any experience at all, then it's void of meaning. Anyways, one should be open minded, so I decided to attend selected talks on the architecture track.&lt;br /&gt;&lt;br /&gt;Frank Buschmann held a talk about &lt;a href="http://jaoo.dk/presentation/Architecture+Reviews"&gt;architecture reviews&lt;/a&gt;. Buschmann has several good points, although they would probably hold for just about any review situation. A point was that an architecture reviewer should keep a neutral approach towards the development team; this certainly sounds like a good idea. &amp;lt;rant&amp;gt;However, one of Frank's war stories included a tale of how he had once used a special strategy to convince a team that they should stop being critical about a development framework which had been forced upon them. Is that being neutral?&amp;lt;/rant&amp;gt; Performing an architecture review sounds like a good way to ensure documentation which would probably never be written otherwise; for this reason alone, it's probably recommendable.&lt;br /&gt;&lt;br /&gt;Another architecture talk was &lt;a href="http://jaoo.dk/presentation/Top+Ten+Software+Architecture+Mistakes"&gt;&lt;span style="font-style: italic;"&gt;Top Ten Software Architecture Mistakes&lt;/span&gt;&lt;/a&gt; by &lt;a href="http://www.eoinwoods.info/"&gt;Eoin Woods&lt;/a&gt;. Woods seems to subscribe to a definition of a software architect which is much akin to a project manager who knows about systems development. The talk was a very well performed live version of an &lt;a href="http://www.itarchitect.co.uk/articles/display.asp?id=377"&gt;article&lt;/a&gt; which Woods has written. Too bad there wasn't time for discussion (a general problem with JAOO's presentations); but it would probably have been hard to handle anyway -- the large room was packed with people.&lt;br /&gt;&lt;br /&gt;Eberhard Wolff held a two-part talk about &lt;a href="http://jaoo.dk/presentation/Java+History+and+Outlook"&gt;&lt;span style="font-style: italic;"&gt;Java History and Outlook&lt;/span&gt;&lt;/a&gt;. I attended the second part, which was a rewarding experience. Wolff gave several examples of how community initiatives have outlived certain over-designed "official" J2EE components. He also made an interesting point of how the Java world's web application trends seem to move from MVC towards component-based desig -- while, conversely, .Net is currently sliding from component-based design towards MVC. Wolff's company is involved in the &lt;a href="http://www.springframework.org/"&gt;Spring&lt;/a&gt; framework; if I'm not mistaken, it sounds like the Java world may finally be cured of its "frameworkitis" and converging on Spring for modern Java-based web applications. Although Wolff obviously has a strong interest in Java, the talk wasn't an evangelism event: He pretty much declared Java dead on desktop. And he noted that while the JVM is doing fine, the Java language has trouble incorporating new, needed features; instead, JVM based languages like &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; may take over in the long run.  Until then, Wolff strongly suggested adopting aspect oriented Java add-ons such as AspectJ and Spring AOP to gain more expressiveness.&lt;br /&gt;&lt;br /&gt;I had the pleasure of attending two good talks about &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REpresentational State Transfer&lt;/a&gt; (REST): &lt;a href="http://iansrobinson.com/"&gt;Ian Robinson&lt;/a&gt;'s &lt;a style="font-style: italic;" href="http://jaoo.dk/presentation/RESTful+Enterprise+Development"&gt;RESTful Enterprise Development&lt;/a&gt; and &lt;a href="http://www.innoq.com/blog/st/about/"&gt;Stefan Tilkov&lt;/a&gt;'s &lt;a href="http://jaoo.dk/presentation/Successfully+applying+REST+-+Integration%2C+Web-style"&gt;&lt;span style="font-style: italic;"&gt;Successfully applying REST - Integration, Web-style&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Tilkov presented a rigorous definition of REST, but in a nutshell, REST is web services, &lt;span style="font-style: italic;"&gt;done right&lt;/span&gt;, IMHO. Unlike over-designed and obese SOAP, REST doesn't abuse the HTTP protocol; instead, REST takes advantage of URLs, MIME-types and HTTP's basic operations/&lt;span style="font-style: italic;"&gt;verbs&lt;/span&gt; (GET/HEAD, POST, PUT, DELETE) to offer surprisingly powerful, yet simple, solutions. Other HTTP features, like content negotiation and caching, make REST even stronger. (On a side note, Tilkov pointed out it's a shame that HTML doesn't allow PUT as a form method; HTML 5 should fix this, however.)&lt;br /&gt;&lt;br /&gt;After a good, basic explanation of REST, Tilkov went through a number of patterns and anti-patterns which one should be aware of. One interesting suggestion was to always provide an HTML representation, in addition to the main MIME type of a URL. Sort of like Java's toString() method which can be performed on any object type. That way, it's easier to perform tests.&lt;br /&gt;&lt;br /&gt;Robinson's talk described a case where a legacy system had been integrated with new solutions, using REST. Specifically, &lt;a href="http://en.wikipedia.org/wiki/ATOM"&gt;Atom and AtomPub&lt;/a&gt; were used to enable the new solutions to efficiently pull messages and data from the legacy system.&lt;br /&gt;&lt;br /&gt;In the late afternoon, a number of &lt;a href="http://en.wikipedia.org/wiki/Birds_of_a_Feather_%28computing%29"&gt;BoF&lt;/a&gt; sessions were held.&lt;br /&gt;I'm always skeptical when people propose something as "post-relational", keeping in mind how the relational databases actually took over after the network databases way back then. But one needs to have beliefs challenged sometimes, and I really like BoFs as a supplement to traditional talks. So I attended a BoF about &lt;span style="font-style: italic;"&gt;graph databases&lt;/span&gt;, led by &lt;a href="http://www.linkedin.com/in/emileifrem"&gt;Emil Eifrem&lt;/a&gt;. Emil's company have created an embedded database for Java which is good at storing nodes and edges and traversing them. The database -- called &lt;a href="http://neo4j.org/"&gt;Neo4j&lt;/a&gt; -- is allegedly the fastest of its kind in the Java world. Neo4j is GPLed and offers transactions; nice. I can certainly think of use cases for navigational databases, but I didn't leave the meeting with an urgent need to take a closer look at the product. It seems that there are no standards for network database queries, and most (all?) of them tie you to one particular development platform, leaving you to have to expose web services if other platforms must have access. At the least, I would see if recursive SQL could be used before I went for a network database.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-7302800420274881568?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/7302800420274881568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=7302800420274881568' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/7302800420274881568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/7302800420274881568'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/09/jaoo-2008-tuesday.html' title='JAOO 2008, Tuesday'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-9211696032886523749</id><published>2008-09-30T00:49:00.020+02:00</published><updated>2008-09-30T19:34:04.680+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAOO'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud-computing'/><title type='text'>JAOO 2008, Monday</title><content type='html'>&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jaoo.dk/conference/"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_ySR6zPxLIoY/SOGEXoxohyI/AAAAAAAAAAo/kxqkso2ccEk/s320/jaoo2007_linkto5.gif" alt="" id="BLOGGER_PHOTO_ID_5251624182108161826" border="0" /&gt;&lt;/a&gt;This year, I'm attending &lt;a href="http://jaoo.dk/conference/"&gt;JAOO&lt;/a&gt; -- for the first time. JAOO was once a Java-centric venue, but nowadays it has broader coverage.&lt;br /&gt;&lt;br /&gt;Gregor Hohpe's &lt;a href="http://jaoo.dk/presentation/The+Internet+as+Platform%3A+Programming+the+Cloud"&gt;&lt;span style="font-style: italic;"&gt;The Internet as Platform: Programming the Cloud&lt;/span&gt;&lt;/a&gt; was about how systems developers should rethink their solution strategies. If scalability is of high priority, we need to give up luxuries, and give up some control:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Luxuries would be traditional &lt;a href="http://en.wikipedia.org/wiki/ACID"&gt;ACID&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Two-phase_commit"&gt;two-phase commit&lt;/a&gt; which are exchanged with compensation mechanisms, focus on idempotent operations, etc. Gregor presented a metaphor: &lt;a href="http://www.enterpriseintegrationpatterns.com/docs/IEEE_Software_Design_2PC.pdf"&gt;In a coffee shop&lt;/a&gt;, asynchronous work processes result in high throughput, and error handling (if the customer didn't get the right coffee) is handled by retries. There are certainly many applications where relaxed consistency is acceptable; and there are settings where it's &lt;a href="http://www.se-radio.net/podcast/2008-09/episode-109-ebay039s-architecture-principles-randy-shoup"&gt;simply needed&lt;/a&gt;, for performance reasons. However, I feel that it's somewhat irrational to write off traditional ACID: ACID can make life of the systems developer much simpler due to not having to worry about sneaky compensation schemes. As not all applications need to be massively scalable, I believe that ACID should keep a prominent position in the systems developer's toolbox. Also: The World is not all about coffee shops: There are lots of applications where you can't just shrug and try again if something fails. (That said: I'm very sceptical of two-phase commits: I've seen several cases where it goes wrong and result in complicated situations.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Another of Gregor's points were about giving up control: As developers, we need to be more declarative and less imperative; that way, compilers and execution environments have a much better chance of parallelizing our work. This principle seems to be a general theme of this year's JAOO.&lt;/li&gt;&lt;li&gt;Naturally, Gregor spent some time describing and demonstrating Google's exciting &lt;a href="http://appengine.google.com/"&gt;App Engine&lt;/a&gt;. App Engine is a cloud computing variant which works at a higher level than, for example, &lt;a href="http://aws.amazon.com/ec2/"&gt;EC2&lt;/a&gt;: With App Engine, you dont' have to worry about operating system configuration, at the price of much fewer degrees of freedom. App Engine applications can "only" be written in a (large) subset of &lt;a href="http://python.org/"&gt;Python&lt;/a&gt;; certain cloud-unfriendly parts of Python have been cut away in order to ensure isolation between cloud guests. In addition to the Python language, App Engine developers can take advantage of a number of nice turn-key &lt;a href="http://code.google.com/appengine/docs/"&gt;frameworks and APIs&lt;/a&gt;, e.g. for caching, authentication and data queries. Python is a great language, and cloud computing at a high level seems like a sensible idea, so I hope to get time to experiment with it at some point soon. My only grive about App Engine is: Why &lt;span style="font-style: italic;"&gt;yet another&lt;/span&gt; query language? -- I'd much prefer a more SQL-like syntax.&lt;/li&gt;&lt;/ul&gt;Overall, Gregor's presentation was very well delivered and with interesting and thought-provoking statements.&lt;br /&gt;&lt;br /&gt;Another presentation that I attended featured &lt;a href="http://research.sun.com/people/mybio.php?uid=25706"&gt;Guy Steele&lt;/a&gt; who &lt;a href="http://jaoo.dk/presentation/Fortress"&gt;gave an update&lt;/a&gt; on the progress of the &lt;a href="http://projectfortress.sun.com/"&gt;Fortress&lt;/a&gt; programming language. Fortress is to be a programming language for high performance computing -- sort of Fortran++, although the syntax and the features of Fortress are rather different from Fortran. Fortress is designed with parallel execution in mind; e.g., many constructs are parallel by default, and if sequential execution is wanted, this has to be explicitly stated. Fortress is clearly aimed at the mathematically inclined programmers: It has operating overloading 'on steroids', in combination with tools to present source code with just about any glyph, such as greek letters. Note: Fortress is an &lt;span style="font-style: italic;"&gt;imperative&lt;/span&gt; language; I was beginning to think that functional languages with minimal side effects would be the only way forward here.&lt;br /&gt;&lt;br /&gt;Finally, I attended a &lt;a href="http://jaoo.dk/presentation/Cloud+Panel+Discussion"&gt;panel discussion about cloud computing&lt;/a&gt;. The session wasn't as interesting as I had hoped for; maybe people were a bit tired in the afternoon. Discussion within the panel lacked energy, and there wasn't much audience involvement. I asked the panel to comment on two of the obstacles for cloud computing which I see. Where I work, we actually have some perfect use cases for cloud computing, in principle: Once a month, for example, we run some heavy computations which take several days and cause much stress, while at other times, the hardware is more or less idle. However, 1) what about security, i.e. protection of privacy sensible data, and 2) where is the business case if we need to upload ½ terabyte of data before the computations can start? My conclusion from the subsequent discussion was that we aren't going to be using EC2 for our computations any time soon, sadly. (Another unfortunate problem is that we rely heavily on SAS programs, and SAS Institute is notorious for virtualization-unfriendly licensing. But mayby SAS will wake up some day -- and perhaps even work with Amazon to provide access to SAS on EC2 nodes, charged by the hour?)&lt;br /&gt;&lt;br /&gt;Apart from attending presentations, I had a chance to talk to a people in the exhibition area.&lt;br /&gt;&lt;br /&gt;Among those were Red Hat which has recently opened a (small) office in Denmark.&lt;br /&gt;&lt;br /&gt;I talked with people from the &lt;span class="footerItem"&gt;Danish National IT and Telecom Agency (ITST)&lt;/span&gt; about project-ideas for ITST's &lt;a href="http://www.softwareborsen.dk/"&gt;Software Exchange&lt;/a&gt;: I've recently had vague ideas about some identity management code which would be nice to have in &lt;a href="http://www.sst.dk/"&gt;the agency where I work&lt;/a&gt;; this might be in the scope of the Software Exchange. And I think that many public sector organizations would be able to make good use of a project charged with adding LDAP-based group definitions to per-directory access controls in &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finally, I got a chance to shake hands with &lt;a href="http://www.innoq.com/blog/st/about/"&gt;Stefan Tilkov&lt;/a&gt;. I recently listened to a &lt;a href="http://www.se-radio.net/podcast/2008-05/episode-98-stefan-tilkov-rest"&gt;podcast&lt;/a&gt; where Stefan did a great job of explaining the (very sound) ideas behind REST.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-9211696032886523749?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/9211696032886523749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=9211696032886523749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/9211696032886523749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/9211696032886523749'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2008/09/jaoo-monday.html' title='JAOO 2008, Monday'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOGEXoxohyI/AAAAAAAAAAo/kxqkso2ccEk/s72-c/jaoo2007_linkto5.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32407360.post-115505688032924372</id><published>2006-08-08T19:03:00.000+02:00</published><updated>2006-08-08T19:08:00.340+02:00</updated><title type='text'>Moved to IPv4</title><content type='html'>My previous Weblog was hosted on IPv6 only. However, my IPv6 connection is currently down, so I'll be posting in the old, boring IPv4 Internet for a while.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32407360-115505688032924372?l=troelsarvin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://troelsarvin.blogspot.com/feeds/115505688032924372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32407360&amp;postID=115505688032924372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/115505688032924372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32407360/posts/default/115505688032924372'/><link rel='alternate' type='text/html' href='http://troelsarvin.blogspot.com/2006/08/moved-to-ipv4.html' title='Moved to IPv4'/><author><name>Troels Arvin</name><uri>http://www.blogger.com/profile/00653314601744325726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_ySR6zPxLIoY/SOFa-4W_VEI/AAAAAAAAAAM/-XwEmZVtI6I/S220/troels.jpg'/></author><thr:total>0</thr:total></entry></feed>
