2016-05-31 3 views
0

ich eine Feature-Anfragewie eindeutigen Code für die Website vieler Anwender zu generieren

  1. Code haben, ist eine eindeutige Spalte
  2. meine Nutzer werden mehr als 100 Codes eine Anfrage
  3. Benutzer Code generieren generieren bei die selbe Zeit .
  4. zu Code müssen Zufallszahl

ich eins nach dem anderen Code erzeugen kann, aber es ist nicht effizient. Das Problem ist, dass viele Benutzer gleichzeitig verwenden werden, kann ich eine Masseneinfügung generieren, der Code möglicherweise Konflikt.

Ist das ein schlechtes Design?

durch die Art und Weise, ist meine Datenbank mysql, und ich kann

+1

Wenn Sie UUID als Code verwenden können, können sie Bulk eingefügt werden und keinen Konflikt verursachen. Die Datenbank kann sie wahrscheinlich auch serverseitig generieren. – Thilo

+0

aber mein Code muss Zufallszahl sein –

+0

Ein UUID ist eine Zufallszahl (nur eine sehr lange). – Thilo

Antwort

0

Ich glaube, Sie PostGreSQL wechseln bitten, dass Sie Datensätze einfügen möchten 1-100 von verschiedenen Benutzern gleichzeitig. Sie könnten eine gespeicherte Prozedur, die eine Liste von String-Parameter angegeben schreiben einen Transaktionseinsatz psuedo Code verwendet:

Daten, Daten2, data3 ... beginnen trans jeden Datensatz in die Tabelle mit eindeutigen ID einfügen, die eine Identität (indiziert Zähler) commit

Dies könnte sein, was Sie wollen.

+0

aber mein Code muss Zufallszahl sein –

+0

Sie können eine Zufallszahl basierend auf dem Benutzernamen + Random() -Funktion generieren. Dies kann Ihnen geben, was Sie wollen. Ich denke, du solltest mehr erklären, was du erreichen willst. Sie können auch einen eindeutigen Code generieren, indem Sie entweder in sql oder in C# eine GUID verwenden. Dies erzeugt immer einen eindeutigen Wert. – foxjazzHack

0

Wenn Sie PostgreSQL und Ihre Benutzer immer verwenden 100 Codes werden zu erzeugen, dann können Sie eine einfache Sequenz verwenden, und fügen Sie alle zwei Stellen nach:

CREATE SEQUENCE id_template; 

-- get 100 new IDs: 
SELECT idt + s AS id 
FROM (SELECT nextval('serial') * 100 idt) idt, -- takes only one value 
    generate_series(0, 99) s; -- adds two digits 
+0

Ich werde postgrelSQL forschen, danke –

Verwandte Themen