2017-09-28 2 views
1

désolé pour mon pauvre anglais. Il y a un gros groupe de tempêtes dans lequel les employés créent toujours des fichiers en même temps, la question est que je ne veux pas que ce nom de fichier soit répété. Mon patron me demande de créer un nom de fichier avec un format 'timestamp-random-othername', l'horodatage est un numéro depuis 1970-1-1 00: 00: 00, aléatoire est un cinq chiffres de 00000 à 99999. Il y a environ un des milliers de travailleurs en cours d'exécution ... et fonctionnant sur des machines différentes. Je cherche un moyen de rendre le nombre aléatoire non identique quand l'horodatage est identique.STORM: comment nommer un fichier lorsque de nombreux utilisateurs créent des fichiers simultanément?

Répondre

1

Pour assurer l'unicité, vous devez soit

  • utiliser une ressource partagée, comme un répertoire partagé, ou par messagerie ou réseau de données.
  • rend très improbable, par ex. utiliser un UUID.
  • donnez à chaque worker un identifiant unique et utilisez-le dans le nom du fichier.
+1

dans la tempête , une classe de boulons a son identifiant unique, peut-être que cela fonctionne, votre 3ème voie, merci .. –

0

vous pouvez essayer d'utiliser millisecondes système actuel & num aléatoire
comme ceci: System.currentTimeMillis() + String.format ("% 05d", Random.nextInt (99999))

+0

Bien que généralement aléatoire, si vous avez des milliers dans la même millisecondes il y aura des doublons. –

+0

les milli-secondes a moins de chance de dupliquer si vous modifiez truely un fichier en même temps, vous pouvez mettre une base num dans Redis alors lorsqu'un utilisateur de modifier ce 1 vous obtenez un num 2 faire méthode INCR 3 utilisateur suivant obtiendra un num jamais dupliquer –