<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hyperextended Metaphor &#187; Database</title>
	<atom:link href="http://innocuous.org/articles/tag/database/feed/" rel="self" type="application/rss+xml" />
	<link>http://innocuous.org</link>
	<description>Richard Tibbetts on Various Topics</description>
	<lastBuildDate>Sat, 12 Feb 2011 14:19:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>When neither a column store nor a row store is the answer</title>
		<link>http://innocuous.org/articles/2008/04/11/when-neither-a-column-store-nor-a-row-store-is-the-answer/</link>
		<comments>http://innocuous.org/articles/2008/04/11/when-neither-a-column-store-nor-a-row-store-is-the-answer/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 02:34:00 +0000</pubDate>
		<dc:creator>tibbetts</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://new.innocuous.org/index.php/2008/04/11/when-neither-a-column-store-nor-a-row-store-is-the-answer/</guid>
		<description><![CDATA[ A few days ago I found myself giving database advice to a friend with a new startup. His problem is a pretty common one: he has a very large corpus of data, over which he will run compute-intensive proprietary algorithms. Both the data and the computation will require a cluster of machines. He has [...]]]></description>
			<content:encoded><![CDATA[<p> A few days ago I found myself giving database advice to a friend with a new startup. His problem is a pretty common one: he has a very large corpus of data, over which he will run compute-intensive proprietary algorithms. Both the data and the computation will require a cluster of machines. He has a prototype based on Postgres. His question to me: should I continue to use a row store (Postgres) or should I use new technology, specifically a column store?</p>
<p>If you read the title of the post, you can already guess that my answer was neither.</p>
<p><span id="more-16"></span></p>
<p>Traditional row stores are optimized for transaction processing, in which records are updated. They are also sufficient for small data sets and ad hoc queries, as you find in a normal web app. Column stores are optimized for ad hoc queries, but this time against very large sets of data.</p>
<p>In either case, the data store is designed as a shared resource to cope with IO bound operations. But for many applications, the database is neither shared nor IO bound. In this application, the large data store is used by a small set of applications (the data loader and the data reducer), which are long running with predicable access patterns. This is in sharp contrast to the kind of load databases are designed to support.</p>
<p>The answer is to look at much simpler tools like <a href="http://en.wikipedia.org/wiki/BigTable" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">BigTable</a>, which are optimized for precisely this kind of access pattern. BigTable stores data in columns, but spends considerably less effort optimizing the IO of the data. Instead, it assumes the application will access the data in a reasonably efficient way. It&#8217;s great if you have a single application or single kind of application working over your data. In fact, BigTable even interoperates well with Map/Reduce, which is a reasonable basis for the compute intensive part of this application. The <a href="http://hadoop.apache.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/hadoop.apache.org');">Hadoop</a> implementation of these technologies looks pretty good.</p>
<p>There is an ad hoc query component to the application, but it is ad hoc queries of the results of the data reduction. The results are effectively a pre-aggregation of the large data set. There is a two-tiered storage model already built in to the design.</p>
<p>Now, an idealized database management system, the kind that you get along with your flying car, might make this two tiered design unnecessary, or at least automatic. It ought to be able to index the huge data set and support queries against it, notice patterns in those queries and store pre-aggregated information in order to service common queries quickly. But no readily available system comes even close to that level of self management. In fact, you would have a hard time finding a DBMS that gives you really rich and pleasant to use semantics for maintaining materialized views, never mind automatically creating them.</p>
<p>So, for now we build knowledge of these limitations into our system architecture, take a two tiered approach, and can benefit from the good work done by Google at building a very large, very dumb data store.</p>
]]></content:encoded>
			<wfw:commentRss>http://innocuous.org/articles/2008/04/11/when-neither-a-column-store-nor-a-row-store-is-the-answer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google commences another assault on the traditional database community</title>
		<link>http://innocuous.org/articles/2008/04/08/google-commences-another-assault-on-the-traditional-database-community/</link>
		<comments>http://innocuous.org/articles/2008/04/08/google-commences-another-assault-on-the-traditional-database-community/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 13:32:19 +0000</pubDate>
		<dc:creator>tibbetts</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://new.innocuous.org/index.php/2008/04/08/google-commences-another-assault-on-the-traditional-database-community/</guid>
		<description><![CDATA[ Many in the blogosphere noticed when Stonebraker and Dewitt at The Database Column took offense at the idea that map-reduce is the solution to many of life&#8217;s problems. The idea that a simple idea, promoted by a services company, can blow away 20+ years of distributed database research, bothers them for some reason. Sure, [...]]]></description>
			<content:encoded><![CDATA[<p> Many in the blogosphere noticed when <a href="http://www.databasecolumn.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.databasecolumn.com');">Stonebraker and Dewitt at The Database Column</a> took offense at the idea that <a href="http://www.databasecolumn.com/2008/01/mapreduce-a-major-step-back.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.databasecolumn.com');">map-reduce is the solution to many of life&#8217;s problems</a>. The idea that a simple idea, promoted by a services company, can blow away 20+ years of distributed database research, bothers them for some reason. Sure, it may not be the best solution to every problem, but it is a sufficient solution to many problems.</p>
<p>Google is quietly at it again, this time with the <a href="http://code.google.com/appengine/docs/whatisgoogleappengine.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');">Google AppEngine</a>.</p>
<p><span id="more-17"></span></p>
<p>This time, they are taking a shot at transaction processing. This is particularly amusing, because Stonebraker himself has been predicting an upset in transaction processing for a few years now. But rather than demonstrate tight integration between a app language and the database optimizer, or use traditional stored procedures, Google is again causing problems by building the simplest thing that can possibly work. And simple developers with simple applications are going to like it.</p>
<p>The <a href="http://code.google.com/appengine/docs/datastore/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');">Google App Engine data store</a> is a non-relational database, with support for an SQL-like but limited language called (unsurprisingly) <a href="http://code.google.com/appengine/docs/datastore/gqlreference.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');">GQL</a>. There are no joins. <a href="http://code.google.com/appengine/docs/datastore/transactions.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');">The lock management is simplistic</a>. It is basically an entity-relationship database, with fixed and variable attributes associated with each entity. Every query is always a SELECT * (&#8220;The SQL syntax is retained for familiarity&#8221;).</p>
<p>The whole thing is wrapped in a Python object-mapper, which means it looks quite a bit like an object database with a simplified model. This turns out to be what most people who are building web applications, whether in PHP, Ruby on Rails, or Java (Hibernate). Delivering a database which is limited to this functionality puts google in a powerful position to optimize specific use cases for simplicity and performance.</p>
<p>We are at the start of (or possibly in the middle of) a cycle that we haven&#8217;t seen in over 10 years: Existing assumptions about databases are being questioned, and a thousand flowers are blooming. Stonebraker himself pointed this out in his <a href="http://www.databasecolumn.com/2007/09/one-size-fits-all.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.databasecolumn.com');">One Size Doesn&#8217;t Fit All </a>papers, talks, and columns. However, it is not just the Oracle of the world who need to change or get out of the way. It is also the leaders of the database research community and their dominant paradigms. Things are going to be messy for a while yet. But in the end we will have technology that better fits modern infrastructure and modern usage.</p>
]]></content:encoded>
			<wfw:commentRss>http://innocuous.org/articles/2008/04/08/google-commences-another-assault-on-the-traditional-database-community/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OOPSLA 2007: &#8220;The Popularity Cycle of Graphical Tools, UML, and Libraries of Associations&#8221; &#8211; not the workshop I expected</title>
		<link>http://innocuous.org/articles/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected/</link>
		<comments>http://innocuous.org/articles/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 13:59:24 +0000</pubDate>
		<dc:creator>tibbetts</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://new.innocuous.org/index.php/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected/</guid>
		<description><![CDATA[ Today was my first day at OOPSLA 2007 in Montreal. After a brief exposure to the amazing &#8220;Underground City&#8221; (really a shopping mall that is infecting downtown like a cancer), I crashed a workshop for which I had not signed up, and had a completely different experience than I had planned at The Popularity [...]]]></description>
			<content:encoded><![CDATA[<p> Today was my first day at <a href="http://www.oopsla.org/oopsla2007/index.php?page=home/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.oopsla.org');">OOPSLA 2007</a> in Montreal. After a brief exposure to the amazing &#8220;Underground City&#8221; (really a shopping mall that is infecting downtown like a cancer), I crashed a workshop for which I had not signed up, and had a completely different experience than I had planned at <a href="http://www.codefarms.com/OOPSLA07/workshop/index.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.codefarms.com');">The Popularity Cycle of Graphical Tools, UML, and Libraries of Associations</a>.</p>
<p>The title implied it was the workshop about graphical programming languages and tools. As an author of a graphical programming language, <a href="http://www.streambase.com/developers/docs/latest/concepts/canvas.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.streambase.com');">StreamBase StreamSQL EventFlow</a>, it seemed like the place to be. My plan had been to pick up some contacts in the graphical languages space, and learn about what has come before. However, the participants (with one vocal exception) had already accepted as a given that UML would eventually decline in popularity, to be replaced by a and they were focused on what would come next.</p>
<p><span id="more-22"></span></p>
<p>In fact, the general agreement about what comes next is first class associations. An association is a relationship between two classes that relates instances of the first with instances of the second. These are the lines in UML diagrams. The focus of the workshop was on creating language constructs to allow realization of these lines (associations) in code and the creation of libraries of types of associations.</p>
<p>In UML, most boxes are realized concretely as a Class. This makes translation to and from UML diagrams and other models straightforward for classes. But most lines are realized in an implementation dependent and error prone fashion. For example, there might be a pointer from objects of one class to the other. Or there might be pointers in both directions. Or a set of pointers, or an externally stored map.</p>
<p>Any of these implementations requires maintenance logic, generally embedded in one or both class definitions. This logic is error prone and can get out of sync. If the association is subject to additional constraints, such as a graph being acyclic or conforming to some security model, the maintenance logic can get very complex. At some point a separate class might be created just to track instances of the relationship, but this is a discontinuous change to the program, and impacts all clients of the relation. Much better if there were a concrete realization of associations somewhere in the program, where changes to the association could be made.</p>
<p>Three concrete implementations were presented, for C++, Java, and C#. The C++ implementation, by <a href="http://www.codefarms.com/about.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.codefarms.com');">Jiri Soukup</a> and called <a href="http://incode.sourceforge.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/incode.sourceforge.net');">incode</a>, was implemented via code generation. The Java and C# systems, presented by <a href="http://www.mcs.vuw.ac.nz/people/James-Noble" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mcs.vuw.ac.nz');">James Nobel</a> and <a href="http://www.itu.dk/people/kasper/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.itu.dk');">Kasper Østerbye</a> respectively, utilized Aspect Oriented Programming (AOP) tools to inject required logic into classes at runtime. Kasper&#8217;s work is described in a paper, <a href="http://www.itu.dk/people/kasper/papers/osterbye_R11.pdf" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.itu.dk');">Associations as a Language Construct</a>, James&#8217;s in <a href="http://www.mcs.vuw.ac.nz/~djp/files/PN-EPLOP06.pdf" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mcs.vuw.ac.nz');">Relationship Aspect Patterns</a>. <a href="http://www.elvis.ac.nz/brain?People#StephenNelson" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.elvis.ac.nz');">Stephen Nelson</a> also described but did not present his work, and <a href="http://www.opusedge.com/mikeh.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.opusedge.com');">Mike Heffernan</a> presented an in-house system he has developed at <a href="http://www.opusedge.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.opusedge.com');">OpusEdge</a>.</p>
<p>The OpusEdge system, in particular, focused on using associations and the objects they related to control database schema generation and database access. In this case the associations and objects form a Model in the context of <a href="http://en.wikipedia.org/wiki/Model_view_controller" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">Model, View, Controller</a>. His system, implemented in .NET, provided transparent network access to the model from clients, as well as server side access.</p>
<p>While this was not the workshop I had intended to attend, it was all very interesting to me. The interplay between databases and programming languages, and between the relational model and object oriented models, is a subject which holds long-term interest to me. The question of whether associations should be binary or N-ary is similar to the question of <a href="http://en.wikipedia.org/wiki/Resource_Description_Framework" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">RDF</a> versus fully-relational in databases.</p>
<p>If we expand language functionality to enable associations, or just let the AOP beast out of its cage all together, it would greatly improve the rapid-development experience. Today, many MVC frameworks create degenerate views given a model, and some even take a programming by exception approach to generating more interesting views. WIth associations as first class manipulable constructs, the model can be enriched with more information (by using a library of association subtypes). This can in turn drive better automatic behavior in areas such as view generation, model validation, and persistence.</p>
<p>We are going to continue conversations about associations, electronically, in a forum moderated by Stephen Nelson. I will be interested to see what progress is made. I have two burning questions: How can we leverage associations to improve database interactions? And, once we have associations, what traditional programming language constructs can we drop?</p>
]]></content:encoded>
			<wfw:commentRss>http://innocuous.org/articles/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>VLDB Keynote: Data Access Patterns in The Amazon.com Technology Platform</title>
		<link>http://innocuous.org/articles/2007/09/25/vldb-keynote-data-access-patterns-in-the-amazoncom-technology-platform/</link>
		<comments>http://innocuous.org/articles/2007/09/25/vldb-keynote-data-access-patterns-in-the-amazoncom-technology-platform/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 10:53:46 +0000</pubDate>
		<dc:creator>tibbetts</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://new.innocuous.org/index.php/2007/09/25/vldb-keynote-data-access-patterns-in-the-amazoncom-technology-platform/</guid>
		<description><![CDATA[ The opening keynote for this year&#8217;s VLDB was a great presentation by Amazon CTO Werner Vogels, describing their data management challenges. I particularly appreciated it because it echoed something I&#8217;ve been saying for a few years now: Web-scale companies have problems which cannot be managed with standard RDBMS, or with any common research systems, [...]]]></description>
			<content:encoded><![CDATA[<p> The opening keynote for <a href="http://www.vldb2007.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.vldb2007.org');">this year&#8217;s VLDB</a> was a great presentation by <a href="http://www.vldb2007.org/program/keynotes.html#vogels" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.vldb2007.org');">Amazon CTO Werner Vogels</a>, describing their data management challenges. I particularly appreciated it because it echoed something I&#8217;ve been saying for a few years now: Web-scale companies have problems which cannot be managed with standard RDBMS, or with any common research systems, and so they have started to route-around the database research community.</p>
<p>Vogels presented lots of information. A big part was about the operational realities of a site as large as Amazon. This has been said before, but saying it to a room full of database researchers was a good thing:<span style="font-size: 0pt"></span></p>
<ul>
<li>Incremental scalability, up or down, one node at a time, is a key requirement</li>
<li>Adding resources for redundancy must not hurt performance (best if it helps).</li>
<li>Failures are not uncorrelated, they are generally quite correlated.</li>
<li>Systems that fail do not fail stop, they generally fail in some more complex way (eg, periodically coming back up and failing again, or outputting garbage).</li>
</ul>
<p>Amazon&#8217;s query workload shares a lot of characteristics with other web sites with which I am familiar, such as <a href="http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.addsimplicity.com');">eBay</a>, <a href="http://www.manageability.org/blog/stuff/economics-google-hardware-infrastructure/view" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.manageability.org');">Google</a>, <a href="http://www.skrenta.com/2007/05/scaling_facebook_hi5_with_memc.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.skrenta.com');">Facebook</a>, and <a href="http://www.highscalability.com/livejournal-architecture" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.highscalability.com');">LiveJournal</a>. Amazon uses lots of read mostly workloads and lots of pkey-lookup-only workload (65% of all queries are primary key). Only 5% of their queries need full RDBMS query functionality. Most of their writes are also by primary key, and many storage systems support only that kind of write.</p>
<p>When it comes to those writes.</p>
<ul>
<li>Only 10% of queries need strong consistency.</li>
<li>&#8220;We consider strong consistency to be evil,&#8221; because it is impossible to implement without the potential for downtime or failure.</li>
<li>Most systems at Amazon are designed for eventual consistency.</li>
<li>One interesting case is the need for always-writable data storage. One use case is ordering. &#8220;If the customer decides to give you his money, you must always take it, that&#8217;s a business principle.&#8221; Always writable storage obviously implies a conflict resolution scheme.</li>
</ul>
<p>All this points to a traditional RDBMS being the wrong system. Interestingly, if you assume you need a single general purpose system, then RDBMS is the best available. But the real answer is to use a set of customized data management tools. This all echos Stonebraker&#8217;s claim that <a href="http://www.databasecolumn.com/2007/09/one-size-fits-all.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.databasecolumn.com');">one size no longer fits all uses</a>.</p>
<p>Where do we go from here? The real problem for the research community is not to help Amazon and Google build a 5% better system. The real problem is to package up (aka abstract) these tools in such a way that, like databases, average programmers can work with them. Because problems that PhDs at Amazon and Google solve today will soon be problems everyone needs to solve.</p>
]]></content:encoded>
			<wfw:commentRss>http://innocuous.org/articles/2007/09/25/vldb-keynote-data-access-patterns-in-the-amazoncom-technology-platform/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Transactional Memory Not Solution To All Problems</title>
		<link>http://innocuous.org/articles/2006/12/01/transactional-memory-not-solution-to-all-problems/</link>
		<comments>http://innocuous.org/articles/2006/12/01/transactional-memory-not-solution-to-all-problems/#comments</comments>
		<pubDate>Sat, 02 Dec 2006 00:10:19 +0000</pubDate>
		<dc:creator>tibbetts</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://new.innocuous.org/index.php/2006/12/01/transactional-memory-not-solution-to-all-problems/</guid>
		<description><![CDATA[I was at MIT today and so I ended up going to an invited talk on computer architecture, Subtle Semantics and Unrestricted Implementation of Transactional Memory. Transactional Memory is a very hot topic in systems and architecture. It is perceived to be a better model for programmers, so language designers like it. And there are [...]]]></description>
			<content:encoded><![CDATA[<p>I was at MIT today and so I ended up going to an invited talk on computer architecture, <span class="textbold"><a href="http://www.csail.mit.edu/events/eventcalendar/calendar.php?show=event&amp;id=1298" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.csail.mit.edu');">Subtle Semantics and Unrestricted Implementation of Transactional Memory</a>. <a href="http://en.wikipedia.org/wiki/Transactional_memory" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">Transactional Memory</a> is a very hot topic in systems and architecture. It is perceived to be a better model for programmers, so language designers like it. And there are a variety of options for pure-software and hardware-assisted implementations. And because it enables optimistic concurrency control, transactional memory can help make programs faster and more scalable on new multi-core architectures. There is every reason to believe that processor vendors will begin including some form of hardware support for transactional memory.</span></p>
<p>The focus of the talk was on the subtle issues that come from this. It dismissed a few of the more positive myths about transactional memory:</p>
<ul>
<li>Programs using locks cannot be trivially converted to use transactions. In fact, a correctly behaving program using locks to manage things like inter-thread communication can easily deadlock or livelock when using transactions.</li>
<li>Transactions are not perfectly composable or nestable, as is often claimed. This means heirarchical or nested transactions, where there is a program-level transaction wrapping several library-level transactions, can lead to deadlock or livelock.</li>
<li>Whether a transactional system is weak (non-transactional code executes concurrently with transactional code, with side effects visible between) or strong transactional (a transaction is atomic not just from the perspective of other transactions, but also to other non-transactional code) can have a significant effect on program behavior. Not only can a program designed for strong transactions have problems under weak transactions, but a program that behaves correctly in a weak transactional system may deadlock in a strong transactional system.</li>
</ul>
<p>This leads me to two primary conclusions, with which I think the speaker would agree: First, transactional memory can have significant confusing side effects, just like locks, and so it is not a solution to the difficulties of multithreaded programming. Second, if processor vendors implement, and many programmers use, weak transactions then we may never get strong transactions.</p>
<p>I&#8217;d like to take this one step further. I think language designers and computer architects who are excited about transactional memory are missing the point. They are trying to create a single concurrency control mechanism that can solve everyone&#8217;s problems. In fact, I think there are two separate classes of problem that are best addressed separately: Concurrency control for systems programming, and concurrency control for application programming.</p>
<p>Systems programmers are close to the hardware, inside or right on top of the operating system. They are the people who are most comfortable with the concurrency control mechanisms of today (<a href="http://en.wikipedia.org/wiki/Pthreads" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">pthreads</a> and <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.sun.com');">java.util.concurrent</a>). Transactional Memory should be targetting these users. The goal is not to give them an easy way to do concurrency, but to make optimistic concurrency control possible and efficient. Continuing to discuss the merits of strong and weak transactions is reasonable, but it should be in the context of what most efficiently represents the capabilities of the hardware.</p>
<p>Application programmers generally work on top of a platform, and don&#8217;t have to think about concurrency in the same way. if they don&#8217;t work on a platform then they should. For example, application programmers are often writing business applications as web services on top of J2EE. By using platforms, they can work with much higher level management and concurrency control. The most common idiom for concurrency control is the database transaction (or distributed transaction). It is able to handle most concurrency problems in traditional RPC-and-datastore systems.</p>
<p>To help application programmers, we need to develop additional idioms. Not all programs can utilize the J2EE style of platform. I expect to see a significant advance in scientific computing tools like MATLAB to take advantage of multiprocessor systems (in my ideal world it would be by vectorizing based on static and dynamic analysis, but I digress). Furthermore, there are a large set of event processing (stream processing, complex event processing) which are also not well served by J2EE-type platforms and database-transactions. Which is why I work on <a href="http://www.streambase.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.streambase.com');">StreamBase</a> (and on <a href="http://streamsql.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/streamsql.org');">StreamSQL</a>), which is creating next generation programming models for those kinds of applications, to enable parallelization, managability, and scalability.&lt;/shameless-plug&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://innocuous.org/articles/2006/12/01/transactional-memory-not-solution-to-all-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

