Eu estava lendo este artigo da BBC News e o seguinte trecho me chamou a atenção. Parece Grupos de Disponibilidade Always On ou Espelhamento de Alta Disponibilidade, talvez com segurança incluída automaticamente.
O blockchain é uma solução de banco de dados potencialmente viável para aplicativos modernos de alto volume de transações?
É muito fácil ver seu valor para transações de baixo volume, como registros médicos pessoais, mas e os bancos de dados de alto volume?
O que é blockchain?
Blockchains dependem de criptografia para permitir que um conjunto de computadores faça alterações em um registro global sem precisar de um ator central.
A remoção do intermediário reduz os custos em quase todos os setores.
O blockchain é um livro-razão que registra tudo o que acontece com uma coleção de dados conhecida como "bloco" em ordem cronológica ou "cadeia".
Como moeda, esse é um recurso importante porque permite que os usuários tenham certeza de que seu dinheiro digital é único, da mesma forma que cada nota em sua carteira é única.
“A tecnologia Blockchain será a forma como criamos ativos porque permite que você transfira informações digitais sem copiar”, diz Adam Ludwin, executivo-chefe da Chain.com, que constrói redes blockchain.
O Blockchain pode ser usado para rastrear o histórico de todos os tipos de informações e manter seu valor, então, por exemplo, os médicos podem usá-lo para atualizar registros médicos.
Como cada alteração em um blockchain é feita simultaneamente em toda a rede, nenhuma informação é perdida e, como as alterações não podem ser desfeitas, o sistema mantém sua transparência. Uma chave especial é necessária para fazer alterações em cada bloco, para que os indivíduos possam manter seus registros seguros protegendo essa chave.
Estou muito familiarizado com criptomoedas e bancos de dados, e posso dizer que não é um ótimo mecanismo de banco de dados.
Usando o blockchain como um banco de dados ativo:
Pense nisso como um primeiro formulário normalizado sem qualquer capacidade de pesquisa ou indexação realmente boa construída no que diz respeito ao blockchain. Basicamente, uma planilha do Excel sem nenhum recurso de computação que apenas fornece recursos de 'leitura/gravação' com muita verificação e validação. Um blockchain é uma ótima maneira de validar se seus dados são higienizados e corretos antes de colocá-los em um banco de dados que permite consultá-los de maneira diferente, indexá-los etc.
Benefícios da blockchain:
A blockchain, neste caso, é puramente um livro-razão e uma API para solicitações PUT e GET. É sobre isso. O blockchain é interessante porque você precisa de uma maioria de nós para passar a transação como válida e não há rollbacks, uma vez que é confirmada, é confirmada. Portanto, se alguém tentar fazer uma transação falsa, ela será capturada, a menos que a pessoa que a faça tenha um pool com uma forte participação majoritária. Em seguida, eles podem validá-lo em seu pool antes que alguém o rejeite. Esse é o ponto forte do blockchain. Verificação de que os dados são precisos. Também é tipicamente muito lento. Você está olhando para cerca de 10 minutos sob carga normal para ser validado. Sob carga pesada, o tempo aumenta bastante.
Depois de validar que as transações são válidas e não fraudulentas usando o blockchain, você pode importar esses dados para um banco de dados e trabalhar com eles como quiser. Eu tenho alguma experiência com isso, mas observe que cada transação na arquitetura atual do bitcoin será registrada, portanto, há algumas informações interessantes para analisar.
Consultando dados do esquema blockchain em um DBMS:
Aqui está o diagrama bitcoin que você pode usar para criar o esquema no PostgreSQL. Usando isso, você pode colocá-lo em um DBMS relacional: https://bitcointalk.org/index.php?topic=38246
Este repositório de código também é útil se você quiser importar os dados para um RDBMS real: https://github.com/bitcoin-abe/bitcoin-abe
Quanto ao DBMS em que você deve colocá-lo, depende do seu caso de uso. Se você quiser analisar as transações/IDs de carteira para ver alguns padrões ou fazer um trabalho de BI, eu recomendaria um banco de dados relacional. Se você deseja configurar uma ingestão ao vivo com várias criptomoedas, recomendo algo que não precise do log de transações, portanto, uma solução MongoDB seria boa. Não acho que você precise se preocupar com o Elastic Search, a menos que queira começar a gravar ao vivo todas as criptomoedas ao mesmo tempo e usá-lo para fazer negociação automática ou algo igualmente maluco. :)
A tecnologia blockchain em geral possui algumas características que dificultam o trabalho com grandes volumes.
Dê uma olhada no Bitcoin, por exemplo. A média de transações por dia nunca foi superior a 300 mil: Transações por dia (fonte blockchain.info)
Ainda mais importante, o tempo médio de confirmação de uma transação é de cerca de 8 minutos!: Tempo médio de confirmação da transação (somente com taxa) e uma bela imagem de Quandl :
Agora, quantos computadores ao redor do mundo são responsáveis por manter o banco de dados bitcoin? Não sou especialista em bitcoin, mas acho que o histórico completo das transações é armazenado na cadeia de blocos; portanto, todos os computadores que participam da rede bitcoin mantêm uma cópia de todo o banco de dados (a parte das transações, é claro, não as informações das contas e chaves secretas, estas são guardadas nas carteiras pessoais).
Só podemos estimar quantos são, mas acho que são mais de um milhão. 300 mil transações em um dia com um milhão de computadores não parece um volume alto. E 8 minutos para confirmação?
Um RDBMS moderno em um hardware decente pode facilmente chegar a 1K de transações por segundo. Isso é cerca de 86 milhões de transações por dia. O tempo de confirmação? Isso depende do tamanho da transação (quantas tabelas e linhas afeta), mas para uma pequena transação do tipo bitcoin (remova 42 moedas da conta A e adicione 42 moedas à conta B), será milissegundos.
Em conclusão, a diferença em volumes e tempo é de 1.000 a 100.000 vezes hoje.
Se a tecnologia blockchain resolver esse problema no futuro, poderá ser usada em aplicações de médio ou alto volume. Podemos ler discussões e sugestões sobre como o problema deve ser resolvido - muitas das empresas mencionadas nos links estão realmente trabalhando nessas questões - mas ainda não vimos uma solução ou produto de trabalho real que ofereça grandes volumes e velocidade.
Em 2014, construímos o ascribe.io com a premissa de usar o Bitcoin como um banco de dados para reivindicações de Propriedade Intelectual. No lançamento, conectamos a rede porque ela não suportava o throughput, a latência era de pelo menos 10 minutos e estávamos limitados pelo que poderíamos colocar no OP_RETURN, obrigando-nos a armazenar o arquivo digital real relacionado à reclamação no Amazon S3 . Percebemos que o Bitcoin em sua forma atual nunca poderia ser um banco de dados de alta transação.
Mas a ideia de se poderíamos ter um banco de dados no estilo blockchain - controle descentralizado, imutabilidade (resistência a adulterações) e ativos ativos na rede ficou conosco. Então, em meados de 2014, começamos a trabalhar no BigchainDB
Para encurtar a história - podemos processar 100k tps com latência de 100mS e ter petabytes de capacidade. O código é nosso BigchainDB Github, documentação técnica aqui e o pensamento fundamental em nosso whitepaper .
Se você tiver um caso de uso para um banco de dados descentralizado de alta transação, construímos o BigchainDB exatamente para isso.
Blockchain derivado do Bitcoin é lento e caro; a quantidade de dados que pode ser armazenada em um bloco é muito modesta. Os mecanismos por trás dos blockchains (distribuir ledgers) destinam-se a fornecer um armazenamento de dados incorruptível e altamente replicado; ponto a ponto é menos uma característica essencial do que um "requisito político" para evitar a aparência de controle central. Estou trabalhando há cerca de 18 meses para produzir um livro-razão distribuído de alto desempenho (consulte metrognomo.com para obter uma instanciação) que consome o mínimo possível do Bitcoin. No final, porém, um livro-razão distribuído se parece muito com um arquivo sequencial que pode ser adicionado, mas não editado após a adição. Isso é valioso para alguns aplicativos, mas não para o que a maioria das pessoas considera um banco de dados.