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/
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 |