-
Laut dem Link der IBM ist das Generieren ja verbessert worden.
Ein Kunde (AS-Mike) von mir verwendet diese Routine auf einer P9 inzwischen für die Web-Kommunikation und doppelte ID's hats bis jetzt nicht gegeben.
-
 Zitat von Fuerchau
Laut dem Link der IBM ist das Generieren ja verbessert worden.
Ein Kunde (AS-Mike) von mir verwendet diese Routine auf einer P9 inzwischen für die Web-Kommunikation und doppelte ID's hats bis jetzt nicht gegeben.
... kommt doch immer auf die Anwendung an. Vor identity column und Gedöns auf der AS/400 habe ich mal den Vorschlag genuuid für database keys evaluiert und da haben wir uns im massiv parallel Betrieb wegen Kollisionen für eine andere Lösung entschieden. Gängige Varianten für UUIDs verwürfeln die mac mit einem Timestamp, sind also nur fast eindeutig (most likely unique). Wenn der Timestamp bis zur Taktfrequenz verfeinert wird, bleibt immer noch ein Problem bei Multiprozessor Maschinen (den man mit einem zusätzliche RAND() optimieren kann. Für eine Webanwendung sind die theoretisch denkbaren doppelten Keys meist hinnehmbar, für Datenbankkeys erzeugen sie zusätzlichen Aufwand und schlechtere Fehlertoleranz.
D*B
-
Die Gefahr besteht dann wenn man per Massensql UUID's erstellt.
Für eine Erstinitialisierung kann man ja dann ein Programm erstellen, dass die neue UUID gegen vorhandene UUID's prüft und eben dann eine neue erstellt.
Das Programm kann auch eine SQL-Funktion sein, das bereits erstellt UUID's in einer Tabelle speichert und verprobt.
Es gibt übrigens eine MI-Funktion (per C-Funktionen erreichbar), die auch kürzere Zeiten als 1 Sekunde als Wartezeit erlaubt.
https://www.ibm.com/support/pages/ho...ile-cl-program
-
Hier ein paar SQL Funktionen falls sie jemand brauchen kann
edit:
Der Include für den genuuid Header geht beim Posten immer kaputt, da sollte '#include (Kleiner-als-Zeichen)mih/genuuid.h(Größer-als-Zeichen)' stehen.
Code:
CREATE TYPE UUID AS BINARY(16) WITH COMPARISONS;
CALL QCMDEXC('CRTSRCPF FILE(QTEMP/TMP) MBR(TMP) RCDLEN(200)');
INSERT INTO QTEMP.TMP(SRCDTA) VALUES
('#include '),
('_UUID_Template_T uuid_template = { sizeof(_UUID_Template_T) };'),
('_GENUUID(&uuid_template);'),
('cpybytes(MAIN.RESULT, uuid_template.uuid, 16);');
CREATE OR REPLACE FUNCTION GENERATE_UUID()
RETURNS UUID
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
NOT DETERMINISTIC
MAIN:BEGIN
DECLARE RESULT BINARY(16) DEFAULT bx'';
INCLUDE QTEMP/TMP(TMP);
RETURN RESULT;
END;
CREATE OR REPLACE FUNCTION UUID_TO_STRING(UUID UUID)
RETURNS CHAR(36)
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN LOWER(
HEX(SUBSTR(CAST(UUID AS BINARY(16)), 1, 4)) CONCAT '-' CONCAT
HEX(SUBSTR(CAST(UUID AS BINARY(16)), 5, 2)) CONCAT '-' CONCAT
HEX(SUBSTR(CAST(UUID AS BINARY(16)), 7, 2)) CONCAT '-' CONCAT
HEX(SUBSTR(CAST(UUID AS BINARY(16)), 9, 2)) CONCAT '-' CONCAT
HEX(SUBSTR(CAST(UUID AS BINARY(16)), 11, 6))
);
CREATE OR REPLACE FUNCTION UUID_FROM_STRING(UUID_STRING VARCHAR(36))
RETURNS UUID
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN CAST(HEXTORAW(
SUBSTR(UUID_STRING, 1, 8) CONCAT
SUBSTR(UUID_STRING, 10, 4) CONCAT
SUBSTR(UUID_STRING, 15, 4) CONCAT
SUBSTR(UUID_STRING, 20, 4) CONCAT
SUBSTR(UUID_STRING, 25, 12)
) AS UUID);
VALUES GENERATE_UUID();
VALUES UUID_TO_STRING(GENERATE_UUID());
VALUES UUID_FROM_STRING(UUID_TO_STRING(GENERATE_UUID()));
-
Die in der UUID enthaltene Timestamp hat laut Doku "uniqueness bits" und sollte dem entsprechend ähnlich wie %TIMESTAMP(*UNIQUE) Kollisionen vermeiden.
https://www.ibm.com/docs/en/i/7.3?to...tifier-genuuid
https://www.ibm.com/docs/en/i/7.3?to...IN__HDRTIMEFMT
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks