MySQL Datenbank - Maximale Anzahl von Tabellen

  • Allgemein

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von LucaWelker.

    MySQL Datenbank - Maximale Anzahl von Tabellen

    Heyho zusammen

    Eine Frage die mich schon immer interessiert hat, ist folgende:
    "Wieviele Tabellen kann man maximal in einer MySQL Datenbank anlegen?"

    Normalerweise würde ich das kurz googlen und fertig.
    Jedoch habe ich soviele verschiedene Antworten gelesen, dass ich verunsichert bin.

    So wie ich das sehe ist das die richtige Antwort:
    Wenn es eine Grenze gibt, ist die wohl durch das Betriebs- bzw.
    Dateisystem vorgegeben (max. Anzahl Dateien in einem Verzeichnis).

    Trotzdem bleibt meine eigentliche Frage noch:
    Wieviel Tabellen verträgt eine Datenbank auf einem Linux System (FS: ext4)?

    Ich hoffe ihr könnt mich ein wenig aufklären.

    Grüsse
    Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    Dancger schrieb:

    Wenn es eine Grenze gibt, ist die wohl durch das Betriebs- bzw.
    Dateisystem vorgegeben (max. Anzahl Dateien in einem Verzeichnis).

    ...oder durch die maximale Größe von einem Int/Long.

    Die Frage ist aber eigentlich relativ irrelevant (wenn doch spannend). Selbst riesige Programme wie SAP haben in ihrer Grundinstallation "nur" 200-300 Tabellen (Funfact: ...und trotzdem 100GB an Speicherverbrauch bei einer Leerinstallation).
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.

    Chrisber schrieb:

    Die Frage ist aber eigentlich relativ irrelevant (wenn doch spannend). Selbst riesige Programme wie SAP haben in ihrer Grundinstallation "nur" 200-300 Tabellen (Funfact: ...und trotzdem 100GB an Speicherverbrauch bei einer Leerinstallation).
    Was jedoch, wenn wir das Ganze umkehren: Ich brauche 1 Million (oder auch 1 Milliarde) Tabellen, welche jedoch nur 10GB benötigen. Immernoch irrelevant?

    Greez
    Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    Dancger schrieb:

    Ich brauche 1 Million (oder auch 1 Milliarde) Tabellen, welche jedoch nur 10GB benötigen

    Na den Anwendungsfall darfst du mir mal erklären.
    Wir wissen beide, dass das unrealistisch ist. :>
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.

    Chrisber schrieb:

    Wir wissen beide, dass das unrealistisch ist. :>
    Ich denke so: "Wer sich auf das Unmögliche vorbereitet, wir das Mögliche mit Leichtigkeit bewältigen". ;)

    Dann bringe ich mein Beispiel ein:
    Wie du in meiner Signatur erkennen kannst, arbeite ich gerade an einem Chat. Datenbank Struktur steht bereits, wird aber ab und zu wieder geändert (Perfomance Verbesserungen).

    Gehen wir von einem Beispiel aus:
    - 100'000 Nutzer (Ich weiss, soviele Benutzer wird mein Chat wahrscheinlich nie haben, jedoch: Siehe Spruch oben)
    - Jeder Nutzer schreibt mit 10 anderen Nutzer.
    - Jeder Nutzer ist in 10 Gruppen. (Für eine Gruppe haben wir 2 Tabellen)

    Für jede Konversation wird eine Tabelle angelegt. Also:
    100'000 x 10 + 100'000 x (2x 10) = 3'000'000 Tabellen. (Und ja, da alle untereinander schreiben würden, könnte man noch einige 10 Tausend Tabellen abziehen).

    Und nun? Es kann ja nicht sein, dass dann plötzlich die Datenbank überfordert ist.

    Greez
    Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Wenn ihr das wirklich so in der Art plant, dass bei jeder Konversation eine Tabelle angelegt wird habt ihr mMn. einen riesigen Designfehler.
    Ich kenn mich Datenbanken in extremer Größenordnung nicht aus (wie das dann mal mit der Performance und so aussieht), jedoch würd ich da eine Tabelle haben welche mit IDs versehen sind. Jede Konversation erhählt da eine ID und da isses egal in welchen Gruppen oder sonst wo diese noch drin sind.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    Wenn ihr das wirklich so in der Art plant, dass bei jeder Konversation eine Tabelle angelegt wird habt ihr mMn. einen riesigen Designfehler.
    Ich kenn mich Datenbanken in extremer Größenordnung nicht aus (wie das dann mal mit der Performance und so aussieht), jedoch würd ich da eine Tabelle haben welche mit IDs versehen sind. Jede Konversation erhählt da eine ID und da isses egal in welchen Gruppen oder sonst wo diese noch drin sind.
    Es gibt eine Tabelle, welche sämtliche Gruppen (und deren IDs) besitzt. Wir eine Konversation gestartet, die es noich nicht gibt, wird eine neue Gruppe in die Tabelle eingetragen und eine Tabelle mit der GruppenID erstellt (z.B. c_123).

    ErfinderDesRades schrieb:

    Keinesfalls sind zur Laufzeit weitere Tabellen anzulegen
    Ich wusste, dass ich Kritik einstecken muss, seit du in der "Wer ist im Thema" Liste warst ;)
    Nun lass mich auch erfahren, wie man es richtig anstellt :) (Links?)

    Grüsse
    Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    hihi.

    Dassis glaub eine m:n - Relation zw. ChatRoom und User.
    Da musses also eine Zwischentabelle geben, deren Datensätze jeweils einen User einem ChatRoom zuordnet, indem dieser Datensatz sowohl auf einen ChatRoom als auch auf einen User verweist.

    gugge die relationale GrundIdee. Es ist strukturell dasselbe wie mit den dortigen Personen und Berufen, nur dasses statt Berufen halt Chatrooms sind.

    Dancger schrieb:

    Für jede Konversation wird eine Tabelle angelegt.

    Man kann natürlich jede "Diskussion" ad absurdum führen.
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.

    ErfinderDesRades schrieb:

    gugge die relationale GrundIdee. Es ist strukturell dasselbe wie mit den dortigen Personen und Berufen, nur dasses statt Berufen halt Chatrooms sind.
    Alle meine Benutzer sind in einer Tabelle. Alle Gruppen sind in einer Tabelle. Eine Tabelle, in welcher steht, wie Benutzer und Gruppen verknüpft sind. Und dann eine Tabelle, in welcher die Nachrichten stehen. Diese werden dann Anhand einer eindeutigen ID (MessageId) und der ID der Zwischentabelle (Kombi aus Benutzer und Gruppe) identifiziert? Hab ich das richtig verstanden?

    Chrisber schrieb:

    Man kann natürlich jede "Diskussion" ad absurdum führen.
    Was willst du mir sagen?

    Greez
    Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    Dancger schrieb:

    Alle meine Benutzer sind in einer Tabelle. Alle Gruppen sind in einer Tabelle. Eine Tabelle, in welcher steht, wie Benutzer und Gruppen verknüpft sind. Und dann eine Tabelle, in welcher die Nachrichten stehen. Diese werden dann Anhand einer eindeutigen ID (MessageId) und der ID der Zwischentabelle (Kombi aus Benutzer und Gruppe) identifiziert? Hab ich das richtig verstanden?
    Weiß nicht.
    Weil ich verstehe dein Deutsch nicht:
    Eine Tabelle, in welcher steht, wie Benutzer und Gruppen verknüpft sind.
    Ja, was ist mit der Tabelle, und v.a.: wie heißt die Tabelle?

    Ist eh gut, die Namen der Tabellen zu kennen, weil da kannman dann besser drüber reden - also wie heißen deine Tabellen für Benutzer und für Gruppen und für Messages?

    kannst auch gleich das Datenmodell skizzieren, wenn du die Namen weißt, etwa so:
    Gruppe->GruppenUser<-User
    GruppenUser->Message

    (Dieses unscheinbare Datenmodell enthält gleich paar Vorschläge auch für knappe und sinnvolle TabellenNamen)

    man könnte auch anners modellieren, vlt. noch besser:
    ChatRoom->Message<-User

    Das sagt aus, dass jeder User in jedem ChatRoom Messages absondern kann.

    ErfinderDesRades schrieb:

    Weil ich verstehe dein Deutsch nicht:
    Entschuldigung.

    ErfinderDesRades schrieb:

    also wie heißen deine Tabellen für Benutzer und für Gruppen und für Messages?

    Nehmen wir deine Tabellennamen, meine sind ähnlich (Ausserdem würde die Zwischentabelle 'GruppenUser' fehlen)

    ErfinderDesRades schrieb:

    Gruppe->GruppenUser<-User
    GruppenUser->Message
    Das wollte ich sagen :D

    Somit wären wirklich alle Nachrichten in einer Tabelle. So hatte ichs beim Projektstart auch.
    Das bereitet mir, wenn ich ehrlich bin, ein wenig Kopfschmerzen:

    Wenn viele Nachrichten geschrieben werden, ist die Tabelle randvoll (einige Millionen/Milliarden Nachrichten).
    Werden da "SELECT" Abfragen nicht abartig langsam?

    Ich habs extra nochmals umgebaut, da ich gedacht habe, dass es sinnvoller ist, für jede Konversation eine Tabelle zu haben.
    So hätte man einen kleinen Performance Verlust, beim Erstellen einer neuen Konversation, jedoch Geschwindigkeitsvorteile bei allem anderen.
    Oder irre ich mich da?

    Greez
    Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dancger“ ()

    ErfinderDesRades schrieb:

    jo, du irrst gewaltig.
    In diesem Fall "Danke" fürs aufklären.

    ErfinderDesRades schrieb:

    Bei Millionen Datensätzen fängt Sql erst an, sich wohl zu fühlen - vorher fühltes sich elendig unterfordert ;)
    In diesem Fall bastel ich das wieder um. Ich hoffe, ich bereue das nicht :D (Aber wenn du das sagst, glaub ich das auch)

    ErfinderDesRades schrieb:

    Kannst den Messages auch einen TimeStamp mitgeben, und mw. gelegentlich alle über 1 Jahr alten weghauen.
    Timestamp ist sowieso drin. Was den anderen Punkt anbelangt: Der User soll die Kontrolle über seine "Daten" haben. Wie lange ein Benutzer die Nachrichten möchte, kann er einstellen :)

    Danke EDR für deine Mühen :thumbsup:

    Greez
    Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Wenn ein Chat mit SQL erstellen willst wirst du eher an die Grenzen der IDs stoßen :P

    Ich habe mal aus langeweile und zum lernen ein SQLChat mit PHP gemacht und hatte dort auch lediglich nur 3 Tabellen. Eine Nutzertabelle, eine Gruppentabelle und eine für den eigenlichen Chat wo die Messages drin standen, alle Messages die öffentlich im Chatroom standen und auch die persönlichen, also wenn man jemand direkt anschreibt. Möchte man noch Chatrooms hinzufügen würde man eine weitere Tabelle dafür anlegen und hättest somit 4 Tabellen.

    Und wegen der Geschwindigkeit, selbst Google setzt auf mySQL wobei größere (Industrie-)Datenbanken eigentlich eher Oracle nutzen.

    Dodo schrieb:

    Wenn ein Chat mit SQL erstellen willst wirst du eher an die Grenzen der IDs stoßen :P

    Eine ID muss nicht immer eine Zahl sein ;) In einem Magazin kam mir das letztens mal unter, dass irgendwie eine Art GUID mit eingerechnet wird und das als ID gilt (ist scheinbar auch einzigartig).
    Somit hast mehr oder weniger unendlich IDs zur Verfügung.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    Dodo schrieb:

    Wenn ein Chat mit SQL erstellen willst wirst du eher an die Grenzen der IDs stoßen :P
    Das sehe ich eher als kleines Problem: Ich mach eine Spalte IDP (Primär) vom Typ "bigint" und eine zweite Spalte mit dem Namen IDS (Sekundär), welche ebenfalls vom Typ "bigint" ist. Zuerst wird die Zahl in der primären hochgezählt. Ist die grösste Zahl erreicht, wird diese wieder auf 0 gesetzt und die IDS um 1 hochgezählt.
    Somit habe ich "unendlich" IDs :)

    Geschwindigkeit wird schon passen.

    @All
    Danke an euch :thumbsup:
    Ich geh jetzt die Datenbank umstellen :P

    Greez Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...