MyISAM oder InnoDB?

MyISAM oder InnoDB?

am 21.11.2007 14:47:39 von Rene Weiss

Hallo,

ich entwerfe gerade eine (nicht lebensnotwendige)
Datenbank, die letztlich ca. 60 Mio.
Datensätze a 30 Felder enthalten soll.

In meiner Testumgebung habe ich erstmal 300.000
Datensätze. Laut den gelesenen
Beschreibungen wäre m.E. InnoDB für mich richtige
Wahl. Sehr große DB und etwa
100 User, die mittels SELECT dort suchen.

Ich habe nun mit InnoDB und
"innodb_file_per_table" getestet, um meine DB
"sauber"
in einen Windows-Ordner (mysql/data/innodb) zu
bekommen. Jedoch habe ich dann im Ordner
mysql/data eine 100 MB große "ibdata1" und im
eigens angelegten Ordner mysql/data/innodb
eine 75 MB große "ibdata1". Daneben noch immer im
Verzeichnis "Datenbankname" kleinere
Dateien.
Bei MyISAM haben die beiden Dateien Index+Daten
mit zusammen 60 MB.

Ist es normal, daß ich zwei "ibdata1" habe, die
jeweils größer sind, als die MyISAM-Tabelle?
Oder kommen diese beiden "ibdata1" vielleicht von
meinem Testen?
Habe ich es richtig verstanden, daß es bei InnoDB
NICHT möglich ist, eine DB "sauber" in EIN
Verzeichnis zu legen?

Entstehen mir bei den o.g. Bedingungen Nachteile,
wenn ich MyISAM statt InnoDB nutze?

Gruss
René

Re: MyISAM oder InnoDB?

am 21.11.2007 16:07:42 von Gregor Kofler

Rene Weiss meinte:

http://dev.mysql.com/doc/refman/5.1/de/storage-engines.html

ist IMO recht ausführlich.


> Ich habe nun mit InnoDB und
> "innodb_file_per_table" getestet, um meine DB
> "sauber"
> in einen Windows-Ordner (mysql/data/innodb) zu
> bekommen. Jedoch habe ich dann im Ordner
> mysql/data eine 100 MB große "ibdata1" und im

> eigens angelegten Ordner mysql/data/innodb
> eine 75 MB große "ibdata1". Daneben noch immer im
> Verzeichnis "Datenbankname" kleinere
> Dateien.

> Ist es normal, daß ich zwei "ibdata1" habe, die
> jeweils größer sind, als die MyISAM-Tabelle?

Vielleicht ist jene im mysql/data die "alte" InnoDB-Datei?

> Habe ich es richtig verstanden, daß es bei InnoDB
> NICHT möglich ist, eine DB "sauber" in EIN
> Verzeichnis zu legen?

Nein.
http://dev.mysql.com/doc/refman/5.1/de/multiple-tablespaces. html

"Nach dem Server-Neustart speichert InnoDB jede neu erzeugte Tabelle in
einer eigenen Datei tbl_name.ibd in dem Datenbankverzeichnis, zu dem die
Tabelle gehört."

> Entstehen mir bei den o.g. Bedingungen Nachteile,
> wenn ich MyISAM statt InnoDB nutze?

MyISAM kennt keine referentielle Integrität, keine Transaktionen,...
dafür Volltextsuche. Kommt drauf an, was du brauchst. Die Art der
physischen Speicherung war für mich noch nie ein Grund mich für oder
gegen eine Engine zu entscheiden. Soll es auch nicht, dafür hab ich ja
das DBMS.

Gruß, Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: MyISAM oder InnoDB?

am 21.11.2007 17:49:27 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: MyISAM oder InnoDB?

am 22.11.2007 07:38:36 von Stefan+Usenet

On Wed, 21 Nov 2007 17:49:27 +0100 Andreas Kretschmer wrote:
> > Habe ich es richtig verstanden, daß es bei InnoDB
> > NICHT möglich ist, eine DB "sauber" in EIN
> > Verzeichnis zu legen?

Ganz streng genommen ist das wohl nicht vollstaendig
moeglich, weil sich offene Transaktionen ja auch ueber
mehr als eine der Datenbanken erstrecken koennen.

> Was für eine Rolle spielt das? Eine DB ist dazu da, das 'wie es
> gespeichert wird' dem User gegenüber zu verstecken. Das ist
> komplett Banane, die MySQL das macht.

Es hat gelegentlich Vorteile, wenn man (aus welchen Gruenden auch
immer) sein Backup via rsync zu fernen Hosts machen moechte. Mit
innodb_file_per_table uebertraegt man dann nur jene Tabellen, in
denen Aenderungen aufgetreten sind - bei grossen, relativ statischen
Datenmengen durchaus wuenschenswert.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Intelligent bleibt intelligent: Stefan braucht diese Welt!
(Sloganizer)

Re: MyISAM oder InnoDB?

am 22.11.2007 07:59:13 von Thomas Rachel

Stefan Froehlich schrieb:

> Es hat gelegentlich Vorteile, wenn man (aus welchen Gruenden auch
> immer) sein Backup via rsync zu fernen Hosts machen moechte. Mit
> innodb_file_per_table uebertraegt man dann nur jene Tabellen, in
> denen Aenderungen aufgetreten sind - bei grossen, relativ statischen
> Datenmengen durchaus wuenschenswert.

rsync merkt ja selbst, wo Änderungen aufgetreten sind und wo nicht und
überträgt nur das, was wirklich anders ist - von daher sollte es ok
sein, alles zu übertragen und fertig.


Thomas

Re: MyISAM oder InnoDB?

am 22.11.2007 08:29:19 von Axel Schwenke

Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) wrote:
> On Wed, 21 Nov 2007 17:49:27 +0100 Andreas Kretschmer wrote:
>> > Habe ich es richtig verstanden, daß es bei InnoDB
>> > NICHT möglich ist, eine DB "sauber" in EIN
>> > Verzeichnis zu legen?
>
> Ganz streng genommen ist das wohl nicht vollstaendig
> moeglich, weil sich offene Transaktionen ja auch ueber
> mehr als eine der Datenbanken erstrecken koennen.

Am Thema vorbei?

>> Was für eine Rolle spielt das? Eine DB ist dazu da, das 'wie es
>> gespeichert wird' dem User gegenüber zu verstecken. Das ist
>> komplett Banane, die MySQL das macht.
>
> Es hat gelegentlich Vorteile, wenn man (aus welchen Gruenden auch
> immer) sein Backup via rsync zu fernen Hosts machen moechte. Mit
> innodb_file_per_table uebertraegt man dann nur jene Tabellen, in
> denen Aenderungen aufgetreten sind - bei grossen, relativ statischen
> Datenmengen durchaus wuenschenswert.

Nur daß es nicht funktioniert. Auch mit file_per_table reicht es
*nicht* nur table_name.ibd zu kopieren. Wesentliche Informationen
stecken auch im TX-log und im globalen Tablespace.


XL

Re: MyISAM oder InnoDB?

am 22.11.2007 13:31:07 von Stefan+Usenet

On Thu, 22 Nov 2007 08:29:19 +0100 Axel Schwenke wrote:
> > Mit innodb_file_per_table uebertraegt [rsync] dann nur jene
> > Tabellen, in denen Aenderungen aufgetreten sind - bei grossen,
> > relativ statischen Datenmengen durchaus wuenschenswert.

> Nur daß es nicht funktioniert. Auch mit file_per_table reicht es
> *nicht* nur table_name.ibd zu kopieren. Wesentliche Informationen
> stecken auch im TX-log und im globalen Tablespace.

Sofern man den Server fuer die Zeitdauer des Backups anhaelt,
klappt das durchaus. Die anderen wesentlichen Informationen
werden ja genauso von rsync erfasst, bloss erspart man sich
das Kopieren von (u.U.) dem Grossteil der Daten, wen dieser
seit der letzten Kopie unveraendert geblieben ist.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Stefan - lästern!? Aber eifern ist fröhlicher.
(Sloganizer)