Speicherverbrauch / c't Datenbank-Contest

From: Alvar Freude <alvar(at)a-blast(dot)org>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Speicherverbrauch / c't Datenbank-Contest
Date: 2005-11-13 15:11:51
Message-ID: B9215B2B8920904020891FBC@Chefkoch.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Hi,

leider komme ich erst jetzt zu den Letzten Zügen ;) beim c't
Datenbank-Contest; für die mittelgroße Datenbank dürften auch
Kleinigkeiten im Speicherverbrauch interessant sein, daher frage ich
mich, ob ich die "customers"-Tabelle in zwei aufteile: eine, in die die
Daten geschrieben werden, und eine Login-Tabelle, auf die im sonstigen
verlauf zugegriffen wird.

Die customers-Tabelle hat im Falle der mittelgroßen Datenbank 2
Millionen Zeilen. Beim Login und via Foreign Keys beim Bestellen wird
darauf zugegriffen.

Postgres lädt immer die ganze Zeile, oder wird das spaltenweise abgelegt
(und reingeladen)?

Weiß gerade jemand Zahlen, wieviel das hier pro Zeile braucht, wenn in
den Varchar-Feldern zwischen 6 und 20 Bytes stehen? Oder gibt es
vielleicht einen Query über den Systemkatalog, mit dem man den
Speicherverbrauch einer Zeile (oder einer Tabelle) errechnen kann? Ich
bin etwas spät, sonst würde ich es einfach ausprobieren ;)

CREATE TABLE customers
(
customerid SERIAL NOT NULL,
firstname VARCHAR(50) NOT NULL,
lastname VARCHAR(50) NOT NULL,
address1 VARCHAR(50) NOT NULL,
address2 VARCHAR(50),
city VARCHAR(50) NOT NULL,
state VARCHAR(50),
zip INT,
country VARCHAR(50) NOT NULL,
region SMALLINT NOT NULL,
email VARCHAR(50),
phone VARCHAR(50),
creditcardtype INT NOT NULL,
creditcard VARCHAR(50) NOT NULL,
creditcardexpiration VARCHAR(50) NOT NULL,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
age SMALLINT,
income INT,
gender VARCHAR(1)
);

Die Alternative wäre wie gesagt, zum Lesen folgende Tabelle zu nehmen
und obige nur beim Einfügen:

CREATE TABLE login AS
SELECT customerid, username, password,
creditcardtype::text || ',' ||
creditcard::text || ',' ||
creditcardexpiration::text
FROM customers;

Und dann das ganze mittels Trigger automatisch bei neuen Usern updaten.

Die Test-Server der c't haben 1 GB RAM.

Ciao
Alvar

--
** Alvar C.H. Freude, http://alvar.a-blast.org/
** http://www.wen-waehlen.de/
** http://odem.org/
** http://www.assoziations-blaster.de/

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Andreas Seltenreich 2005-11-13 16:19:08 Re: Speicherverbrauch / c't Datenbank-Contest
Previous Message A. Kretschmer 2005-11-10 06:02:13 Re: Erste Hilfe bei Installation und Einrichtung