Les bases de données NoSQL peuvent-elles occasionnellement entraîner une perte de données?

8

J'évalue actuellement des bases de données à utiliser pour un nouveau projet, qui nécessitera l'insertion et l'interrogation de grandes quantités de données de trading. Notre équipe se penche vers Cassandra, mais j'ai ensuite lu cet article qui semble suggérer que l'utilisation de bases de données non conformes à ACID peut entraîner une perte de données occasionnelle:

http://www.dbms2.com/2010/09/21/acid-compliant-transaction-integrity/

Je ne trouve aucune information supplémentaire à ce sujet sur le Web et je ne comprends pas comment la conformité non-ACID peut entraîner une perte de données. Quelqu'un peut-il nous éclairer?

del
la source
Neo4j est une base de données NOSQL (graphique) qui est en fait conforme à ACID . Il est livré avec un support complet des transactions et une persistance durable. Neo4j utilise également des journaux de transactions pour sécuriser les opérations d'écriture avant de les appliquer à la banque de données. Avertissement: je travaille pour Neo Technology.
Michael Hunger
3
Selon la loi de Murphy (et ma propre expérience), vous pouvez perdre des données avec n'importe quelle base de données.
a_horse_with_no_name
Une meilleure formulation pourrait être "les bases de données NoSQL ont-elles un risque significativement plus élevé de perte ou de corruption de données que les SGBDR traditionnels?" Encore un peu vague.
Jon of All Trades
Plusieurs produits NoSQL offrent ACIDity sur une seule ligne. Peu proposent des ACID à plusieurs rangées. Si votre cas d'utilisation est un flux d'écriture à clé unique, vous pouvez réussir. Avec de nombreux domaines d'activité, il est important d'avoir plusieurs lignes cohérentes simultanément avant d'effectuer un changement.
Michael Green

Réponses:

6

ACID signifie

  • Atomicité
  • Cohérence
  • Isolement
  • Durabilité

Cela signifie pour vous que "chaque action d'écriture ne sera effectuée qu'une seule fois (pas d'enregistrements en double) mais sera complètement stockée dans la base de données lorsque l'action sera terminée" et que chaque fois que vous lisez, vous obtenez les données souhaitées .

La chose à propos des bases de données NoSQL est qu'elles sont souvent distribuées (c'est ce que les gens veulent, des systèmes évolutifs plats qui sont bon marché), ce qui signifie qu'il faut du temps pour répliquer les données sur tous les nœuds. Parfois, il est possible de lire pendant une écriture et de se retrouver avec les anciennes données pendant que les nouvelles données sortent.

Vous sacrifiez la pureté pour la vitesse.

Ceci est la version courte de ma réponse, et je ne suis pas sûr de ce que je dois expliquer davantage. Pose moi des questions!

jcolebrand
la source
1
Ce que vous décrivez ressemble à une cohérence immédiate (RDBMS) par rapport à une cohérence éventuelle (NoSQL). Cependant, l'article lié parle de réellement perdre des données (pas simplement d'avoir des données incohérentes), et je ne comprends pas ce que la conformité ACID a à voir avec la perte de données.
du
1
Durabilité très probable. Et c'est le cas, c'est ce que je décris (ce qui donne l'impression que des données ont été perdues). Le point avec ACID est que vous ne pouvez pas perdre de données. Déjà. (enfin ça pourrait être perdu à
cause des
Toutes les bases de données NoSQL que j'ai consultées (HBase, Cassandra, Redis) utilisent des journaux d'écriture anticipée qui peuvent être relus au cas où la base de données se bloquerait avant que les modifications ne soient persistées. Est-ce à dire que cette critique ne s'applique à aucune de ces bases de données?
du
J'imagine que oui. Je reviendrai sur cela demain, mais pour l'instant, heure du coucher. J'espère que vous obtiendrez d'autres informations en plus de la mienne avant cette date ;-)
jcolebrand
6

Bien que ce soit une question vieille de plusieurs années ...

En bref, vous pouvez comprendre ACID comme une garantie d'intégrité / sécurité des données dans toutes les circonstances attendues . Comme dans la programmation générique, tous les maux de tête proviennent du multi-threading.

Le plus gros problème sur NoSQL est principalement ACI. D (urability) est généralement un problème distinct.

Si votre base de données est monothread - donc un seul utilisateur peut y accéder à la fois -, c'est compatible ACI en natif. Mais je suis sûr qu'aucun serveur ne peut avoir ce luxe.

Si votre base de données doit être multithread - servir plusieurs utilisateurs / clients simultanément - vous devez avoir besoin d'une transaction compatible ACI. Ou vous obtiendrez une corruption de données silencieuse plutôt qu'une simple perte de données. Ce qui est beaucoup plus horrible. Simplement, c'est exactement la même chose avec la programmation générique multi-thread. Si vous ne disposez pas d'un mécanisme approprié tel que le verrouillage, vous obtiendrez des données non définies. Et le mécanisme dans DB a appelé la conformité entièrement ACID .

De nombreuses bases de données YesSQL / NoSQL se disent conformes à ACID, mais en fait, très peu d'entre elles le sont vraiment.

  • Pas de conformité ACID = Vous obtiendrez toujours un résultat indéfini dans un environnement multi-utilisateur (client). Je ne pense même pas quel type de DB fait cela.

  • Ligne unique / clé conforme ACID = Vous obtiendrez un résultat garanti si vous ne modifiez qu'une seule valeur à la fois. Mais résultat indéfini (= corruption de données silencieuse) pour une mise à jour simultanée de plusieurs lignes / clés. La plupart des bases de données NoSQL actuellement populaires, notamment Cassandra, MongoDB, CouchDB,… Ces types de bases de données ne sont sûrs que pour les transactions sur une seule ligne. Vous devez donc garantir que votre logique de base de données ne touchera pas plusieurs lignes dans une transaction.

  • Conformité ACID à plusieurs lignes / clés = Vous obtiendrez toujours un résultat garanti pour toute opération. Il s'agit d'exigences minimales en tant que SGBDR. Dans le domaine NoSQL, très peu d'entre eux le font. Spanner, MarkLogic, VoltDB, FoundationDB. Je ne suis même pas sûr qu'il y ait plus de solutions. Ces types de bases de données sont vraiment frais et nouveaux, donc la plupart du temps on ne sait rien de leur capacité ou limitation.

Quoi qu'il en soit, c'est une comparaison sauf D (urability). N'oubliez pas de vérifier également l'attribut de durabilité. Il est très difficile de comparer la durabilité car la plage devient trop large. Je ne connais pas bien ce sujet…

  • Aucune durabilité. Vous perdrez des données à tout moment.

  • Stocké en toute sécurité sur le disque. Lorsque vous obtenez COMMIT OK, les données sont garanties sur le disque. Vous avez perdu des données en cas de rupture de disque.

En outre, il existe des différences même sur les bases de données compatibles ACID.

  • Parfois conforme ACID / vous avez besoin d'une configuration / pas de quelque chose automatique .. / certains composants ne sont pas conformes ACID / très rapide mais vous devez désactiver quelque chose pour cela ... / conforme ACID si vous utilisez un module spécifique ... = nous ne regroupera pas la sécurité des données par défaut. C'est un module complémentaire, une option ou vendu séparément. N'oubliez pas de télécharger, d'assembler, de configurer et d'émettre la commande appropriée. Quoi qu'il en soit, la sécurité des données peut être ignorée en silence. Fais le toi-même. Vérifiez-le vous-même. Bonne chance pour ne faire aucune erreur. Tout le monde dans votre équipe doit être un DBA sans faille pour utiliser ce type de base de données en toute sécurité. MySQL.

  • Toujours conforme à ACID = Nous n'échangeons pas la sécurité des données avec des performances ou quoi que ce soit. La sécurité des données est un ensemble forcé avec ce package DB. SGBDR le plus commercial, PostgreSQL.

Ci-dessus est l'implémentation typique de DB. Mais malgré tout, toute autre défaillance matérielle peut corrompre la base de données. Telles qu'une erreur de mémoire, une erreur de canal de données ou toute autre erreur possible. Vous avez donc besoin d'une redondance supplémentaire et une véritable base de données de qualité de production doit offrir des fonctionnalités de tolérance aux pannes.

  • Pas de redondance. Vous perdez toutes les données si vos données sont corrompues.

  • Sauvegarde. Vous effectuez une copie / restauration d'instantanés. Vous perdez des données après la dernière sauvegarde.

  • Sauvegarde en ligne. Vous pouvez effectuer une sauvegarde d'instantané pendant que la base de données est en cours d'exécution.

  • Réplication asynchrone. Sauvegarde pour chaque seconde (ou période spécifiée). Si la machine est en panne, cette base de données garantit de récupérer les données en redémarrant simplement. Vous perdez des données après la dernière seconde.

  • Réplication synchrone. Sauvegardez immédiatement pour chaque mise à jour des données. Vous avez toujours une copie exacte des données originales. Utilisez la copie si l'origine se casse.

Jusqu'à présent, je constate que de nombreuses implémentations de bases de données en manquent. Et je pense que s'ils ne disposent pas d'un support ACID et de redondance approprié, les utilisateurs finiront par perdre des données.

Eonil
la source
5

"Cela dépend" est la réponse - il existe des options de configuration, mentionnées ici .

Petite piqûre: une base de données peut être durable mais non conforme à ACID, car ACID est le surensemble de fonctionnalités (ACID). Je ne pense pas qu'une base de données NoSQL puisse prétendre être entièrement ACID, mais beaucoup d'entre elles peuvent prétendre passer des sous-exigences individuelles, telles que la durabilité.

Morgan Tocker
la source