Le compteur de documents, et un nombre qui ne peut pas s'écheuvr

Featurekamo-shared-library
Expédié
27 août 2026 à 23:21 UTC
Auteur
Kamo
Commite
c42a68f

Chaque numéro de document existant sur cette plate-forme est une course de contrôle et d'insertion avec pas de contrainte unique derrière elle: les numéros de citation sont COUNT(...)-1, abonnement les numéros de facture chargent chaque ligne pour l'orge en mémoire et prenez .size()-1, prêt nombres choisissent une valeur aléatoire et échouent ouvert en renvoyant nul. Deux concurremment Les auteurs lisent la même figure et écrivent un numéro un supérieur. Une facture le numéro ne peut pas être corrigé après le fait - le client a déjà les fichiers PDF Cette série est alors frappée sous une serrure de rangée à la place. Un tableau et pas une séquence: il n'y a pas de SÉQUENCE DE CREATE n'importe où sur ce point et la déclaration d'un «SequenceGénérateur rendrait un KI exportable» ddl-auto: mise à jour, qui le créerait START AVEC 1 et distribuer des ids ci-dessous 2-53 dans un schéma unique-rowid(). Une séquence ne peut pas non plus réinitialiser par an ou par an. locataire, qui est la forme d'une série de factures. findForUpdate est la seule lecture sur le dépôt - il étend Repository, pas JpaRepository, donc il n'y a pas de découverte déverrouilléeById pour atteindre par accident. insérer IfAbsent utilise REPLTANT NE RIEN PLUS NETE PAS que de SuppressionService idiome de catch-the-violation. Cet idiome possède toute sa transaction; celui-ci fonctionne à l'intérieur de l'appelant, et une violation unique avorte à un PostgreSQL/Yugabyte transaction pure et simple, donc le problème se lirait comme traité pendant la facture INSERT a échoué de toute façon. Défaillables, in extenso. RED (avant l'existence des classes): Il n'existe pas de paquet symbole: classe DocumentCounterRepository / DocumentType / DocumentNumberService MUTATION (Lock(PESSIMISTIC-ÉCRITÉ) supprimée de findForUpdate), après le faux a été conçu pour modéliser un vrai aller-retour en lecture/écriture et pour donner à chaque lecteur son propre cas: - Taille attendue: 32 mais était: 7 dans les catégories suivantes: ["INV-2026-0007", "INV-2026-0005", "INV-2026-0006", "INV-2026-0003", "INV-2026-0004", "INV-2026-0001", "INV-2026-0002" - [trouvdForUpdate doit donner pour instruction à la base de données de verrouiller la ligne. S'attendre à ce qu'il ne soit pas nul VERT après retour: Essais: 43, Défaillances: 0, Erreurs: 0, Écran: 0 Note d'honnêteté enregistrée dans le javadoc de l'essai: avec un filet Thread.yield() le Le test de simultanéité est resté VERT avec la serrure enlevée, et il est resté vert avec lire la latence seule. Il ne mord qu'une fois que la fausse mains chaque appelant son propre l'instance d'entité - qui est ce que deux contextes de persistance font réellement - et met latence sur l'écriture. Aucune base de données n'est impliquée dans ces tests; ce qu'ils prouvent est que le service circule dans sa lecture via un viseur de recherche que la base de données est appelée à serrure. La moitié de la base de données est épinglée par l'assertion d'annotation et par UX-DOCCOUNTER-ORG-TYPE-YEAR.

Tous les changements

Comme ce que tu vois expédier ?

Chacune de ces mises à jour atterrit automatiquement dans votre espace de travail. Commencez gratuitement et regardez-le grandir semaine après semaine.

Commencez gratuitement pour toujoursPrix de visualisation