<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: DATAllegro vs. Vertica and other columnar systems</title>
	<atom:link href="http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/</link>
	<description>Choices in data management and analysis</description>
	<pubDate>Sun, 20 Jul 2008 01:38:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: DBMS2 &#8212; DataBase Management System Services &#187; Blog Archive &#187; Three bold assertions by Mike Stonebraker</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-82933</link>
		<dc:creator>DBMS2 &#8212; DataBase Management System Services &#187; Blog Archive &#187; Three bold assertions by Mike Stonebraker</dc:creator>
		<pubDate>Fri, 25 Apr 2008 04:07:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-82933</guid>
		<description>[...] *For example, were Vertica&#8217;s competitors set up with vertical partitioning? [...]</description>
		<content:encoded><![CDATA[<p>[...] *For example, were Vertica&#8217;s competitors set up with vertical partitioning? [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Kanter</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-23177</link>
		<dc:creator>David Kanter</dc:creator>
		<pubDate>Tue, 27 Mar 2007 02:30:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-23177</guid>
		<description>Chuck,

Thanks for the clarification - that makes much more sense now.

I believe that in the scenario you describe - loading, the graph wouldn't have much value, whereas when you update (hence you must enforce consistency and coherency), it would be interesting.

DK</description>
		<content:encoded><![CDATA[<p>Chuck,</p>
<p>Thanks for the clarification - that makes much more sense now.</p>
<p>I believe that in the scenario you describe - loading, the graph wouldn&#8217;t have much value, whereas when you update (hence you must enforce consistency and coherency), it would be interesting.</p>
<p>DK</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chuck</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22767</link>
		<dc:creator>Chuck</dc:creator>
		<pubDate>Fri, 23 Mar 2007 06:30:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22767</guid>
		<description>David,

I don't think I follow the analogy.  There's a big distinction between loads and updates.  In inserts/loads, there's no "coherency" needed beyond knowing which data was part of what transaction (timestamping, as you say).  From the perspective of a node processing a load stream, each row loaded "belongs" on one of the nodes in the cluster, so it can be sent to that node directly and nobody else needs to know about it.  (If a query requests that row, the node processing the query knows where to look.)

So from the perspective of a node doing a load in a cluster of N nodes, it processes a stream of data and sends it to N-1 places (keeping 1/Nth for itself).  The node will also receive data from N-1 other nodes if they are processing loads.  So if all nodes are loading data at the same time, each node would expect to receive as much data as it sends.  So load speed scales linearly with the number of nodes as long as:
1. A node can handle N incoming load streams.  (This translates to a memory requirement, mostly.)
2. The interconnect can distribute all the data, full duplex, with all nodes talking to all others at once on the backplane.  (Currently this is true of relatively cheap GigE switches with 32 or 64 ports.)

I'm sorry, but I don't understand the concept behind the graph.  It seems to me like for a given load size and frequency, either the system will keep up or it won't.  Wouldn't it be more intersting to know what the maximum load rate is (GB/min) for combinations of parameters like # of nodes in the cluster and # of GB in each load?</description>
		<content:encoded><![CDATA[<p>David,</p>
<p>I don&#8217;t think I follow the analogy.  There&#8217;s a big distinction between loads and updates.  In inserts/loads, there&#8217;s no &#8220;coherency&#8221; needed beyond knowing which data was part of what transaction (timestamping, as you say).  From the perspective of a node processing a load stream, each row loaded &#8220;belongs&#8221; on one of the nodes in the cluster, so it can be sent to that node directly and nobody else needs to know about it.  (If a query requests that row, the node processing the query knows where to look.)</p>
<p>So from the perspective of a node doing a load in a cluster of N nodes, it processes a stream of data and sends it to N-1 places (keeping 1/Nth for itself).  The node will also receive data from N-1 other nodes if they are processing loads.  So if all nodes are loading data at the same time, each node would expect to receive as much data as it sends.  So load speed scales linearly with the number of nodes as long as:<br />
1. A node can handle N incoming load streams.  (This translates to a memory requirement, mostly.)<br />
2. The interconnect can distribute all the data, full duplex, with all nodes talking to all others at once on the backplane.  (Currently this is true of relatively cheap GigE switches with 32 or 64 ports.)</p>
<p>I&#8217;m sorry, but I don&#8217;t understand the concept behind the graph.  It seems to me like for a given load size and frequency, either the system will keep up or it won&#8217;t.  Wouldn&#8217;t it be more intersting to know what the maximum load rate is (GB/min) for combinations of parameters like # of nodes in the cluster and # of GB in each load?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Kanter</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22585</link>
		<dc:creator>David Kanter</dc:creator>
		<pubDate>Wed, 21 Mar 2007 19:02:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22585</guid>
		<description>Chuck,

Thanks for the elaboration. Here's why I ask...

When I think about the problem from an architectural standpoint (computer architecture that is), it's exactly analogous to an update cache coherency policy.

The E/T steps are local, and those probably scale reasonably well.  What isn't going to scale is the 1:N communication of distributing the data out to every node, and the resulting acknowledgements.  You have to update all N nodes, and you can't really get around that.

IIRC, you guys use timestamping, so you don't have to redo any in-flight transactions because of an update.

As I said, what would be interesting would be a 3D graph of:

Data load size (x GB), data load frequency (Y loads/hour) and performance (Z seconds)

DK</description>
		<content:encoded><![CDATA[<p>Chuck,</p>
<p>Thanks for the elaboration. Here&#8217;s why I ask&#8230;</p>
<p>When I think about the problem from an architectural standpoint (computer architecture that is), it&#8217;s exactly analogous to an update cache coherency policy.</p>
<p>The E/T steps are local, and those probably scale reasonably well.  What isn&#8217;t going to scale is the 1:N communication of distributing the data out to every node, and the resulting acknowledgements.  You have to update all N nodes, and you can&#8217;t really get around that.</p>
<p>IIRC, you guys use timestamping, so you don&#8217;t have to redo any in-flight transactions because of an update.</p>
<p>As I said, what would be interesting would be a 3D graph of:</p>
<p>Data load size (x GB), data load frequency (Y loads/hour) and performance (Z seconds)</p>
<p>DK</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chuck</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22551</link>
		<dc:creator>Chuck</dc:creator>
		<pubDate>Wed, 21 Mar 2007 13:42:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22551</guid>
		<description>Agreed that 4 nodes is pretty small, but considering that Vertica is shared nothing and all load steps are local to the machine except data segmentation, load speed scales with number of nodes assisting in the load as long as each node has a data stream and you have a good switch.

We did see around 4x load speed compared to 1 node in this test, which is far more than we can say for a competing row store that uses a shared disk architecture and saw 2.5x.  Likewise, a competing shared-nothing row store without a parallel load feature didn't get anywhere near 4x on 4 nodes, as load saw 1x while index and MV build saw 4x.

Of course other products out there do it the same way we do and don't suffer these limitations, but I repeat my claim that there's no theoretical reason why a column store would be beaten on load performance.  Nor do we ever get beaten (on apples-to-apples hardware of course).

Stay tuned for more complete presentations on our numbers in an upcoming paper, as well as bigger cluster and data sizes.</description>
		<content:encoded><![CDATA[<p>Agreed that 4 nodes is pretty small, but considering that Vertica is shared nothing and all load steps are local to the machine except data segmentation, load speed scales with number of nodes assisting in the load as long as each node has a data stream and you have a good switch.</p>
<p>We did see around 4x load speed compared to 1 node in this test, which is far more than we can say for a competing row store that uses a shared disk architecture and saw 2.5x.  Likewise, a competing shared-nothing row store without a parallel load feature didn&#8217;t get anywhere near 4x on 4 nodes, as load saw 1x while index and MV build saw 4x.</p>
<p>Of course other products out there do it the same way we do and don&#8217;t suffer these limitations, but I repeat my claim that there&#8217;s no theoretical reason why a column store would be beaten on load performance.  Nor do we ever get beaten (on apples-to-apples hardware of course).</p>
<p>Stay tuned for more complete presentations on our numbers in an upcoming paper, as well as bigger cluster and data sizes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: DBMS2 &#8212; DataBase Management System Services&#187;Blog Archive &#187; Compression in columnar data stores</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22519</link>
		<dc:creator>DBMS2 &#8212; DataBase Management System Services&#187;Blog Archive &#187; Compression in columnar data stores</dc:creator>
		<pubDate>Wed, 21 Mar 2007 08:13:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22519</guid>
		<description>[...] We have lively discussions going on columnar data stores vs. vertically partitioned row stores. Part is visible in the comment thread to a recent post. Other parts come in private comments from Stuart Frost of DATAllegro and Mike Stonebraker of Vertica et al. [...]</description>
		<content:encoded><![CDATA[<p>[...] We have lively discussions going on columnar data stores vs. vertically partitioned row stores. Part is visible in the comment thread to a recent post. Other parts come in private comments from Stuart Frost of DATAllegro and Mike Stonebraker of Vertica et al. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Kanter</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22466</link>
		<dc:creator>David Kanter</dc:creator>
		<pubDate>Tue, 20 Mar 2007 19:15:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22466</guid>
		<description>Chuck,

You're citing a 2x improvement for a 4 node cluster.  It seems to me like this isn't really enough data to make a claim that "load times aren't an issue".  4 nodes is pretty small, and we also don't know how much data you are talking about.

What happens in a 64 or 128 node cluster, with varying data sizes?

I don't doubt that columnar DB's will have an advantage for compression - but there's no such thing as a free lunch.

DK</description>
		<content:encoded><![CDATA[<p>Chuck,</p>
<p>You&#8217;re citing a 2x improvement for a 4 node cluster.  It seems to me like this isn&#8217;t really enough data to make a claim that &#8220;load times aren&#8217;t an issue&#8221;.  4 nodes is pretty small, and we also don&#8217;t know how much data you are talking about.</p>
<p>What happens in a 64 or 128 node cluster, with varying data sizes?</p>
<p>I don&#8217;t doubt that columnar DB&#8217;s will have an advantage for compression - but there&#8217;s no such thing as a free lunch.</p>
<p>DK</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22449</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Tue, 20 Mar 2007 15:04:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22449</guid>
		<description>Vertical partitioning for me involves splitting your fact table into two or more fact tables to keep your fact table as 'skinny' as possible to get I/O throughput.  I'm not clear that this is what the DATallegro guy means.

If this is his position then IMHO the reason columnar systems should beat even heavily optimized row-store DBs is that fact that processor speeds have increased by orders of magnitude whilst I/O throughput has increased fairly slowly.

Every big data warehouse I have ever seen max's out I/O.  For most adhoc queries the processors are doing nothing and the I/O is at 100%.  This is particularly true of the SMP guys (Oracle, please stand up) but largely it is the biggest issue for serious analytical queries irrespective of the architecture.  Whilst one might argue that many data warehouses have sub-optimal hardware implementations (these days pulling data off a SAN rather than local, physically optimized, non-contentious disk), the reality is that CPU speeds have increased exponentially whilst I/O throughput has creeped up in the last 10 years.  If you can pull heavily compressed data off the disk and decompress quickly in memory you take advantage of this CPU capacity.

Bitmap indexes are supposed to provide the advantages of columnar data stores for row-store databases. The problem is that once the optimizer decides to drop off the index and do a table scan all that advantage is lost.

Here's the problems with the notion that vertial partitioning is the answer.

A lot of adhoc BI queries look like this - 'show me the aggregation of all products to a category roll-up for the last week'. The 80/20 rule is in play. The 'all product aggregation' isn't selective and, depending on the insanity of the optimiser, you don't hit the bitmaps.  Vertical partitioning of a fact table won't help at all because you cannot split the time and product foreign key columns from the core fact table.  Nearly every query will use those key column.  The optimizer will degenerate to a table scan.  Then it's all about I/O.  The columnar DB wins.</description>
		<content:encoded><![CDATA[<p>Vertical partitioning for me involves splitting your fact table into two or more fact tables to keep your fact table as &#8217;skinny&#8217; as possible to get I/O throughput.  I&#8217;m not clear that this is what the DATallegro guy means.</p>
<p>If this is his position then IMHO the reason columnar systems should beat even heavily optimized row-store DBs is that fact that processor speeds have increased by orders of magnitude whilst I/O throughput has increased fairly slowly.</p>
<p>Every big data warehouse I have ever seen max&#8217;s out I/O.  For most adhoc queries the processors are doing nothing and the I/O is at 100%.  This is particularly true of the SMP guys (Oracle, please stand up) but largely it is the biggest issue for serious analytical queries irrespective of the architecture.  Whilst one might argue that many data warehouses have sub-optimal hardware implementations (these days pulling data off a SAN rather than local, physically optimized, non-contentious disk), the reality is that CPU speeds have increased exponentially whilst I/O throughput has creeped up in the last 10 years.  If you can pull heavily compressed data off the disk and decompress quickly in memory you take advantage of this CPU capacity.</p>
<p>Bitmap indexes are supposed to provide the advantages of columnar data stores for row-store databases. The problem is that once the optimizer decides to drop off the index and do a table scan all that advantage is lost.</p>
<p>Here&#8217;s the problems with the notion that vertial partitioning is the answer.</p>
<p>A lot of adhoc BI queries look like this - &#8217;show me the aggregation of all products to a category roll-up for the last week&#8217;. The 80/20 rule is in play. The &#8216;all product aggregation&#8217; isn&#8217;t selective and, depending on the insanity of the optimiser, you don&#8217;t hit the bitmaps.  Vertical partitioning of a fact table won&#8217;t help at all because you cannot split the time and product foreign key columns from the core fact table.  Nearly every query will use those key column.  The optimizer will degenerate to a table scan.  Then it&#8217;s all about I/O.  The columnar DB wins.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chuck</title>
		<link>http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22439</link>
		<dc:creator>Chuck</dc:creator>
		<pubDate>Tue, 20 Mar 2007 13:00:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.dbms2.com/2007/03/19/datallegro-versus-vertica-columnar-systems/#comment-22439</guid>
		<description>The problem with vertical partitioning in a row store is that when an ad hoc query comes along, the vertical partitioning scheme used may not be helpful.  In a column store, you can take 100% advantage of column access patterns without considering what columns you'll need in the future.  In a row store, there is a tradeoff between adding columns to the partition, and query speed on the partition.  Or you can make more partitions, but that hurts load time and space usage.

In practical terms, when we run against commercial row stores tuned by professionals who make their living doing this, we find we run way faster, even when the partition or MV scheme has exactly the right columns for the query.  Reasons include columnar compression beating row store compression by 3:1 or more in these cases, and better data organization.  In fact, with only a single copy of the data in Vertica, we are able to beat a "1-MV-per-query" row store scheme in many of our tests.

With regard to load time, there are no theoretical reasons why a column store should be slower (or faster) to load.  Vertica's goal is to never take longer to load than the competition, and we've achieved that.  In a recent test on identical 4-node clusters, we were able to load data in 60% of the time of a popular row store; both systems used 4 parallel load streams and similar physical schemas.  Also, on a schema with over 300 columns, we loaded significantly faster than popular commercial row stores.  Vertica will continue to focus on load speed as well as query performance, so we expect to make loads even faster this year.

Note - I work for Vertica.</description>
		<content:encoded><![CDATA[<p>The problem with vertical partitioning in a row store is that when an ad hoc query comes along, the vertical partitioning scheme used may not be helpful.  In a column store, you can take 100% advantage of column access patterns without considering what columns you&#8217;ll need in the future.  In a row store, there is a tradeoff between adding columns to the partition, and query speed on the partition.  Or you can make more partitions, but that hurts load time and space usage.</p>
<p>In practical terms, when we run against commercial row stores tuned by professionals who make their living doing this, we find we run way faster, even when the partition or MV scheme has exactly the right columns for the query.  Reasons include columnar compression beating row store compression by 3:1 or more in these cases, and better data organization.  In fact, with only a single copy of the data in Vertica, we are able to beat a &#8220;1-MV-per-query&#8221; row store scheme in many of our tests.</p>
<p>With regard to load time, there are no theoretical reasons why a column store should be slower (or faster) to load.  Vertica&#8217;s goal is to never take longer to load than the competition, and we&#8217;ve achieved that.  In a recent test on identical 4-node clusters, we were able to load data in 60% of the time of a popular row store; both systems used 4 parallel load streams and similar physical schemas.  Also, on a schema with over 300 columns, we loaded significantly faster than popular commercial row stores.  Vertica will continue to focus on load speed as well as query performance, so we expect to make loads even faster this year.</p>
<p>Note - I work for Vertica.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
