Je dois utiliser _createObjectByType
sur Plone. J'ai pour argument le id
de l'objet. Est-ce que cela peut être sûr, dans ce scénario, de créer un identifiant basé sur time.time()
pour éviter les collisions? Deux demandes peuvent-elles avoir exactement le même horodatage que celui indiqué par time.time()
?Est-ce time.time() une approche sûre lors de la création de types de contenu sur plone par programme?
Répondre
Vous le ferez parfaitement, même dans l'éventualité peu probable où deux demandes seraient traitées exactement en même temps, en cas de conflit, ZODB lèverait une ConflictError et réessayerait votre requête.
En réponse à la discussion ci-dessous:
Sur un seul ordinateur puis par defition les deux opérations doivent se chevaucher (vous avez obtenu le même résultat de time.time() dans chaque thread.) ZODB est MVCC, de sorte que chaque fil voit une vue cohérente de la base de données telle qu'elle était au début de la transaction. Lorsque le deuxième thread valide, une erreur de conflit est déclenchée car il écrira sur un objet qui a été modifié depuis le début de la transaction.
Si vous avez des clients fonctionnant sur plusieurs ordinateurs, vous devez penser à la possibilité de dérive de l'horloge entre les clients. Pour ses identifiants de transaction, ZODB choisit la valeur la plus élevée entre l'horodatage actuel ou le dernier identifiant de transaction + 1.
Cependant, vous devriez peut-être envisager de ne pas utiliser d'horodatage comme identificateur, car cela entraînerait des conflits. sous forte charge, car toutes les demandes voudront créer des entrées dans le même seau BTree. La sélection aléatoire des ID éliminera presque tous les conflits, mais conduira à des BTrees inefficaces. L'approche recommandée est pour chaque thread qui crée des objets à partir d'un point aléatoire dans l'espace numérique et créer des identifiants de manière séquentielle. S'il trouve qu'un identifiant a déjà été utilisé, il doit choisir un autre point dans l'espace numérique et recommencer à partir de là. Je crois que zope.intid contient une implémentation de cette stratégie.
- 1. Manière sûre de déplacer par programme un lot de fichier?
- 2. Création d'une copie de travail pour les types de contenu personnalisés Plone 4
- 3. types de contenu compris par une application
- 4. Problème lors de la création de UIPageControl par programme?
- 5. Création de sous-contenu basé sur le fichier csv dans parent (dextérité plone)
- 6. Comment contrôler par programme la liste d'ajout de types de contenu autorisés d'un objet?
- 7. Création de RadioButtons par programme
- 8. Création de vues par programme
- 9. Recherche de types personnalisés dans plone
- 10. 4 Plone limiter l'usage de contenu publié
- 11. Approche déclarative vs approche programmatique pour le développement de types de contenu?
- 12. donne 404 sur Plone nouveau contenu sauver
- 13. Obtenir la liste des types de contenu interrogeables dans Plone 4
- 14. Plone: Comment utiliser la balise vidéo html5 avec les types de contenu?
- 15. Création de contrôles de contenu MS Word sur une boucle
- 16. Modification du contenu de traduction Plone
- 17. Simulation O_NOFOLLOW (2): Cette autre approche est-elle sûre?
- 18. Etat de cluster incohérent lors de la création de familles de colonnes par programme dans Cassandra
- 19. Obtention d'une exception de base de données inconnue lors de la création de schéma par programme?
- 20. Utilisation de Storyboard lors de la création par programme de UITableViewController
- 21. Impossible de générer ParameterSetMetadata lors de la création d'un bloc de paramètres par programme
- 22. Création de types de données lors de l'exécution
- 23. Erreur de constructeur surchargée lors de la création de déclencheur par programme
- 24. 2 nœuds avec le même chemin lors de la création d'un programme lors de la création du premier
- 25. conversion rapide et sûre de la chaîne à des types numériques
- 26. Plone envoyer deux fois l'e-mail lors de la suppression d'un élément (règles de contenu)
- 27. Création par programme de plusieurs instances d'Acrobat
- 28. Drupal 6: Création par programme de nœuds pour OG ..!
- 29. Création UIViews par programme
- 30. Création de sous-domaines par programme
Je pensais exactement à l'erreur de conflit: si elle est augmentée, comment se fait-il qu'elle répète la requête? La demande n'est-elle pas perdue? –
Non, Plone (Zope en fait) réessaye car il y avait une erreur de conflit donc la requête n'est pas perdue puisque Zope est celui qui gère la requête. – vangheem
Je doute que vous rencontrerez une situation d'erreur de conflit. Au lieu de cela, une demande recevra une exception concernant l'ID déjà utilisé. –