Frage

Ich arbeite an Flottenmanagement. Ich habe große Menge an Schreibvorgängen auf einer Ortstabelle mit folgenden Spalten

  1. date
  2. Zeit
  3. Fahrzeug-Nr.
  4. lang
  5. Breite
  6. Geschwindigkeit
  7. Benutzer-ID (die Fremdschlüssel ...)

Hier ist diese Tabelle wird Schreibvorgang haben alle 3 Sek. Daher wird es Millionen von Rekord drin sein. So abrufen schnellere Daten Ich plane Partition. Nun meine Frage: -

  1. Wie Fremdschlüssel behandeln? Ich hörte, dass Partition nicht Fremdschlüssel nicht unterstützt
  2. Welche Spalte sollte Partition verwendet werden.
  3. ist es notwendig, eindeutige Schlüssel als Trennsäule zu haben.

Es wird Billionen Rekord sein

@ rc-Dank man..what abt die Leistung ... sehe ich bin Daten nach jedem 3 sec Einfügen so i i die Daten einfügen jedes Mal ein Prüfschema laufen müssen ... so was über die Leistung ?? ?

2> Ich mag Trennwandkolonne als Fahrzeug nicht gehen ..... gibt es eine alternative Art und Weise ...

War es hilfreich?

Lösung

lesen: MySQL Partitioning Einschränkungen

1.) FKs nicht auf partitionierten Tabellen unterstützt.

  • Eine Möglichkeit ist, um eine gespeicherte Prozedur zu erstellen, dass Einsätze / den Datensatz aktualisiert und innerhalb der Prozedur, um zu überprüfen, dass die Benutzer-ID übergab in Ihrer Benutzer-Tabelle vorhanden ist, bevor der Einsatz stattfindet. Sie sollten die Berechtigungen für die Tabelle so einstellen, dass nur die SP-Update erlaubt ist, und legen Sie Anwendungen zu ermöglichen und / oder Benutzer von dem Scheck backdooring. Sie werden auch Vorsichtsmaßnahmen ergreifen müssen, um, wenn der Benutzer von der Benutzer-Tabelle zu entfernen.

2.), Welche Spalte Sie für die Partitionierung verwenden hängt davon ab, wie Sie Ihren Zugriff auf die Tabelle. Wenn Ihre Abfragen immer nicht auf vechicle basieren., Dann macht es wahrscheinlich sinnvoll, eine Hash-Partition auf dieser Spalte zu tun. Wenn Sie die Abfrage oder die Berichterstattung mehr auf so etwas wie „was Fahrzeuge haben in diesem Monat hinzugefügt“ oder Sie wollen „rollen“ Partitionen aus, wie sie ein bestimmtes Alter zu werden, dann kann die Partitionierung auf aktuell sein der Weg zu gehen. Dies ist etwas, was Sie entschieden auf der Grundlage Ihrer Nutzung haben werden.

3.) Siehe den Link oben für weitere Informationen.

Bearbeiten basierend auf Benutzer Frage:

alle 3 Sekunden ein Datensatz einfügen ist nicht viel Durchsatz. Stellen Sie sicher, dass Sie auf Ihrer Benutzer-Tabelle, um innerhalb der Prozedur für die Prüfung einen Primärschlüssel haben, um effizient durchgeführt werden. (Dies gilt auch, wenn FKs unterstützt wurde) Die DB würde diese Prüfung für Sie hinter den Kulissen tun, wenn Sie die Unterstützung für FK das haben so in diesem Sinne ist es dir weh nicht. Wenn die Prüfung endet einen Engpass zu sein, können Sie das Bedürfnis verspüren, es fallen zu lassen und möglicherweise berichten fehlerhaften Benutzer-IDs als nächtlicher Batch-Prozess, aber wenn Sie Benutzertabelle relativ klein ist und indiziert richtig sehe ich nicht, da dies eine Ausgabe.

Eine andere Möglichkeit wäre die Partitionierung manuell zu tun (das heißt sharding) mit partitioniert oder nicht partitionierten Tabellen. Bei den nicht-partitionierten Tabellen natürlich, könnten Sie nativer Fremdschlüssel verwenden. Zum Beispiel würden Sie Ihre Fahrzeuge Tabelle in mehrere Tabellen wie aufgeteilt: (vorausgesetzt, Sie die vehicleNo als „Schlüssel“ verwenden möchten)

VehiclesNosLessThan1000

VehiclesNosLessThan2000

VehiclesNosLessThan ...

VehiclesNosLessThanMAX

Hier möchten Sie wahrscheinlich einen SP haben wieder, so dass die Anwendung / der Benutzer muss nicht über die Tabellen kennen. Die SP würde zum Einfügen / Aktualisieren der richtige Tabelle auf der Grundlage der vehicleNo gebenen verantwortlich sein. Sie würde auch eine SP will für Daten, so dass die Auswahl app / Benutzer der Tabelle entweder wählen wissen muss. Für einen einfachen Zugang zu allen Daten, können Sie einen Blick, dass die Gewerkschaften alle Tabellen zusammen erstellen.

Beachten Sie, dass ein Vorteil davon ist, dass zur Zeit sperrt MyISAM eine ganze partitionierten Tabelle bei Updates, nicht nur die Partition, um sie Aktualisierung ist. Sharding eine Tabelle auf diese Weise mildert diese Behauptung, weil die Tabellen selbst die „Partitionen“ sind.

Auf der Grundlage der begrenzten Daten, die ich auf das, was du tust, würde ich wahrscheinlich zwei gespeicherte Prozeduren, 1 für die Daten auswählen und 1 für die Aktualisierung / die Daten eingefügt und haben Ihre Anwendung verwenden, um diese für alle Zugang. Dann würde ich die regelmäßige Aufteilung über Hash auf vehicleNo versuchen zuerst, während die user_id Schlüssel im Rahmen des Verfahrens durchzusetzen. Wenn dies ein Problem wird, können Sie einfach wandern die Daten über mehrere Tabellen Sharding während die Anwendung wechseln zu müssen, weil die gesamte Logik, wie die Daten abzurufen und aktualisieren innerhalb der SPs enthalten ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top