IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Numéroteur unique pour une machine: comment faire ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Par défaut Numéroteur unique pour une machine: comment faire ?
    Bonjour,

    Je vous contacte car j'ai la problématique suivante :
    Il m'est nécessaire de générer un numéroteur unique sur une machine sur laquelle, n'est pas pas présent une base de données (pas de possibilité d'utiliser un séquenceur oracle par exemple).
    Voici mes contraintes :
    - Je voudrais pouvoir générer un clé unique et numérique sur 10 caractères maximum.
    - La génération d'un identifiant est aléatoire (pas de traitement séquentiel). Un démon tourne sur la machine et se déclence s'il détecte une demande à créer et un identifiant de demande doit être généré puis les informations sont véhiculés à un mécanisme externe.

    Je suis en train de voir, si néanmoins il n'est pas possible de s'appuyer sur des valeurs alphanumériques pour la clé et dans ce cas, un numéroteur alphanumérique pourrait convenir...

    Je vous remercie pour votre aide précieuse car je sèche un peu...

    Jutige

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu veux générer un identifiant aléatoire, mais unique ? Tu seras donc obligé de stocker toutes les valeurs. A chaque nouvel identifiant, il va falloir vérifier dans la longue liste qui s'allonge à l'infini s'il n'existe pas déjà. Tu es sûr d'avoir cette contrainte d'aléatoire ?
    Quel doit être le "débit" de création : combien d'identifiant dois-tu créer par seconde ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Par défaut
    Merci de ton aide dinobogan.
    En fait, les deux principales contraintes sont l'unicité et le non stockage physique sachant que plusieurs demandes être traitées simultanément (rien ne l'interdit).
    Nous ne dépasserons les 45 demandes par secondes.

    En fait, je pensais à un générateur unique basé sur la date, heure, minute, seconde...donc aléatoire mais ce n'est en aucun cas une obligation.

    Jutige

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ah ok ! Mais ça n'a rien d'aléatoire ! Tu fais de la génération séquentielle. Effectivement, le stockage est inutile.
    Tu peux utiliser un System.currentTimeMillis(). Mais il est déjà sur 31 bit.
    On suppose que tu stockes le nombre dans un int sur 31 bits (pour avoir toujours un entier signé). Il n'y a donc plus de place.
    Cependant, tu peux y soustraire la date d'aujourd'hui par exemple. Le nombre de secondes va toujours croitre, mais le zéro n'est plus en 1970. L'intérêt : tu peux coller un compteur pour différencier les mêmes secondes. Tu dis 45 demandes dans la même seconde. Tu réserves donc 6 bit pour différencier les demandes dans une même seconde, il te reste (31-6)=25 bits pour stocker les secondes. Ton programmes ne va pouvoir fonctionner que 2^25 secondes, donc environ 388 jours.
    Tu ne peux donc pas te baser sur le temps machine pour générer un entier sur 10 chiffres. Ou alors, on suppose que tu peux aller jusqu'à 9 999 999 999, mais là encore ton application ne va pas fonctionner plus de 5 ans.

    Les caractères de ton identifiant ne sont que numériques, entre zéro et neuf ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. [WD17] Etat "récursif" pour présenter une arborescence, comment faire ?
    Par droliprane dans le forum WinDev
    Réponses: 2
    Dernier message: 23/06/2015, 15h47
  2. Réponses: 7
    Dernier message: 01/02/2013, 08h09
  3. Réponses: 5
    Dernier message: 03/09/2007, 20h36
  4. Debugger avec VC++ 5 une DLL. Comment faire ?
    Par Pierre8r dans le forum MFC
    Réponses: 2
    Dernier message: 11/02/2005, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo