2016-10-13 4 views
0

Ich denke, ich habe sehr große Tabelle, die über den RDBMS-Cluster geschart werden muss. Ich muss mich für den Partitionierungsschlüssel entscheiden, über den die Tabelle geteilt werden soll. Offensichtlich kann dieser Partitionsschlüssel kein künstlicher Schlüssel sein (Beispiel: automatisch generierte Primärschlüsselspalte), da die Anwendung die Logik des Herausfindens des Shards enthalten muss, hängt vom natürlichen Schlüssel aus den Anforderungsdaten ab. Betrachten Sie die folgende SituationPartitionsschlüsselgenerierung für RDBMS sharding

  1. Wenn der natürliche Schlüssel nicht gleichmäßig im System verteilt

    a) Is it a good idea to even consider this table for sharding ? 
    
  2. Gibt es eine Möglichkeit, eine GUID zu generieren auf dem natürlichen Schlüssel basierte und gleichmäßig über den Cluster zu verteilen?
  3. Was kann ein effizienter Algorithmus zum Generieren einer GUID basierend auf dem natürlichen Schlüssel sein.

Antwort

0

Wenn der Schlüssel nicht gleichmäßig verteilt ist, hat es möglicherweise keinen Unterschied, ob die Tabelle partitioniert ist oder nicht. Es muss fast die gleiche Anzahl von Zeilen lesen, um die Abfrage zu erfüllen. Denken Sie daran, Partitionierung wird nicht immer die Leistung erhöhen. Das Lesen über Partitionen hinweg ist möglicherweise langsamer. Stellen Sie daher sicher, dass Sie alle Abfrageanforderungen analysieren, bevor Sie den Partitionsschlüssel auswählen.

Ich kann keine Funktion aufrufen, die für diesen Fall einen Partitionsschlüssel generieren kann. Es gibt Funktionen, um GUIDs oder MD5 für Ihre Daten zu generieren, aber das Ergebnis ist schlimmer als der natürliche Schlüssel, den Sie haben. Die Ergebnisse werden mehr zu einzigartigen Werten führen. Außerdem wird es die Leistung als jede einzelne Anforderung fallen lassen, um zusätzliche Logiken auszuführen.

Bitte beachten Sie auch das Löschen alter oder nicht verwendeter Daten. Sobald dies erledigt ist, brauchen Sie möglicherweise keine Partitionierung mehr.