Größere Datenbank

Kicker007

Grünschnabel
Hallo Zusammen,

ich komm bei meiner Datenbank leider an meine Grenzen, und hoffe dass mir jemand helfen kann.

  • Server Version: 5.6.14 - MySQL Community Server (GPL)

Ich kenne mich leider noch nicht so gut aus mit Datenbanken, benutze Windows 7 64-Bit, 12GB Arbeitsspeicher, Intel Core i5 2,67GHz, X Xampp, MySQL und lese die Daten mit Hilfe von PHP ein.

Datenbank-Server:
  • Server: localhost via TCP/IP
  • Server-Typ: MySQL
  • Server Version: 5.6.14 - MySQL Community Server (GPL)
  • Protokoll-Version: 10
Web-Server:
  • Apache/2.4.7 (Win32) OpenSSL/1.0.1e PHP/5.5.6
  • Datenbank-Client Version: libmysql - mysqlnd 5.0.11-dev - 20120503 - $Id: 40933630edef551dfaca71298a83fad8d03d62d4 $
  • PHP-Erweiterung: mysqli

Ich möchte Statische (Haupt)Tabellen erstellen, mit einer bestimmten Anzahl an Datensätze, die einmal eingelesen werden sollen, und nicht mehr verändert werden sollen.
Aus den (Haupt)Tabellen, sollen weitere Tabellen durch Verknüpfungen entstehen, die auch Statisch sein sollen, und nicht bzw. kaum verändert werden sollen.
Aus ca. 10 Tabellen sollen dann jeweils 1-2 Datensätze in max. 20 Sekunden ausgelesen und ausgegeben werden.

Mein Problem ist gerade die Datenmenge (bis jetzt ca. 6Mio. Datensätze, 15 Spalten mit Zahlen, kleinen Textbausteinen, und Links zu Bildern). Das einlesen der Daten dauert jetzt schon ein Tag!
Das Schlimme ist, dass die größte Tabelle ca. 30 Spalten haben soll, mit ca. 700 Mrd. Datensätzen.

Ich weiß nicht, wie ich das so kostengünstig (am liebsten umsonst) realisieren kann.
Evtl. anderes Datenbanksystem?

Ich bitte um Hilfe, und Bedanke mich schon jetzt für eure Vorschläge.

Mit freundlichen Grüßen

Kicker007
 
Zuletzt bearbeitet:
Hi

zuerst einige Gegenfragen:

Ist dir klar, wie viel Festplattenplatz du benötigst?
Angenommen, ein Datensatz deiner größten Tabelle hat hat pro Spalte im Durchschnitt 20Byte
("kleine Textbausteine", dazu ein paar IDs, sehr optimistisch gerechnet, schon inkl. Overhead).
700G*20*30 = 720 Terabyte. Pro Tabelle.
Miet dir was in einem Rechenzentrum von Google, dein Rechner reicht bei weitem nicht... :p
Und zB. Amazon EC2 ist zu teuer, mit rund 60000 Dollar Startpreis und 60 pro
Verwendungsstunde zusätzlich, auch pro Tabelle. :rolleyes:
Mit Backup und zeitmäßigem Verbrauch etc. fang ich besser gar nicht an...

Kannst du beschreiben, was du vorhast, um eine Alternativlösung zu finden?

Woher kommen die Daten, wozu werden sie dann verwendet?
Geht es wirklich um eine Website oder wird nur PHP verwendet weil du die Sprache am besten kannst etc.?
Wie oft sollen dann Abfragen passieren? 100 Mal in der Sekunde, 1 Mal pro Woche...?

Pro Haupttabelle einige weitere, die jeweils Teile von der Haupttabelle kopiert enthalten?
Soll das einen Geschwindigkeitsgewinn für bestimmte Abfragen bringen oder wozu ist sonst das geplant?
 
Erst einmal vielen Dank für die schnelle Beantwortung,

Also ich wollte zu ein Kartenspiel (52 Karten --> 7 Karten auf der Hand) Berechnungen und Analysen durchführen.

Ich habe drei Grundtabellen:
(4Datensätze, 52Datensätze und 13Datensätze)
upload_2014-6-5_18-22-46.pngupload_2014-6-5_18-23-27.pngupload_2014-6-5_18-24-14.png
aus denen die KombinationsBlätter gebildet werden:

In diesem Fall nur für 2 Kartenkombinationen, also 2652 Möglichkeiten, die aber mehr werden.
(Bis zur 4.Kombination --> 6,5Mio Datensätze hat es ja au so geklappt);-(

upload_2014-6-5_18-25-56.pngupload_2014-6-5_18-28-55.png-->upload_2014-6-5_18-29-27.png
Außerdem möchte ich auch wissen, welche 2er Kombinationen in den 3er Kombinationen stecken, und wie viele.

Auch persönliche Spielergebnisse sollen miteinfliesen, und Analysiert werden.

Ich denke, dass ich das ganze auch kompakter gestalten könnte, und Nein, es muss nicht unbedingt eine Webseite sein (da ich es ausschließlich privat verwenden möchte), aber Anschaulich sollte es sein, und und Ja, ich verwende PHP weil ich kaum was anderes kenne;-(

Mit freundlichen Grüßen

Kicker007
 
Zuletzt bearbeitet:
Ich sehe ehrlich gesagt nicht ein, warum du dazu 3 Tabellen brauchst. Füll doch einfach einmal deine 52 Spielkarten in eine Tabelle ab und mach dann ein Kartesisches Produkt. Ich hab dir mal ein kleines Beispiel für die 2er combo vorbereitet:
http://www.sqlfiddle.com/#!2/7833e/1

Allerdings habe ich keine Ahnung wie du deine Kicker und Punkte berechnest und wozu du eine ID und eine Nummer brauchst, wenn diese doch die selbe Information darstellen...

Was genau willst du denn damit Berechnen/Analysieren. Nur die combos alleine kanns ja wohl nicht sein.
 
Vielen Dank für die Mühe, die du dir gemacht hast.:cool:

Zu den drei Grundtabellen:
Ich habe Sie deswegen angelegt, weil ich unterschiedliche Bilder abgespeichert habe:
upload_2014-6-5_21-48-7.png upload_2014-6-5_21-48-47.png upload_2014-6-5_21-49-18.png

Zu den IDs:
Ich war der Meinung, dass ich nur durch eine Eindeutige ID pro Zeile, die Zeile auch wieder aufrufen kann.
z.B.:
upload_2014-6-5_22-27-54.png
bzw.
upload_2014-6-5_22-46-54.png
oder eben andere Werte ausgeben. Je nachdem was ich gerade Berechnen mag, aber ich mag eben vieles Berechnen können.
Meine Meinung war halt auch, dass ich die Tabellen nur einmal füllen muss, (kann ja ein paar Tage dauern, aber nicht zu viele), und dann kann ich die Daten jederzeit (relativ schnell) wieder abrufen.

Ich versteh aber noch nicht ganz wo der "große Unterschied" zu meiner Tabelle im Vergleich zu deiner ist, außer dass du die ID, die Bilder, die Kickers und die Punkte weggelassen hast ist.
Kann ich dafür nochmal eine Erklärung haben? Irgendwie hab ichs nicht ganz verstanden.

Aber merci für die Mühe ;-)

Mit freundlichen Grüßen

Kicker007
 
Zuletzt bearbeitet:
Hab mir den letzten Eintrag nochmal durch den Kopf gehen lassen, und ich glaube, dass ich falsch gedacht habe.

Sorry, und Merci
;-)
 
Ok, dann habe ich offenbar dein Problem noch nicht ganz verstanden. Beantworte uns doch mal ein paar Fragen.

Item1: Im ersten Post hast du geschrieben, dass eine Tabelle 700 Mrd. Datensätze haben wird. Wie kommst du auf diese Zahl? Mit einem Spieldeck à 52 Karten komme ich auf lediglich 6'497'400 mögliche Kombinationen von 4 Karten (52*51*50*49).

Item2: Wenn du von Kombinationen sprichst: ist z.B. Herz Zwei und Herz Drei das gleiche wie Herz Drei und Herz Zwei? Sprich spielt die Reihenfolge in der du die Karten ziehst eine Rolle oder nicht? Falls nein, verringert sich die Zahl deiner möglichen Kombinationen drastisch.

Item3: Frage: hast du dir bislang die Kombinationen allesamt von Hand einzeln in eine Tabelle eingetragen? Was ich dir mit meinem Beispiel zeigen wollte ist, dass du so etwas ganz einfach von SQL berechnen lassen kannst. Das könnte man dann entweder für eine View brauchen, oder aber du erstellst dir mit der Query die Kombinationstabelle automatisch (Stichwort create table as select).

Item4: Du schreibst oben du hast drei Grundtabellen (4 Datensätze, 52 Datensätze und 13 Datensätze). Ich nehme mal an, dass die mittlere die mit den 52 Karten ist? Was genau sind denn die Tabellen mit 4 und 13 Datensätzen? Wieso 4? Weil 4 Farben? Wieso 13? Weil 13 Zahlen? Du hast geschrieben das sei für verschiedene Bilder? Kannst du nicht einfach deine Kartentabelle (mit 52) um weitere Spalten ergänzen? Eg. bild_K/M/G, bild_K/M/G_zahl, bild_K/M/G_farbe? Kannst du direkt mit Textfelder machen oder mit FK's.

Item5: Zu deiner Frage warum ich die Bilder weggelassen habe: weil ich dir nur ein kleines Beispiel gemacht habe und nicht alles hinschreiben wollte. Natürlich kommen die da auch mit hin. Aber mir ging es ja primär darum dir zu zeigen wie man mit nur einer Tabelle und einem Kartesischen Produkt die Kombinationen berechnet.

Item6: Zu der ID. Ja, wenn du von der Kombinationstabelle sprichst. Da kannst du schon eine ID haben, ist auch gut so. Aber ich habe eigentlich von deiner Kartentabelle gesprochen (die mit nur 52 Einträgen). Erklär mit da mal den Unterschied von ID und Nummer? Steht da nicht genau das gleiche drin?

Item7: Zu deiner Frage warum ich Punkte und Kicker weggelassen habe. Das habe ich dir ja bereits geschrieben: ich habe keine Ahnung wie du diese Berechnest. Kannst du uns denn verraten, wie man diese Felder berechnet? Dann kann ich dir evtl. auch weiterhelfen.

Item8: Du schreibst du willst vieles berechnen können? Was denn genau? Wenn du uns verraten kannst was genau du eigentlich berechnen willst, können wir dir evtl. auch besser helfen.
 
Zu Item 1: 52*51*50*49*48*47*46 (7 Karten)

Zu Item 2: Die Reihenfolge ist unwichtig, aber es müssen alle möglichen Kombinationen vorkommen.

Zu Item 3: Nein, ich habe PHP für die Berechnungen hergenommen, und Sie über INSERT "eingelesen"

Zu Item 4: Dass in Tabelle 2 alle 52 Karten enthällt stimmt, aber die anderen beiden Tabelle brauche ich nur später, wenn ich die Warscheinlichkeiten ausrechnen mag. D.h. Wenn z.B. 6 Karten liegen, ob ich nur eine "9" brauch um mein Blatt zu "verbessern", soll er mir die 9 aus der 3.Tabelle als Bild anzeigen. Wenn aber eine "Herz 9" fehlt, um das Blatt zu "verbessern", soll er die "Herz 9" aus Tabelle 2 nehmen. (Nur die 2.Tabelle nehm ich aber her, um die Kombinationen auszurechnen).

Zu Item 5: Danke für die Erklärung ;)

Zu Item 6: Du hast vollkommen Recht, die ID und Nummer sind in der 2.Tabelle gleich.:rolleyes:

Zu Item 7 & 8: Die Punkte und Kicker Berechnungen, sind zu Individuell, und sind von bei jeder Kartenanzahl Unterschiedlich.

Mit freundlichen Grüßen

Kicker007
 
Zu Item 1: 52*51*50*49*48*47*46 (7 Karten)
Aha, also willst du 7 Kartenkombinationen kennen und nicht nur 4...

Zu Item 2: Die Reihenfolge ist unwichtig, aber es müssen alle möglichen Kombinationen vorkommen.
Habe ich mir bereits gedacht. In dem Fall hast du viel weniger mögliche Kombinationen:
(52*51*50*49*48*47*46)/(7*6*5*4*3*2*1) = 133'784'560
(wird auch als (52*51*50*49*48*47*46)/7! geschrieben)

Zu Item 3: Nein, ich habe PHP für die Berechnungen hergenommen, und Sie über INSERT "eingelesen"
Da wundert es mich nicht dass es selbst für 6.5 mio lange dauert. Hier hast du mal die Query für 3 Karten:
http://www.sqlfiddle.com/#!2/93ec32/6
Die kannst du nun selber aufblähen für deine 7 Kartenkombinationen und nimm auch deine Bilder mit dazu wenn du die brauchst.
Wenn ich dich wäre würde ich dann mal schauen wie lange diese Query dauert und die Query verwenden für eine View oder ein Create table as select statement. Wenn du dann noch einen eindeutige ID für diese Kombotabelle willst kannst du das auch mit mysql machen. Dann kannst du dann damit berechnen was immer du magst.

Zu Item 6: Du hast vollkommen Recht, die ID und Nummer sind in der 2.Tabelle gleich.:rolleyes:
Na dann würde ich die Nummer auch weglassen. Bringt dir ja nichts das selbe zweimal zu speichern.

Zu Item 7 & 8: Die Punkte und Kicker Berechnungen, sind zu Individuell, und sind von bei jeder Kartenanzahl Unterschiedlich.
Na wenn du es nicht sagen willst kann man dir damit auch nicht helfen...
 

Neue Beiträge

Zurück