DBs - welche nehmen?

19/03/2008 - 15:33 von Tim Landscheidt | Report spam
Hallo,

bei einer Anwendung muss ich auf:

- etwa 70000 "Mengenzugehörigkeiten" ("'a' existiert" oder
"'a' => 1") und
- etwa 450000 "Verweise" ("'b' => 'c'")

zugreifen können ("a" und "b" sind jeweils einzigartig).
Langfristig sollen die Daten in einer relationalen Datenbank
gespeichert werden, für den Offline-Betrieb und für defi-
nierte Tests möchte ich jedoch regelmàßig einen Snapshot an-
fertigen und diesen verwenden.

Meine ersten Ideen dazu waren bisher eine Textdatei, die
bei jedem Programmlauf gelesen wird, und ein perl-Modul, das
per Data::Dumper oder àhnlichem erzeugt wird und die Daten
enthàlt. Bevor ich mich an das Benchmarken mache, wollte ich
aber noch die DB-Module testen, und da hapert es momentan.

Öffne ich beispielsweise die Datenbank mit:

| my $db_d = tie (%DisAmbs, 'DB_File', 'disambs.db', O_CREAT | O_RDWR, 0666, $DB_BTREE);

und fülle den Hash à la:

| $DisAmbs {$KEY} = 1 if ($CONDITION);

beschwert perl sich zunàchst darüber, dass ich ihm Unicode-
Zeichen vorsetze; dies làsst sich mit:

| $db_d->Filter_Push ('utf8');

beheben.

Mit der Performance bin ich allerdings nicht sonderlich
zufrieden: Das Füllen der beiden Datenbanken dauert auf mei-
nem Rechner gut eine Stunde, PostgreSQL benötigt für die
gleiche Aufgabe nicht einmal eine Minute. Ehe ich weiter in
dem Nebel herumstochere: Wie kann man den Prozess beschleu-
nigen? Die Dokumentation scheint leider nur für bereits Ini-
tiierte geschrieben zu sein.

Vielen Dank,
Tim
 

Lesen sie die antworten

#1 Christian Kirsch
19/03/2008 - 18:13 | Warnen spam
Tim Landscheidt schrieb:
Hallo,

bei einer Anwendung muss ich auf:

- etwa 70000 "Mengenzugehörigkeiten" ("'a' existiert" oder
"'a' => 1") und
- etwa 450000 "Verweise" ("'b' => 'c'")

zugreifen können ("a" und "b" sind jeweils einzigartig).
Langfristig sollen die Daten in einer relationalen Datenbank
gespeichert werden, für den Offline-Betrieb und für defi-
nierte Tests möchte ich jedoch regelmàßig einen Snapshot an-
fertigen und diesen verwenden.




"relationale Datenbank" muss ja nicht unbedingt "Client-Server" heißen.
Es gibt z.B. SQLite (das Apple in Mac OS X inzwischen für alles mögliche
nutzt, u.a. für Addressbook) und BerkeleyDB (von Oracle, aber frei). Das
sind "embedded" Datenbanken, also "offline", wenn Du so willst.

Ähnliche fragen