Статьи

Управление хранилищем данных с помощью Blockchain и BigchainDB

Нет никаких сомнений в том, что, хотя будущее Биткойна может быть туманным прямо сейчас, основополагающая технология, на которую он опирается — Блокчейн, произвела революцию во многих отраслях и проектах, и их ждет еще больше.

Ascribe — это увлекательный стартап, который использует Биткойн-блокчейн для записи ограниченного количества уникальных ссылок на цифровые произведения искусства. Таким образом, делая их прослеживаемыми, подотчетными и (надеюсь) более ценными из-за этого конечного количества «копий».

Приписать хитовые технологические проблемы с этим подходом, и эти проблемы были в первую очередь из-за самого Биткойна Blockchain. Запись всего на него медленная, дорогостоящая (в настоящее время 80 с каждый раз) и имеет максимальное количество ежедневных записей и общую емкость для записи. Это также противоречит типичным технологиям масштабируемых баз данных, добавление узлов не повышает производительность и не имеет реального языка запросов. Это делает масштабирование бизнеса, основанного на биткойн-блокчейне, сложной задачей.

Но концепция Blockchain является сильной, и в последние годы наблюдается рост использования и легитимности, и даже крупные банки объявили о разработке технологий, вдохновленных этой концепцией.

Компания Ascribe решила объединить лучшее из обоих миров, взяв за основу проверенную базу данных NoSQL ( RethinkDB ) и добавив слой Blockchain, чтобы добавить контроль, отслеживание активов и дополнительный уровень безопасности.

Эта комбинация технологий особенно интересна для пользователей баз данных NoSQL, поскольку традиционно немногие из них поддерживают « транзакции », которые помогают гарантировать изменение базы данных. Записывая в базовую базу данных NoSQL через уровень Blockchain, BigchainDB добавляет поддержку транзакций.

Благодаря слою Blockchain BigChainDB также претендует на полную децентрализацию. Хотя многие распределенные базы данных NoSQL заявляют об этом, часто существует псевдомастер / ведомый.

Установка BigChainDB и зависимостей

Есть несколько способов установить BigChainDB. Сначала я попробовал образы Docker, но столкнулся с некоторыми проблемами с подключением, находя пакеты Python наиболее надежными.

  1. Установите RethinkDB , для других пользователей Mac также доступен пакет Homebrew.
  2. Установите Python 3.4+ .
  3. Установите BigChainDB с Pip — sudo pip install bigchaindb
  4. Начать RethinkDB с rethinkdb
  5. Запустите BigChainDB с bigchaindb start
  6. Откройте пользовательский интерфейс администратора BigChainDB (фактически пользовательского интерфейса RethinkDB) по адресу http://SERVER_IP:58080/

Простой пример — распределение и отслеживание сообщений

Один из основных вариантов использования BigchainDB (и почему Ascribe его создал) предназначен для отслеживания ресурсов, поэтому давайте сделаем простой пример на Python. Сначала выполните следующие команды в вашем терминале.

 pip install bigchaindb
bigchaindb configure
bigchaindb show-config

Создайте новый файл app.py и добавьте следующее:

 from bigchaindb import Bigchain
b = Bigchain()
print(b)

Это импортирует библиотеку bigchaindb, создает новый объект и соединяется с ним только что созданным файлом настроек.

Затем запустите приложение Python:

 python app.py

Вы должны увидеть что-то вроде <bigchaindb.core.Bigchain object at 0x1085b0dd8>

Добавьте следующее:

 from bigchaindb import Bigchain
import time

b = Bigchain()

spuser_priv, spuser_pub = b.generate_keys()
print("User Created")

digital_asset_payload = {'msg': 'This is my special message just for you'}

tx = b.create_transaction(b.me, spuser_pub, None, 'CREATE', payload=digital_asset_payload)
print("Transaction Written")

tx_signed = b.sign_transaction(tx, b.me_private)
b.write_transaction(tx_signed)
print ("Transaction Written to BC, now waiting")

time.sleep(10)

tx_retrieved = b.get_transaction(tx_signed['id'])
print(tx_retrieved)

Это создает пользователя и связанные ключи для доступа к базе данных — помните, что дополнительный уровень безопасности. Затем создается полезная нагрузка для записи в базу данных, назначения необходимых ключей и записи.

Новая транзакция пройдет несколько секунд из слоя Blockchain в базу данных. Код ждет десять секунд, а затем извлекает и печатает запись. Вы должны увидеть что-то вроде:

 {
  "signature": '304502205",
  "id": "0f442bcf4a42",
  "transaction": {
      "timestamp": "1457104938.430521",
      "data": {
        "hash": "b32779e57",
        "payload": {
          "msg": "This is my special message just for you"
        }
      },
      "operation": "CREATE",
      "current_owner": "hFJKYk2",
      "new_owner": "26pdiQTTx", 
      "input": None
    }
  }
}

Теперь у вас есть одно специальное сообщение, к которому вы хотите, чтобы один человек имел доступ:

 ...
print("Now to transfer")

spuser2_priv, spuser2_pub = b.generate_keys()
print("Second User Created")

tx_transfer = b.create_transaction(spuser_pub, spuser2_pub, tx_retrieved['id'], 'TRANSFER')
print("Transfer Created")

tx_transfer_signed = b.sign_transaction(tx_transfer, spuser_priv)
b.write_transaction(tx_transfer_signed)
print ("Transaction Written to BC, now waiting")

time.sleep(15)

tx_transfer_retrieved = b.get_transaction(tx_transfer_signed['id'])
print("Transferred")
print(tx_transfer_retrieved)

Это создает второго пользователя, а затем берет идентификатор транзакции специального сообщения и передает его второму пользователю. Уровень Blockchain в BigChainDB не позволит пользователям и вашему коду выполнить одно и то же действие дважды. Если вы попытаетесь запустить приведенный выше код еще раз, возникнет double spend exception

В этом примере показан небольшой набор методов, которые BigChainDB добавляет в RethinkDB, полный список можно найти здесь .

Конечная точка HTTP

В настоящее время единственной клиентской библиотекой, доступной для BigChainDB, является Python, за ней может последовать больше, но в то же время доступна ограниченная конечная точка HTTP для запроса существующих транзакций:

HTTP: // локальный: 5000 / API / v1 / Операции / tx_id

Или напишите новую транзакцию с:

Http: // Localhost: 5000 / API / v1 / транзакции

Добавление следующей полезной нагрузки, где operation

 {
  "id": , ""
  "signature": "",
  "transaction": {
    "current_owner": "",
    "data": {
      "hash": "",
      "payload": null
    },
  "input": null,
  "new_owner": "",
  "operation": "",
    "timestamp": ""
  }
}

Часть децентрализованного будущего

Игнорируя свое наследие Blockchain, BigChainDB предлагает множество функций, отсутствующих в современных NoSQL и распределенных базах данных. Уже один этот факт может послужить причиной для его попытки и может послужить обоснованным обоснованием для бизнеса / использования.

Для поклонников Blockchain среди вас это также завершает головоломку для полного децентрализованного стека приложений. В теории теперь есть Ethereum для приложений, IPFS в качестве файловой системы и теперь BigChainDB для хранения данных. Эти фрагменты предназначены для совершенно другого способа разработки, развертывания и поддержки приложений, что ведет к захватывающему будущему, о котором я хотел бы услышать ваше мнение в комментариях ниже.