


Monologies de MongoDB 4.0 Explication détaillée du support des transactions acides
(Cet article a été créé en collaboration avec MongoDB. Merci pour votre soutien aux partenaires qui ont rendu SITEPoint possible.)
MONGODB 4.0 ajoute la prise en charge des transactions à l'acide multi-documents. Mais cela signifie-t-il que MongoDB n'a pas pris en charge les transactions auparavant? Ce n'est pas le cas, MongoDB a toujours pris en charge les transactions de documents uniques. MongoDB 4.0 garantit que ces transactions peuvent être étendues à plusieurs documents, instructions multiples, collections multiples et plusieurs bases de données. Sans une forme de garantie d'intégrité des données de transaction, quelle est la base de données utile d'autre?
Avant de plonger dans cet article, vous pouvez trouver tout le code ici et essayer des transactions en acide multi-documentées.
Points clés
- MongoDB 4.0 introduit des transactions d'acide multi-documents qui étendent les garanties de transaction à plusieurs documents, instructions, collections et bases de données, améliorant ainsi l'intégrité et la cohérence des données.
- Avant MongoDB 4.0, MongoDB a pris en charge les transactions de documents uniques, assurant des opérations atomiques dans un seul document et convient à la plupart des applications.
- Les transactions d'acide multi-documents MongoDB 4.0 sont cohérentes avec les transactions traditionnelles de base de données relationnelles, fournissant l'atomicité, la cohérence, l'isolement et la persistance dans des opérations plus complexes.
- Les paramètres d'utilisation des transactions à l'acide multi-documents incluent le démarrage du réplicaset MongoDB, la mise en place d'un environnement Java avec les dépendances nécessaires et la réalisation des opérations de transaction via des scripts fournis. La démonstration réelle de l'article montre la mise en œuvre des transactions à plusieurs documents, y compris les scénarios où les transactions sont engagées ou renvoyées en fonction de la disponibilité des stocks, garantissant la cohérence de l'état de la base de données.
Démarrage rapide
Étape 1: Démarrez MongoDB
Démarrez un répliquant MongoDB à nœud avec au moins la version 4.0.0 sur le port 27017 de LocalHost.si vous utilisez docker:
- Vous pouvez utiliser
- .
start-mongo.sh
Lorsque vous avez terminé, vous pouvez utiliser - .
stop-mongo.sh
Si vous souhaitez vous connecter à MongoDB à l'aide de Mongo Shell, vous pouvez utiliser - .
connect-mongo.sh
-
mkdir /tmp/data && mongod --dbpath /tmp/data --replSet rs
-
mongo --eval 'rs.initiate()'
Étape 2: Démarrez Java
Cette démo contient deux programmes principaux: et ChangeStreams.java
. Transactions.java
- Changer Streams vous permet de recevoir des notifications de tout changement de données dans une collection ou une base de données MongoDB.
- Le processus de transaction est la démonstration elle-même.
si vous utilisez docker:
Première coquille:
./compile-docker.sh ./change-streams-docker.shDeuxième shell:
./transactions-docker.shSi vous n'utilisez pas Docker, vous devrez installer Maven 3.5.x et JDK 10 (ou JDK 8 version minimale, mais vous devrez mettre à jour la version Java dans
): pom.xml
./compile-docker.sh ./change-streams-docker.sh
Deuxième shell:
./transactions-docker.sh
Comparons les transactions de documents uniques existantes avec des transactions multi-documents compatibles à l'acide pour MongoDB 4.0 et apprenez à utiliser Java pour profiter de cette nouvelle fonctionnalité.
Versions avant MongoDB 4.0
Même dans MongoDB 3.6 et plus tôt, chaque opération d'écriture est représentée comme une transaction portée sur la couche de stockage avec un seul niveau de document. Étant donné que le modèle de document combine les données pertinentes, sinon la modélisation de différentes tables parents-enfants dans le schéma tabulaire, l'opération de document unique atomique de MongoDB fournit une sémantique transactionnelle qui répond aux besoins d'intégrité des données de la plupart des applications.
Chaque opération d'écriture typique qui modifie plusieurs documents se produira réellement dans plusieurs transactions indépendantes: une transaction par document.
Prenons une application de gestion des stocks très simple à titre d'exemple.
Tout d'abord, j'ai besoin d'un ensemble de répliques MongoDB, alors veuillez démarrer MongoDB comme décrit ci-dessus.
maintenant insérons le document suivant dans la collection de produits:
./compile.sh ./change-streams.sh
En supposant qu'une promotion est en cours, nous voulons offrir à nos clients une remise de 20% sur tous les produits.
Mais avant d'appliquer cette remise, nous voulons utiliser des flux de changement pour surveiller la durée de ces opérations dans MongoDB.
Faites ce qui suit dans Mongo Shell:
./transactions.sh
Laisser cette coquille de côté, ouvrir un autre coquille de Mongo et appliquer la remise:
MongoDB Enterprise rs:PRIMARY> db.product.insertMany([ { "_id" : "beer", "price" : NumberDecimal("3.75"), "stock" : NumberInt(5) }, { "_id" : "wine", "price" : NumberDecimal("7.5"), "stock" : NumberInt(3) } ])
Comme vous pouvez le voir, les deux documents sont mis à jour à l'aide d'une seule ligne de commande, mais pas dans une seule transaction. Voici ce que nous avons vu dans la coquille de flux de changement:
cursor = db.product.watch([{$match: {operationType: "update"}}]); while (!cursor.isExhausted()) { if (cursor.hasNext()) { print(tojson(cursor.next())); } }
Comme vous pouvez le voir, le temps de cluster des deux opérations (voir clusterTime
clé) est différent: ces opérations se produisent en la même seconde, mais le compteur pour l'horodatage est incrémenté de 1.
Alors ici, mettez-vous à jour un à la fois, même si cela se produit très rapidement, d'autres peuvent lire le document pendant que la mise à jour s'exécute et ne voir que l'un des produits a des remises.
La plupart du temps, c'est quelque chose que vous pouvez tolérer dans une base de données MongoDB, car nous essayons d'incorporer des données étroitement liées ou connexes dans le même document que possible. Par conséquent, deux mises à jour du même document se produisent dans une seule transaction:
PRIMARY> db.product.updateMany({}, {$mul: {price:0.8}}) { "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 } PRIMARY> db.product.find().pretty() { "_id" : "beer", "price" : NumberDecimal("3.00000000000000000"), "stock" : 5 } { "_id" : "wine", "price" : NumberDecimal("6.0000000000000000"), "stock" : 3 }
Cependant, parfois vous ne pouvez pas modéliser toutes les données pertinentes dans un seul document, et il existe de nombreuses raisons de choisir de ne pas intégrer le document.
MONGODB 4.0 en utilisant des transactions d'acide multi-documents
Les transactions en acide multi-documentées dans MongoDB sont très similaires à ce que vous pourriez avoir appris des bases de données relationnelles traditionnelles.
Les transactions MongoDB sont des opérations conversationnelles liées qui doivent être soumises atomiquement ou complètement en arrière d'une manière d'exécution tout ou rien.
Les transactions sont utilisées pour garantir que les opérations sont atomiques même sur plusieurs collections ou bases de données. Par conséquent, en utilisant des lectures d'isolement instantané, un autre utilisateur ne peut voir que toutes les actions ou aucune actions.
Ajoutons maintenant un panier à notre exemple.
Dans cet exemple, 2 collections sont nécessaires car nous traitons de 2 entités commerciales différentes: gestion des stocks et chariots que chaque client peut créer lors des achats. Chaque document de ces collections a un cycle de vie différent.
La documentation de la collection de produits indique l'article que je vends. Cela comprend le prix actuel du produit et l'inventaire actuel. J'ai créé un pojo pour le représenter: Product.java
.
./compile-docker.sh ./change-streams-docker.sh
Lorsque le client ajoute son premier élément au panier, le panier est créé et lorsque le client continue de vérifier ou quitte le site Web, le panier est supprimé. J'ai créé un pojo pour le représenter: Cart.java
.
./transactions-docker.sh
Le défi ici est que je ne peux pas vendre plus que moi: si j'ai 5 bières à vendre, je ne peux pas avoir plus de 5 bières dans les caddages sur différents clients.
Pour m'assurer cela, je dois m'assurer que le fonctionnement de la création ou de la mise à jour du panier client est atomique avec la mise à jour des stocks. C'est là que les transactions multi-documents entrent en jeu. Si quelqu'un essaie d'acheter quelque chose que je n'ai pas en stock, la transaction doit échouer. J'ajouterai une contrainte à l'inventaire du produit:
./compile.sh ./change-streams.sh
(Notez que cela est déjà inclus dans le code Java.)
Pour surveiller nos exemples, nous utiliserons les flux de changement MongoDB introduits dans MongoDB 3.6.
Dans chaque thread de ce processus appelé ChangeStreams.java
, je surveillerai l'une des 2 collections et imprimerai chaque opération et son temps de cluster associé.
... (Le contenu suivant doit être complété avec des extraits de code Java et des explications basées sur le code fourni. La longueur est trop longue et omise ici) ....
Étapes suivantes
Merci d'avoir pris le temps de lire mon message - j'espère que vous le trouverez utile et intéressant. Pour rappel, tout le code peut être trouvé dans ce référentiel GitHub pour que vous puissiez expérimenter.
Si vous cherchez un moyen très simple de commencer, vous pouvez le faire en 5 clics dans le service de base de données MongoDB Atlas dans le cloud.
En outre, les transactions à plusieurs documents en acide ne sont pas la seule nouvelle fonctionnalité dans MongoDB 4.0, alors n'hésitez pas à consulter notre cours gratuit M040: nouvelles fonctionnalités et outils dans MongoDB 4.0 à l'Université MongoDB et notre guide sur les nouvelles fonctionnalités de MongoDB 4.0, où vous pouvez en savoir plus sur les conversions de type natif, les nouveaux outils de visualisation et d'analyse et l'intégration de Kubernetes.
... (Le contenu suivant est la FAQ, l'article est trop long, omis ici) ....
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

La montée en puissance du pouvoir technologique des femmes chinoises dans le domaine de l'IA: l'histoire de la collaboration d'honneur avec la contribution des femmes en profondeur au domaine de la technologie devient de plus en plus significative. Les données du ministère des Sciences et de la Technologie de la Chine montrent que le nombre de travailleuses scientifiques et technologiques est énorme et montre une sensibilité à la valeur sociale unique dans le développement des algorithmes d'IA. Cet article se concentrera sur l'honneur des téléphones mobiles et explorera la force de l'équipe féminine derrière qu'elle soit la première à se connecter au grand modèle Deepseek, montrant comment ils peuvent promouvoir le progrès technologique et remodeler le système de coordonnées de valeur de développement technologique. Le 8 février 2024, Honor a officiellement lancé le Big Model de Deepseek-R1, devenant le premier fabricant du camp Android à se connecter à Deepseek, excitant la réponse enthousiaste des utilisateurs. Dant ce succès, les membres de l'équipe féminine prennent des décisions de produits, des percées techniques et des utilisateurs

Deepseek a publié un article technique sur Zhihu, présentant en détail son système d'inférence Deepseek-V3 / R1, et a révélé pour la première fois des données financières clés, ce qui a attiré l'attention de l'industrie. L'article montre que la marge de bénéfice des coûts quotidiens du système atteint 545%, ce qui établit un nouveau profit mondial dans le modèle mondial de l'IA. La stratégie à faible coût de Deepseek lui donne un avantage dans la concurrence du marché. Le coût de sa formation sur modèle n'est que de 1% à 5% des produits similaires, et le coût de la formation du modèle V3 n'est que de 5,576 millions de dollars, bien inférieur à celui de ses concurrents. Pendant ce temps, la tarification de l'API de R1 n'est que de 1/7 à 1/2 d'Openaio3-MinI. Ces données prouvent la faisabilité commerciale de la voie technologique profonde et établissent également la rentabilité efficace des modèles d'IA.

La construction du site Web n'est que la première étape: l'importance du référencement et des backlinks La construction d'un site Web n'est que la première étape pour la convertir en un actif marketing précieux. Vous devez faire l'optimisation du référencement pour améliorer la visibilité de votre site Web dans les moteurs de recherche et attirer des clients potentiels. Les backlinks sont la clé pour améliorer le classement de votre site Web, et il montre à Google et à d'autres moteurs de recherche l'autorité et la crédibilité de votre site Web. Tous les backlinks ne sont pas bénéfiques: identifier et éviter les liens nocifs Tous les backlinks ne sont pas bénéfiques. Les liens nocifs peuvent nuire à votre classement. Excellent outil de vérification de la liaison backlink gratuite surveille la source des liens vers votre site Web et vous rappelle les liens nuisibles. De plus, vous pouvez également analyser les stratégies de liaison de vos concurrents et en apprendre. Outil de vérification gratuite de backlink: votre agent de renseignement SEO

Deepseek-R1 autorise la bibliothèque Baidu et NetDisk: L'intégration parfaite de la pensée et de l'action profondes s'est rapidement intégrée à de nombreuses plateformes en seulement un mois. Avec sa disposition stratégique audacieuse, Baidu intègre Deepseek en tant que partenaire modèle tiers et l'intégre dans son écosystème, qui marque un progrès majeur dans sa stratégie écologique de "Big Model Search". Baidu Search et Wenxin Intelligent Intelligent Platform sont les premiers à se connecter aux fonctions de recherche profonde des grands modèles Deepseek et Wenxin, offrant aux utilisateurs une expérience de recherche IA gratuite. Dans le même temps, le slogan classique de "Vous saurez quand vous allez à Baidu", et la nouvelle version de l'application Baidu intègre également les capacités du Big Model et Deepseek de Wenxin, lançant "AI Search" et "Wide Network Information Raffinement"

MIDEA publiera bientôt son premier climatiseur équipé d'un grand modèle Deepseek - MIDEA Fresh and Clean Air Machine T6. Ce climatiseur est équipé d'un système de conduite intelligent avancé, qui peut ajuster intelligemment les paramètres tels que la température, l'humidité et la vitesse du vent en fonction de l'environnement. Plus important encore, il intègre le grand modèle Deepseek et prend en charge plus de 400 000 commandes vocales AI. La décision de Midea a provoqué des discussions animées dans l'industrie et est particulièrement préoccupé par l'importance de la combinaison de produits blancs et de grands modèles. Contrairement aux paramètres de température simples des climatiseurs traditionnels, MIDEA Fresh Air Machine T6 peut comprendre des instructions plus complexes et vagues et ajuster intelligemment l'humidité en fonction de l'environnement familial, améliorant considérablement l'expérience utilisateur.

Ingénierie rapide de l'IA pour la génération de code: guide d'un développeur Le paysage du développement du code est prêt pour un changement significatif. La maîtrise des modèles de grande langue (LLMS) et de l'ingénierie rapide sera crucial pour les développeurs dans les années à venir. Ème

Ce scanner de vulnérabilité de réseau basé sur GO identifie efficacement les faiblesses de sécurité potentielles. Il exploite les fonctionnalités de concurrence de GO pour la vitesse et comprend la détection de services et la correspondance de vulnérabilité. Explorons ses capacités et ses éthiques


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

Dreamweaver Mac
Outils de développement Web visuel

PhpStorm version Mac
Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.
