Ich muss einen speziell entwickelten Webanalysedienst für eine große Anzahl von Websites implementieren. Die wichtigsten Einrichtungen sind hier:Datenbankarchitektur für Millionen neuer Zeilen pro Tag
- Webseite
- Besucher
Jeder einzigartige Besucher eine einzelne Zeile haben in der Datenbank mit Informationen wie Zielseite, Tageszeit, Betriebssystem, Browser, Referrer haben , IP, usw.
ich brauche aggregierte Abfragen dieser Datenbank wie ‚COUNT alle Besucher, die Windows als Betriebssystem und kam von Bing.com haben‘ zu tun
Ich habe Hunderte von Websites zu verfolgen und die Anzahl der Besucher für diese Websites reichen von ein paar hundert pro Tag bis zu wenigen Millionen pro Tag. Insgesamt erwarte ich, dass diese Datenbank um etwa eine Million Zeilen pro Tag wächst.
Meine Fragen sind:
1) Ist MySQL eine gute Datenbank für diesen Zweck?
2) Was könnte eine gute Architektur sein? Ich denke daran, für jede Website eine neue Tabelle zu erstellen. Oder starten Sie vielleicht mit einer einzigen Tabelle und erstellen Sie dann eine neue Tabelle (täglich), wenn die Anzahl der Zeilen in einer vorhandenen Tabelle 1 Million überschreitet (ist meine Annahme richtig). Meine einzige Sorge ist, dass, wenn eine Tabelle zu groß wird, die SQL-Abfragen dramatisch langsam werden können. Also, was ist die maximale Anzahl von Zeilen, die ich pro Tabelle speichern sollte? Darüber hinaus gibt es eine Begrenzung für die Anzahl der Tabellen, die MySQL verarbeiten kann.
3) Ist es ratsam, Aggregatabfragen über Millionen von Zeilen durchzuführen? Ich bin bereit, ein paar Sekunden zu warten, um Ergebnisse für solche Abfragen zu erhalten. Ist es eine gute Vorgehensweise oder gibt es eine andere Möglichkeit, Aggregatabfragen durchzuführen?
Auf den Punkt gebracht, Ich versuche, ein Design eine groß angelegte Data-Warehouse Art von Einrichtung, die schwer schreiben wird. Wenn Sie über veröffentlichte Fallstudien oder Berichte Bescheid wissen, wird das großartig!
Wenn Sie bereits Ihre Datenbank entworfen haben. Können Sie das Datenbankdesign teilen? –