6 Stimmen

Primärschlüssel ohne Verwendung der Datenbank generieren

Ich bin vor kurzem auf eine Frage gestoßen, in der es um die "Generierung von Primärschlüsseln in einer Clusterumgebung mit 5 App-Servern - [OAS Version 10] ohne Verwendung einer Datenbank" ging.

Normalerweise generieren wir PK durch eine DB-Sequenz oder Speichern der Werte in einer Datenbanktabelle und dann mit einem SP, um den neuen PK-Wert zu generieren... Jedoch aktuelle Anforderung ist, Primärschlüssel für meine Anwendung ohne Verweis auf die Datenbank mit JDK 1.4 zu generieren.

Ich benötige die Hilfe von Experten, um bessere Lösungen zu finden.

Danke,

3voto

djna Punkte 53789

Vielleicht ist es hilfreich, die UUID-Generierung nachzuschlagen.

Im einfachen Fall, dass ein Programm mit einem Thread auf jedem Rechner läuft, können Sie z. B. Folgendes tun

MAC address + time in nanseconds since 1970.

2voto

Anton Gogolev Punkte 109749

Wenn Sie keine Datenbank verwenden können überhaupt GUID/UUID ist die einzig zuverlässige Methode. Wenn Sie jedoch eine Datenbank verwenden können gelegentlich , versuchen HiLo-Algorithmus .

2voto

Sebastian Punkte 1795

Werfen Sie einen Blick auf diese Strategien die von Hibernate verwendet wird (Abschnitt 5.1.5 in diesem Link). Sie werden es sicherlich nützlich finden. Darin werden verschiedene Methoden, ihre Vor- und Nachteile erläutert und es wird auch angegeben, ob sie in einer Cluster-Umgebung sicher sind.

Das Beste daran ist, dass es einen Code gibt, der dies bereits für Sie implementiert :)

0voto

gahooa Punkte 121696

Wenn es für Ihre Anwendung passt, können Sie einen größeren String-Schlüssel in Verbindung mit einer UUID()-Funktion oder SHA1 (aus Zufallsdaten) verwenden.

Was die sequentiellen Int's angeht, so überlasse ich das einem anderen Poster.

0voto

Gopi Punkte 9905

Sie können einen Schlüssel basierend auf der Kombination der folgenden drei Dinge erzeugen

  1. Die IP-Adresse oder MAC-Adresse des Geräts
  2. Aktuelle Uhrzeit
  3. Ein inkrementeller Zähler auf jeder Instanz (um sicherzustellen, dass derselbe Schlüssel nicht zweimal auf einem Rechner erzeugt wird, da die Zeit bei zwei sofortigen Schlüsselerstellungen aufgrund der zugrunde liegenden Zeitgenauigkeit gleich erscheinen kann)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X