Je lisais cet article de BBC News et l'extrait suivant, a attiré mon attention. Cela ressemble à Always On Availability Groups ou High Availability Mirroring, peut-être avec une sécurité automatiquement incluse.
La blockchain est-elle une solution de base de données potentiellement viable pour les applications modernes à volume de transactions élevé?
Il est assez facile de voir sa valeur pour les transactions à faible volume comme les dossiers médicaux personnels, mais qu'en est-il des bases de données à volume élevé?
Qu'est-ce que la blockchain?
Les blockchains s'appuient sur la cryptographie pour permettre à un ensemble d'ordinateurs d'apporter des modifications à un enregistrement global sans avoir besoin d'un acteur central.
La suppression de l'intermédiaire réduit les coûts dans presque tous les secteurs.
La blockchain est un registre qui enregistre tout ce qui arrive à une collection de données connue sous le nom de "bloc" dans un ordre chronologique ou "chaîne".
En tant que monnaie, il s'agit d'une caractéristique importante car elle permet aux utilisateurs de s'assurer que leur argent numérique est unique, de la même manière que chaque note de votre portefeuille est unique.
"La technologie Blockchain sera la façon dont nous créerons des actifs, car elle vous permet de transférer des informations numériques sans les copier", explique Adam Ludwin, directeur général de Chain.com, qui construit des réseaux blockchain.
La blockchain peut être utilisée pour suivre l'historique de toutes sortes d'informations et maintenir sa valeur.Par exemple, les médecins peuvent l'utiliser pour mettre à jour les dossiers médicaux.
Étant donné que chaque modification d'une blockchain est effectuée simultanément sur l'ensemble du réseau, aucune information n'est perdue et comme les modifications ne peuvent pas être annulées, le système conserve sa transparence. Une clé spéciale est nécessaire pour apporter des modifications à chaque bloc, afin que les individus puissent protéger leurs enregistrements en protégeant cette clé.
La blockchain est-elle une solution de base de données potentiellement viable pour les applications modernes à volume de transactions élevé ?
La technologie de la blockchain en général a certaines caractéristiques qui rendent difficile le travail avec des volumes élevés.
Jetez un œil au Bitcoin par exemple. Les transactions moyennes par jour n'ont jamais dépassé 300K: Transactions par jour (source blockchain.info)
Encore plus important, le temps de confirmation médian pour une transaction est d'environ 8 minutes !: Temps de confirmation de transaction médian (avec frais uniquement) et une belle image de Quandl :
Maintenant, combien d'ordinateurs dans le monde sont responsables de la conservation de la base de données bitcoin? Je ne suis pas un expert du bitcoin mais je pense que l'historique complet des transactions est stocké dans la chaîne de blocs, donc tous les ordinateurs qui participent au réseau bitcoin gardent essentiellement une copie de la base de données entière (la partie des transactions bien sûr, pas les informations sur les comptes et les clés secrètes, celles-ci sont conservées dans les portefeuilles personnels).
Nous pouvons seulement estimer leur nombre, mais je suppose qu'ils sont plus d'un million. 300 000 transactions par jour avec un million d'ordinateurs ne sonnent pas comme un volume élevé. Et 8 minutes pour confirmation?
Un SGBDR moderne dans un matériel décent peut facilement aller jusqu'à 1 000 transactions par seconde. Cela représente environ 86 millions de transactions par jour. L'heure de confirmation? Cela dépend de la taille de la transaction (combien de tables et de lignes cela affecte) mais pour une petite transaction de type bitcoin (retirer 42 pièces du compte A et ajouter 42 pièces au compte B), ce sera des millisecondes.
En conclusion, la différence de volumes et de temps est de 1 000 à 100 000 fois aujourd'hui.
Si la technologie blockchain résout ce problème à l'avenir, il pourrait être possible de l'utiliser dans des applications de volume moyen ou élevé. Nous pouvons lire les discussions et les suggestions sur la façon de résoudre le problème - de nombreuses entreprises mentionnées dans les liens travaillent actuellement sur ces questions - mais nous n'avons pas encore vu de solution ou de produit réel qui offre des volumes et une vitesse élevés.
Je connais très bien la crypto-monnaie et les bases de données, et je peux vous dire que ce n'est pas du tout un excellent moteur de base de données.
Utilisation de la blockchain comme base de données live:
Considérez-le comme une première forme normalisée sans vraiment de capacité de recherche intégrée ni d'indexation en ce qui concerne la chaîne de blocs. Fondamentalement, une feuille Excel sans aucune capacité de calcul qui vous donne juste des capacités de lecture/écriture avec beaucoup de vérification et de validation. Une blockchain est un excellent moyen de valider vos données est nettoyées et correctes avant de les mettre dans une base de données qui vous permet de l'interroger différemment, de l'indexer, etc.
Avantages de la blockchain:
La blockchain dans ce cas est purement un grand livre et une API pour les requêtes PUT et GET. C'est à peu près ça. La blockchain est intéressante car vous avez besoin d'une majorité de nœuds pour passer la transaction comme valide et il n'y a pas de restauration, une fois qu'elle est validée, elle est validée. Ainsi, si quelqu'un essaie de faire une fausse transaction, il sera pris à moins que la personne qui le fait ait un pool qui a une forte majorité. Ils peuvent ensuite le valider dans leur pool avant que quelqu'un ne puisse le rejeter. C'est le point fort de la blockchain. Vérification de l'exactitude des données. Il est également généralement assez lent. Vous regardez environ 10 minutes sous charge normale pour qu'il soit validé. Sous forte charge, le temps passe un peu.
Après avoir vérifié que les transactions sont valides et non frauduleuses à l'aide de la blockchain, vous pouvez ensuite importer ces données dans une base de données et travailler avec comme bon vous semble. J'ai une certaine expérience avec cela, mais notez que chaque transaction sur l'architecture bitcoin actuelle sera enregistrée, donc elle a des informations intéressantes à analyser.
Interrogation des données hors du schéma de la chaîne de blocs dans un SGBD:
Voici le diagramme bitcoin que vous pouvez utiliser pour créer le schéma dans PostgreSQL. En utilisant cela, vous pouvez ensuite le mettre dans un SGBD relationnel: https://bitcointalk.org/index.php?topic=38246
Ce dépôt de code est également utile si vous souhaitez importer les données dans un vrai SGBDR: https://github.com/bitcoin-abe/bitcoin-abe
En ce qui concerne le SGBD dans lequel vous devez le placer, cela dépend de votre cas d'utilisation. Si vous souhaitez analyser les transactions/ID de portefeuille pour voir certains modèles ou faire B.I. travail, je recommanderais une base de données relationnelle. Si vous souhaitez configurer une ingestion en direct avec plusieurs cryptocoins, je recommanderais quelque chose qui n'a pas besoin du journal des transactions, donc une solution MongoDB serait bonne. Je ne pense pas que vous ayez à vous soucier d'Elastic Search, sauf si vous voulez commencer à enregistrer en direct toutes les cryptocoins en même temps et l'utiliser pour faire du trading automatique ou quelque chose de tout aussi fou. :)
En 2014, nous avons construit ascribe.io avec pour prémisse l'utilisation de Bitcoin comme base de données pour les revendications de propriété intellectuelle. À la sortie, nous avons branché le réseau car il ne pouvait pas gérer le débit, la latence était d'au moins 10 minutes et nous étions limités par ce que nous pouvions mettre dans OP_RETURN, nous forçant à stocker le fichier numérique réel relatif à la réclamation dans Amazon S3 . Nous avons réalisé que Bitcoin sous sa forme actuelle ne pourrait jamais être une base de données de transactions élevée.
Mais l'idée de savoir si nous pourrions avoir une base de données de style blockchain - contrôle décentralisé, immuabilité (inviolabilité) et actifs en direct sur le réseau nous a coincé. Donc à la mi-2014, nous avons commencé à travailler sur BigchainDB
Pour faire court - nous pouvons traiter 100 000 tps avec une latence de 100 ms et avoir des pétaoctets de capacité. Le code est notre BigchainDB Github, la documentation technique ici et la pensée fondamentale dans notre livre blanc .
Si vous avez un cas d'utilisation pour une base de données décentralisée à transactions élevées - nous avons construit BigchainDB exactement pour cela.
La blockchain dérivée de Bitcoin est lente et coûteuse; la quantité de données qui peut être stockée dans un bloc est très modeste. Les mécanismes derrière les chaînes de blocs (registres de distribution) sont destinés à fournir un magasin de données incorruptible et hautement répliqué; le pair à pair est moins une caractéristique essentielle qu'une "exigence politique" pour éviter l'apparition d'un contrôle central. Je travaille depuis environ 18 mois pour produire un grand livre distribué de haute performance (voir metrognomo.com pour une instanciation) qui prend aussi peu de Bitcoin que possible. En fin de compte cependant, un registre distribué ressemble à peu près à un fichier séquentiel qui peut être ajouté mais non modifié après l'ajout. C'est une chose précieuse pour certaines applications, mais pas ce que la plupart des gens considèrent comme une base de données.