Received: from maia.hub.org (maia-2.hub.org [200.46.204.251]) by mail.postgresql.org (Postfix) with ESMTP id F40941337B3E for ; Tue, 16 Nov 2010 07:28:23 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.251]) (amavisd-maia, port 10024) with ESMTP id 19462-05 for ; Tue, 16 Nov 2010 11:28:17 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from zenon.apartia.fr (zenon.apartia.fr [82.66.93.83]) by mail.postgresql.org (Postfix) with ESMTP id B46191336B42 for ; Tue, 16 Nov 2010 07:28:16 -0400 (AST) Received: from sylla.apartia.fr (sylla.apartia.fr [10.0.3.3]) by zenon.apartia.fr (Postfix) with ESMTP id 9094042508021 for ; Tue, 16 Nov 2010 12:28:16 +0100 (CET) Received: by sylla.apartia.fr (Postfix, from userid 1000) id 74510403DBAA8; Tue, 16 Nov 2010 12:28:16 +0100 (CET) Date: Tue, 16 Nov 2010 12:28:16 +0100 From: Louis-David Mitterrand To: pgsql-performance@postgresql.org Subject: Re: best db schema for time series data? Message-ID: <20101116112816.GA2953@apartia.fr> Mail-Followup-To: pgsql-performance@postgresql.org References: <20101116105055.GA26129@apartia.fr> <4CE2688B.2050000@tweakers.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4CE2688B.2050000@tweakers.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.9 tagged_above=-10 required=5 tests=BAYES_00=-1.9 X-Spam-Level: X-Archive-Number: 201011/262 X-Sequence-Number: 41286 On Tue, Nov 16, 2010 at 12:18:35PM +0100, Arjen van der Meijden wrote: > On 16-11-2010 11:50, Louis-David Mitterrand wrote: > >I have to collect lots of prices from web sites and keep track of their > >changes. What is the best option? > > > >1) one 'price' row per price change: > > > > create table price ( > > id_price primary key, > > id_product integer references product, > > price integer > > ); > > > >2) a single 'price' row containing all the changes: > > > > create table price ( > > id_price primary key, > > id_product integer references product, > > price integer[] -- prices are 'pushed' on this array as they change > > ); > > > >Which is bound to give the best performance, knowing I will often need > >to access the latest and next-to-latest prices? > > If you mostly need the last few prices, I'd definitaly go with the > first aproach, its much cleaner. Besides, you can store a date/time > per price, so you know when it changed. With the array-approach > that's a bit harder to do. > > If you're concerned with performance, introduce some form of a > materialized view for the most recent price of a product. Or reverse > the entire process and make a "current price"-table and a "price > history"-table. That's exactly my current 'modus operandi'. So it's nice to have confirmation that I'm not using the worst schema out there :)