Hi Bernd, Bernd Tannenbaum schrieb:
Am Mittwoch, 3. September 2003 10:35 schrieb Werner Merz:
Im übrigen ist die Vergabe von fortlaufenden Nummern ein interessantes Programmierer Problem z.B. Das Vergeben von Kundennummern usw. Vielleicht liest ja ein Informatikstudent mit und kennt einen Theoretischen Ansatz. Bisher gieng ich davon aus, das sich das Problem nur sauber und sicher mit Systemen lösen lässt, die ein Locking integriert haben. (z.B. Datenbanken uä.)
Gibt es da Ansätze ausserhalb von DBs im Linuxbereich?
Grössere Systeme lösen soetwas durch eine Zwangsserialisierung, sprich man hat einen Daemon der - durchaus auch mehrere aber immer nur einen Thread/Sequenz - hat um eine Sequenz zu erzeugen. Das läuft dann so ab: A will ne Nummer der Sequenz D haben B will ne Nummer der Sequenz D haben ... also fragen sie den Daemon, der Daemon nimmt die Anfragen (durchaus auch mit mehreren Threads) entgegen und fügt sie einer Tabelle hinzu, irgend ein Stück Programm arbeitet diese Tabelle ab und antwortet bzw. lässt antworten. Ein Garbage collector räumt ggf. die Tabelle auf. Dann kann man idr. noch einstellen nach welchen Regeln (Schrittweite, Numerisch/ASCII) diese Sequenz gebildet werden soll. Irgendwo hält das Teil dann noch den aktuellen Stand auf der Festplatte. Das es soetwas nicht als standard Dienstleistung innerhalb eines Unix system gibt ist allerdings schon verwunderlich da die Prozessnummern des Kernels auch von so einem Stück Software gebildet werden müssen. Alle ernst zu nehmenden Datenbanken haben solche Sequenzgeneratoren auch schon intus. hier wäre jetzt zb. auch ein möglicher und praktikabler Ansatz, auf kaum einem Linux System benutze ich die mysql DB nicht, also läuft das Teil eh fast immer, ein stückchen perl was einen autoincrement Datensatz dort hin schreibt und sich die ai nummer rückliest sind nur wenige Zeilen, wenn man das ding zb. mit seq.pl sequenzname aufruft wäre auch eine allgemeingültige Lösung erstellt. Besonders schnell ist das allerdings nicht aber schön einfach und übersichtlich. Aus 1,2,... lässt sich ja per offset und schrittweitenfaktor recht einfach nahezu jede beliebige Auf- und Absteigende Ziffernfolge bilden. Gruss Falk