Zu viele Columns in einer Table

Zu viele Columns in einer Table

am 06.08.2007 17:18:35 von MBR

Hi,

ich habe das folgende Problem: ich versuche eine Tabelle zu erzeugen mit
1300 Spalten, leider bekomme ich eine Fehlermeldung wie folgt: Error
message "1117: too many columns".



Nach

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.h tml

gibt es in der Tat eine Begrenzung für InnoDB (und wohl auch für MyISAM)
Tabellen von 1000 Spalten. Leider kann ich die Tabelle nicht splitten,
ohne mein Framework neu zu programmieren. Weiss jemand eine Lösung?
Vielleicht eine andere Storage engine?

Danke,

Matthias

Re: Zu viele Columns in einer Table

am 06.08.2007 17:29:16 von Christian Kirsch

Am 06.08.2007 17:18 schrieb Matthias Braun:
> Hi,
>
> ich habe das folgende Problem: ich versuche eine Tabelle zu erzeugen mit
> 1300 Spalten, leider bekomme ich eine Fehlermeldung wie folgt: Error
> message "1117: too many columns".
>
>

1300 Spalten? Wozu?

>
> Nach
>
> http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.h tml
>
> gibt es in der Tat eine Begrenzung für InnoDB (und wohl auch für MyISAM)
> Tabellen von 1000 Spalten. Leider kann ich die Tabelle nicht splitten,
> ohne mein Framework neu zu programmieren. Weiss jemand eine Lösung?
> Vielleicht eine andere Storage engine?

Vielleicht ein, äh, verbesserungswürdiges Design - sowohl der
Datenbank als auch des Frameworks?

--
Christian

Re: Zu viele Columns in einer Table

am 06.08.2007 18:03:38 von Sven Paulus

Matthias Braun wrote:
> gibt es in der Tat eine Begrenzung für InnoDB (und wohl auch für MyI=
SAM)=20
> Tabellen von 1000 Spalten. Leider kann ich die Tabelle nicht splitten,=20
> ohne mein Framework neu zu programmieren. Weiss jemand eine Lösung?=20
> Vielleicht eine andere Storage engine?

Du solltest auf SQLite wechseln und mal Dein Framework aendern, so dass es
eine Milliarde Spalten benoetigt (ein paar Reserve-Spalten koennen ja nie
schaden, wer weiss, was die Zukunft bringt). Dann koenntest Du gleich der
erste sein, der folgenden Abschnitt aus der SQLite-Doku ueberprueft:

"The default setting for SQLITE_MAX_COLUMN is 2000. You can change it at
compile time to values as large as 32676. You might be able to redefine t=
his
value to be as large as billions, though nobody has ever tried doing that=
so
we do not know if it will work. On the other hand, there are people who w=
ill
argue that a well-normalized database design will never need a value larg=
er
than about 100."

Re: Zu viele Columns in einer Table

am 06.08.2007 18:15:42 von Gregor Kofler

Matthias Braun meinte:
> Hi,
>
> ich habe das folgende Problem: ich versuche eine Tabelle zu erzeugen mit
> 1300 Spalten, leider bekomme ich eine Fehlermeldung wie folgt: Error
> message "1117: too many columns".

Wer 1300 Spalten braucht, hat relationale DBs nicht verstanden. Ehrlich.

> Nach
>
> http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.h tml
>
> gibt es in der Tat eine Begrenzung für InnoDB (und wohl auch für MyISAM)
> Tabellen von 1000 Spalten. Leider kann ich die Tabelle nicht splitten,
> ohne mein Framework neu zu programmieren. Weiss jemand eine Lösung?

Das Framework doch neu programmieren.

Auch wenn das natürlich prinzipiell Schmarrn ist: Du könntest die
Tabelle sehr wohl entlang Spalten splitten. So du nicht alle Spalten
gleichzeitig brauchst, kannst du ja in den Queries dir die Spalten aus
den Tabellen zusammensuchen. (Schlüsselfelder bräuchte es halt noch).

> Vielleicht eine andere Storage engine?

Selbst wenn die mehr Spalten "könnten" - jede SE hat viele andere
(entscheidendere) Vor- und Nachteile.

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: Zu viele Columns in einer Table

am 06.08.2007 18:47:05 von MBR

Hallo Jungs,

danke für den Tip - es handelt sich um normalisierte Datenbanktabellen
mit genau 1325 Spalten - vorgegeben durch ein Telekommunikations-Switch
welches exakt alle 15 Minuten genausoviele Datensätze pro logische
Einheit produziert. Um die Tabellen zu spalten müsste ich
lookup-Tabellen konstruieren, welches wiederum auf die Performance geht
(1000 Nodes per 15 Minuten).

Habe inzwischen eine Lösung - kürzere Spaltennamen helfen.

Matthias

Gregor Kofler schrieb:
> Matthias Braun meinte:
>> Hi,
>>
>> ich habe das folgende Problem: ich versuche eine Tabelle zu erzeugen
>> mit 1300 Spalten, leider bekomme ich eine Fehlermeldung wie folgt:
>> Error message "1117: too many columns".
>
> Wer 1300 Spalten braucht, hat relationale DBs nicht verstanden. Ehrlich.
>
>> Nach
>>
>> http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.h tml
>>
>> gibt es in der Tat eine Begrenzung für InnoDB (und wohl auch für
>> MyISAM) Tabellen von 1000 Spalten. Leider kann ich die Tabelle nicht
>> splitten, ohne mein Framework neu zu programmieren. Weiss jemand eine
>> Lösung?
>
> Das Framework doch neu programmieren.
>
> Auch wenn das natürlich prinzipiell Schmarrn ist: Du könntest die
> Tabelle sehr wohl entlang Spalten splitten. So du nicht alle Spalten
> gleichzeitig brauchst, kannst du ja in den Queries dir die Spalten aus
> den Tabellen zusammensuchen. (Schlüsselfelder bräuchte es halt noch).
>
>> Vielleicht eine andere Storage engine?
>
> Selbst wenn die mehr Spalten "könnten" - jede SE hat viele andere
> (entscheidendere) Vor- und Nachteile.
>
> Gruß, Gregor
>
>

Re: Zu viele Columns in einer Table

am 06.08.2007 21:26:10 von thborsdorf

Hi Matthias!

Matthias Braun schrieb am 06.08.2007 18:47:
> es handelt sich um normalisierte Datenbanktabellen

Normalisierung hin oder her, solange man weis wann man sie EBEN NICHT
anwendet...

> mit genau 1325 Spalten - vorgegeben durch ein Telekommunikations-Switch
> welches exakt alle 15 Minuten genausoviele Datensätze pro logische
> Einheit produziert.

Verstehe ich das richtig das du 15min Zeit hast um 1325 Datensätze zu
erzeugen? Das sollte ja sogar Acce$$ schaffen...
Wieso aber willst du dafür 1325 Spalten und nicht 1325 Datensätze verbraten?

> (1000 Nodes per 15 Minuten).

Also 1325 * 1000 Datensätze pro 15min? Macht 1473 Datensätze pro
Sekunde, das müsste klappen.

> Habe inzwischen eine Lösung - kürzere Spaltennamen helfen.

okay, wenn du meinst...

> Matthias

MfG Thomas.

Re: Zu viele Columns in einer Table

am 06.08.2007 23:36:11 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: Zu viele Columns in einer Table

am 07.08.2007 00:03:32 von Daniel Fischer

Matthias Braun!

> danke für den Tip - es handelt sich um normalisierte Datenbanktabellen
> mit genau 1325 Spalten - vorgegeben durch ein Telekommunikations-Switch
> welches exakt alle 15 Minuten genausoviele Datensätze pro logische
> Einheit produziert.

Sind diese Datensätze wirklich alle unterschiedlicher Natur?

Oder gibt es eine Systematik, nach der sie sich richten?

Es ist einfach schwer nachzuvollziehen, wozu irgendetwas 1325 verschiedene
Spalten braucht. Was steht denn in diesen Spalten eigentlich drin?

> Um die Tabellen zu spalten müsste ich
> lookup-Tabellen konstruieren, welches wiederum auf die Performance geht
> (1000 Nodes per 15 Minuten).

Nein, müsstest du nicht. Du müsstest nur den selben Primärschlüssel
für alle Teiltabellen benutzen. Dann könntest du jede Abfrage relativ
einfach auf JOINs umschreiben.


Gruß
Daniel

Re: Zu viele Columns in einer Table

am 07.08.2007 00:04:54 von Thomas Rachel

Matthias Braun schrieb:

[...]

> Um die Tabellen zu spalten müsste ich
> lookup-Tabellen konstruieren, welches wiederum auf die Performance geht
> (1000 Nodes per 15 Minuten).

Hast Du es tatsächlich getestet, oder vermutest Du nur?


> Matthias
>
> Gregor Kofler schrieb:
>> Matthias Braun meinte:

Machst Du immer Kopfstand beim Newslesen und -schreiben? Ich nicht. Ist
nämlich unpraktisch Viel praktischer ist, TOFU zu unterlassen und die
Antworten unter das Zitat zu schreiben, wie es hier im Prinzip jeder
andere macht...


Thomas