Je posterai ceci comme une réponse uniquement pour soutenir la conversation - Tim Mahy , nawroth , et CraigTP ont suggéré des bases de données viables. CouchDB serait mon préféré en raison de l'utilisation de Erlang , mais il y en a d'autres.
Je dirais que ACIDE ne contredit ni ne nie le concept de NoSQL ... Bien qu'il semble y avoir une tendance à la suite de l'opinion exprimée par dove , je dirais que les concepts sont distincts.
NoSQL concerne fondamentalement les schémas simples de type clé-valeur (Redis par exemple) ou de style document (paires de clé-valeur collectées dans un modèle "document", par exemple MongoDB) en tant qu'alternative directe au schéma explicite des SGBDR classiques. Il permet au développeur de traiter les {choses} _ de manière asymétrique, alors que les moteurs traditionnels ont imposé la rigidité {identique} _ à travers le modèle de données. Ceci est si intéressant parce que fournit une manière différente de gérer le changement}, et pour des ensembles de données plus volumineux, cela offre des opportunités intéressantes pour gérer les volumes et les performances.
ACID fournit des principes régissant la manière dont les modifications sont appliquées à une base de données. De manière très simplifiée, il indique (ma propre version):
La conversation devient un peu plus excitante en ce qui concerne l’idée de propagation et contraintes . Certains moteurs de SGBDR permettent d’appliquer des contraintes (par exemple, des clés étrangères) pouvant comporter des éléments de propagation (à la cascade). En termes plus simples, une "chose" peut avoir une relation avec une autre "chose" dans la base de données, et si vous modifiez un attribut, l'un peut nécessiter que l'autre soit modifié (mis à jour, supprimé, ... de nombreuses options). Les bases de données NoSQL, qui se concentrent principalement (pour le moment) sur des volumes de données et un trafic élevés, semblent s'attaquer à l'idée de mises à jour distribuées qui ont lieu dans des délais arbitraires (du point de vue du consommateur). Il s’agit d’une forme spécialisée de réplication gérée via transaction -. Je dirais donc que si une base de données distribuée traditionnelle peut prendre en charge ACID, il en va de même pour une base de données NoSQL.
Quelques ressources pour en savoir plus:
UPDATE (27 juillet 2012):L'article sur Wikipedia a été mis à jour pour refléter la version de l'article en cours lorsque cette réponse a été publiée. Veuillez noter que le article actuel de Wikipedia a été entièrement révisé!
Eh bien, selon une ancienne version d'un article de Wikipedia sur NoSQL :
NoSQL est un mouvement promouvant un classe vaguement définie de magasins de données non relationnelles qui cassent avec une longue histoire de relationnel bases de données et garanties ACID.
et aussi:
Le nom était une tentative de décrire l'émergence d'un nombre croissant de données distribuées non relationnelles magasins qui souvent n'ont pas essayé de fournir des garanties ACID.
et
Les systèmes NoSQL fournissent souvent une solution faible garanties de cohérence telles que cohérence et transactions éventuelles limité à des éléments de données uniques, même bien que l'on puisse imposer ACID complet garanties en ajoutant une .__ supplémentaire. couche middleware.
Donc, en un mot, je dirais que l'un des principaux avantages d'un magasin de données "NoSQL" réside dans ses propriétés distinctes manque de ACIDE . En outre, IMHO, plus on essaie d'implémenter et d'appliquer des propriétés ACIDE , plus on s'éloigne de "l'esprit" d'un magasin de données "NoSQL" et plus on se rapproche d'un "vrai" RDBMS vous obtenez (relativement parlant, bien sûr).
Cependant, tout ce qui a été dit, "NoSQL" est un terme très vague, ouvert à des interprétations individuelles, et qui dépend énormément de votre point de vue puriste. Par exemple, la plupart des systèmes de SGBDR modernes n'adhèrent pas aux tous de Edgar F. Codd12 règles de son modèle de relation !
En adoptant une approche pragmatique, il semblerait que la CouchDB d'Apache incarne à la fois la conformité ACID tout en conservant la mentalité "NoSQL" non couplée et non relationnelle.
FoundationDB est compatible ACID:
Il a les transactions appropriées, de sorte que vous pouvez mettre à jour plusieurs éléments de données disparates d'une manière ACID. Ceci est utilisé comme base pour maintenir les index sur une couche supérieure.
Dans cette question, quelqu'un doit mentionner OrientDB : OrientDB est une base de données NoSQL, l'une des rares, qui prend en charge les transactions ACID. ACID n'est pas seulement pour le SGBDR, car il ne fait pas partie de l'algèbre relationnelle. Il est donc IS possible d’avoir une base de données NoSQL prenant en charge ACID.
Cette fonctionnalité est celle qui me manque le plus dans MongoDB
ACID et NoSQL sont complètement orthogonaux. L'un n'implique pas l'autre.
J'ai un cahier sur mon bureau, je l'utilise pour garder des notes sur les tâches que je dois encore faire. Ce cahier est une base de données NoSQL. Je l'interroge à l'aide d'une recherche linéaire avec un "cache de pages", de sorte que je n'ai pas toujours à chercher dans chaque page. Il est également conforme à la norme ACID, car je veille à n’écrire qu’une chose à la fois et jamais pendant que je la lis.
NoSQL signifie simplement que ce n'est pas du SQL. Beaucoup de gens s'embrouillent et pensent que cela signifie un stockage très évolutif, sauvage-occidental-ultra-rapide. Ce n'est pas. Cela ne signifie pas magasin clé-valeur, ou une cohérence éventuelle. Tout ce que cela signifie est "pas SQL", il y a beaucoup de bases de données sur cette planète et la plupart d'entre elles ne sont pas SQL[citation requise].
Vous pouvez trouver de nombreux exemples dans les autres réponses, je n'ai donc pas besoin de les énumérer ici, mais il existe des bases de données non SQL compatibles ACID pour diverses opérations. Chaque base de données est différente.
Veuillez vous assurer que vous avez lu l'introduction de Martin Fowler sur les bases de données NoSQL }. Et la vidéo correspondante.
Tout d’abord, nous pouvons distinguer deux types de bases de données NoSQL:
De par leur conception, la plupart des bases de données Graph sont ACID!
Alors, qu'en est-il des autres types?
Dans les bases de données orientées agrégats, nous pouvons définir trois sous-types:
Ce que nous appelons un Aggregate est ce que Eric Evans a défini dans son { conception axée sur le domaine } comme une entité autonome d'entités et d'objets de valeur dans un contexte délimité donné.
En conséquence, un agrégat est un ensemble de données que nous interagir avec comme une unité. Les agrégats forment les limites d'ACID opérations avec la base de données. (Martin Fowler)
Ainsi, au niveau agrégé, nous pouvons dire que la plupart des bases de données NoSQL peuvent être aussi sûres que ACID RDBMS, avec les paramètres appropriés. De source, si vous réglez votre serveur pour la meilleure vitesse, vous pouvez entrer dans quelque chose de non ACID. Mais la réplication aidera.
Mon point principal est que vous devez utiliser les bases de données NoSQL telles quelles, et non comme une alternative (peu coûteuse) au SGBDR. J'ai vu trop de projets abusant des relations entre documents. Cela ne peut pas être ACID. Si vous restez au niveau du document, c'est-à-dire aux limites globales, vous n'avez besoin d'aucune transaction. Et vos données seront aussi sûres qu’avec une base de données ACID, même si ce n’est pas vraiment ACID, puisque vous n’avez pas besoin de ces transactions! Si vous avez besoin de transactions et mettez à jour plusieurs "documents" à la fois, vous n'êtes plus dans le monde NoSQL - utilisez donc un moteur de SGBDR à la place!
"NoSQL" n'est pas un terme bien défini. C'est un concept très vague. En tant que tel, il n'est même pas possible de dire ce qui est et ce qui n'est pas un produit "NoSQL". Tous les produits portant typiquement la marque ne sont pas tous des magasins à valeur clé.
Oui, MarkLogic Server est une solution NoSQL (la base de documents que j'aime appeler) qui fonctionne avec les transactions ACID
Le grand-père de NoSQL: ZODB est compatible ACID. http://www.zodb.org/
Cependant, c'est uniquement Python.
Si vous recherchez un magasin de clés/valeurs conforme à ACID, il y a Berkeley DB . Parmi les bases de données graphiques au moins Neo4j et HyperGraphDB offer transactions ACID (HyperGraphDB utilise actuellement Berkeley DB pour le stockage de bas niveau).
En tant que l'un des créateurs de NoSQL (j'ai été l'un des premiers contributeurs d'Apache CouchDB et intervenant lors du du premier événement NoSQL organisé à CBS Interactive/CNET en 2009), je suis ravi de voir de nouveaux algorithmes créer des existez pas avant. Le protocole Calvin offre une nouvelle façon de penser aux contraintes physiques telles que CAP et PACELC .
Au lieu d'une réplication asynchrone active/passive ou d'une réplication synchrone active/active, Calvin préserve l'exactitude et la disponibilité lors des pannes de réplicas en utilisant un protocole de type RAFT pour gérer un journal des transactions. De plus, les transactions sont traitées de manière déterministe sur chaque réplique, ce qui élimine le risque de blocages. Un accord est donc obtenu avec un seul tour de consensus. Cela le rend rapide, même sur des déploiements multi-cloud dans le monde entier.
FaunaDB est la seule implémentation de base de données utilisant le protocole Calvin, ce qui en fait une solution parfaitement adaptée aux charges de travail nécessitant une intégrité des données semblable à celle d'un mainframe, avec une échelle et une flexibilité NoSQL.
MongoDB a annoncé que sa version 4.0 serait compatible ACID pour les transactions multi-documents.
Version 4.2. est supposé prendre en charge les configurations partagées.
https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb
Pour ajouter à la liste des alternatives, une autre base de données NoSQL entièrement compatible ACID est GT.M .
Ce concept Contributeurs Wikipedia définir comme:
[…] Une classe de systèmes modernes de gestion de bases de données relationnelles qui cherchent à fournir les mêmes performances évolutives des systèmes NoSQL pour les charges de travail de traitement de transaction en ligne (OLTP) tout en maintenant les garanties ACID d'un système de base de données traditionnel .
[1][2][3]
[1]
Nancy Lynch et Seth Gilbert, “La conjecture de Brewer et la faisabilité de services Web cohérents, disponibles et tolérants aux partitions” , ACM SIGACT News, Volume 33, numéro 2 (2002), p. 51-59.
[2]
"Théorème CAP de Brewer" , julianbrowne.com, récupéré le 2 mars 2010
[3]
"Le théorème de Brewers CAP sur les systèmes distribués" , royans.net
Hyperdex Warp http://hyperdex.org/warp/ Warp (fonctionnalité ACID) est propriétaire, mais Hyperdex est gratuit.
FoundationDB a été mentionné et à l'époque ce n'était pas open source. Il y a deux jours, Apple a fait appel à Open Source: https://www.foundationdb.org/blog/foundationdb-is-open-source/
Je crois que c'est conforme à l'ACID.
jetez un coup d'œil au théorème de la PAC
EDIT: RavenDB semble être conforme à ACID
db4o
À la différence de la persistance ou de sérialisation, db4o est ACID transaction en toute sécurité et permet interrogation, réplication et schéma changements en cours d'exécution
Tarantool est une base de données No ACQL entièrement ACID. Vous pouvez émettre des opérations CRUD ou des procédures stockées, tout sera exécuté en stricte conformité avec une propriété ACID. Vous pouvez également lire à ce sujet ici: http://stable.tarantool.org/doc/mpage/data-and-persistence.html
YugaByte DB prend en charge une compatibilité distribuée conforme à l'ACID ainsi que la compatibilité des API Redis et CQL sur la couche de requête.
Beaucoup de solutions NoSQL modernes ne prennent pas en charge les transactions ACID (mises à jour multi-clés isolées de manière atomique), mais la plupart d'entre elles prennent en charge des primitives qui vous permettent d'implémenter des transactions au niveau de l'application.
Si un magasin de données prend en charge la linéarisabilité par clé et le comparatif (jeu), il suffit alors de mettre en œuvre des transactions côté client. En outre, vous avez le choix entre plusieurs options:
Si vous avez besoin d'un niveau d'isolation sérialisable, vous pouvez suivre le même algorithme que celui utilisé par Google pour le système Percolator ou par Cockroach Labs pour CockroachDB . J'ai blogué à ce sujet et créé une visualisation étape par étape . J'espère que cela vous aidera à comprendre l'idée principale de l'algorithme.
Si vous vous attendez à un conflit important mais que vous ayez le niveau d'isolement Read Committed, jetez un coup d'œil aux transactions RAMP de Peter Bailis.
La troisième approche consiste à utiliser des transactions compensatoires, également appelées modèle de saga. Il a été décrit à la fin des années 80 dans le document Sagas mais est devenu plus réel avec l’augmentation du nombre de systèmes distribués. Veuillez consulter le discours Application du motif Saga pour inspiration.
La liste des magasins de données adaptés aux transactions côté client inclut Cassandra avec des transactions légères, Riak avec des compartiments cohérents, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB, etc.
MarkLogic est également compatible ACID. Je pense est l'un des plus gros joueurs maintenant.
L'attente est terminée.
La base de données NoSQL compatible ACID est sortie ----------- jetez un oeil à citrusleaf
BergDB est une base de données NoSQL légère et open source, conçue dès le départ pour exécuter des transactions ACID. En fait, BergDB est "plus" ACID que la plupart des bases de données SQL en ce sens que le seul moyen de modifier l'état de la base de données consiste à exécuter des transactions ACID avec le niveau d'isolement le plus élevé (terme SQL: "sérialisable"). . Il n'y aura jamais de problèmes avec les lectures modifiées, les lectures non répétables ou les lectures fantômes.
À mon avis, la base de données est encore très performante. mais ne me faites pas confiance, j'ai créé le logiciel. Essayez vous-même à la place.
Alors que seulement est un moteur intégré et non un serveur, leveldb a WriteBatch et la possibilité d’activer les écritures synchrones pour fournir le comportement ACID.
Node levelUP est transactionnel et construit sur leveldb https://github.com/rvagg/node-levelup#batch
VoltDB est un entrant qui revendique la conformité ACID et, même s'il utilise toujours le langage SQL, ses objectifs sont identiques en termes d'évolutivité
DynamoDB est une base de données NoSQL et a transactions ACID .