Releasing LiteTree: A blazing-fast, branchable database engine. Перевод на русский язык.
Открытие блокчейн разработки для более чем 8.5 миллионов SQL разработчиков.
Новые рамки программирования и языки, внедренные наряду с новыми технологиями, такими как блокчейн, сложны для понимания. Одним из примеров является Solidity: язык смарт-контрактов на самой доминирующей платформе для децентрализованных приложений, Ethereum. На Solidity разработчики могут писать приложения, которые реализуют самоподдерживающуюся бизнес-логику, воплощенную в смарт-контрактах, оставляя неоспоримую и авторитетную запись транзакции.Несмотря на то, что Solidity воплотила в жизнь великолепные новые приложения, работающие на децентрализованных архитектурах, её сложность и новизна для широкого сообщества девэлоперов ограничили разработку децентрализованных приложений только для небольшой группы преданных евангелистов.По оценкам, в настоящее время во всем мире насчитывается более 18 миллионов квалифицированных разработчиков программного обеспечения, возможно, менее 1% из которых обладают способностью писать приложения с использованием Solidity. Привыкнув к нормам программирования, большинство из них просто не обладают гибкостью или способностью к использованию и освоению новых языков. Предприятия также часто используют подрядчиков, работающих неполный рабочий день, для выполнения IT-проектов, многие из которых вряд ли захотят выучить новый язык для нового проекта. Если же эти задачи будут переданы на аутсорсинг, мы считаем, что было бы неразумно полностью полагаться на внешнюю третью сторону для написания и кодификации важной бизнес-логики и правил блокчейна.Для массового внедрения блокчейн приложений процесс программирования должен быть легко усваиваемым и понятным.Мы считаем, что единственный способ реализовать это — за счет использования существующего опыта и знаний разработчика через привычные toolchains. Наш план — сделать это возможным через AERGO и выставить развитие блокчейна на более широкий рынок. Для достижения этой цели мы вводим сложный набор SDK, IDE и юзкейсов, основанный на разработках, используемых во многих из последних 23 коммерческих частных сетей, которые реализовала Blocko.Мы также вводим язык, который многие считают старым и скучным — SQL, чтобы открыть разработку блокчейн для более чем 8,500,000 разработчиков SQL. С этой целью наша бразильская команда исследований и разработок(R&D) создала мощный движок SQLite, который мы включим в набор функциональных возможностей AERGO, чтобы открыть разработку блокчейн приложений и кода для массового рынка.
Введение в LiteTree
Представьте себе возможность иметь несколько подключений к одной базе данных, причём каждое подключение считывает отдельную ветвь(branch) или осуществляет коммит(commit) одновременно. Далее вообразите единственную базу данных, в которой каждое соединение записывается в совершенно отдельные ветви. Всё это возможно с помощью нового инструмента, который реализовал один из наших разработчиков из Бразилии, Бернардо Рамос, имеющий двадцать лет опыта разработки программного обеспечения и управления реляционными базами данных.Мы с гордостью объявляем наш первый из многих проектов с открытым исходным кодом: LiteTree — быстрый движок SQLite с возможностями ветвления. Litetree получило значительный интерес и очень хорошо зарекомендовало себя среди сообщества разработчиков, когда мы впервые открыли исходную версию на нашем GitHub. Его разместили на первой полосе Haker News в течение нескольких часов; это стало горячей темой на Hackaday; а также было хорошо оценено на OpenNET. Инновации и вклад LiteTree в открытый исходный код были признаны большим количеством людей — можно увидеть более 1250 добавлений в избранное на GitHub на момент написания.Существует две основные функции, предлагаемые в LiteTree:
- Ветвление(Branching): Подобно Git-flow, LiteTree позволяет разработчикам разветвлять данные на основе SQL
- Скорость: LiteTree молниеносно: оно в два раза быстрее, чем оригинальное программное обеспечение SQLite для чтения и записи.
LiteTree позволяет хранить несколько версий одной базы данных, благодаря чему каждая ветка может продолжать самостоятельно развиваться и обновляться. Это означает, что пользователь может получить доступ к базе данных через несколько точек чтения(read points), каждая из которых связана с определенной ветвью разработки в базе данных. В результатов тестов получено, что на Linux и MacOSX LiteTree более чем в два раза быстрее, чем SQLite. Это достигается путем хранения страниц базы данных SQLite на LMDB.Ниже будет объяснено, почему и как мы пришли к разработке LiteTree для использования в Blocko, и роль, которую оно будет играть в протоколе AERGO, над которым мы прилагаем все усилия, чтобы выпустить в следующем году.
Coinstack
Несколько месяцев назад команда Blocko хотела предоставить функцию восстановления на момент времени (point in time recovery) на основе SQL в Coinstack — нашем полнофункциональном permissioned блокчейн продукте, развернутом в более чем 23 корпоративных средах. Это свойство восстановления на момент времени обеспечит функцию отката хранилища базы данных для блокчейна при реорганизации блоков. После многих дискуссий между нами и нашими партнерами мы пришли к выводу, что это было бы отличной функциональностью, предоставляемой в Coinstack . Мы начали с использования LightReplica — модифицированного механизма SQLite для репликации базы данных, чтобы дать Coinstack эту функцию базы данных.Но чем именно является восстановление на момент времени? Чтобы стало более понятно рекомендуем взглянуть на Рис. 1 в качестве примера.
Откат хранилища на базе SQL для блокчейна (восстановление на момент времени)
Предположим, что блок может иметь ноль или более транзакций контракта. Если блок успешно подключен к самой длинной цепочке, он оставляет один коммит в соответствующем SQL хранилище для каждой транзакции контракта. Этот коммит содержит все обновления транзакций контракта. Блок в свою очередь содержит точки коммита(commit points), связанные с хранилищем базы данных SQL. Точка коммита у контракта, которая не была обновлена, является той же точкой коммита предыдущего блока.На Рис. 1 исходный лучший блок — это блок 103. Если новые блоки поступают из блока 101 в блок 110, блокчейн должен быть откатан до блока 100. После этого commit 1 становится commit point контракта А, а commit 8 — commit point контракта B. Откат базы данных контракта B до commit point 8 может сделать его SQL хранилище соответствующим блоку 100.Благодаря восстановлению на момент времени мы можем эффективно выполнять контрактные транзакции новых блоков. Мы внедрили эту функцию в нашу платформу Coinstack, и клиенты смогли извлечь из нее выгоду во многих различных вариантах использования.Перенесемся на много месяцев вперед, когда мы взялись за развитие AERGO. В отличие от Coinstack, AERGO будет полностью открытым исходным кодом, а основная цепочка будет публичной. По этой причине мы обнаружили, что хотим обратить свой взгляд на разработчиков даже больше, чем в случае с Coinstack. Мы решили включить аналогичные функции, чтобы предоставить платформу более широкому сообществу инженеров баз данных, знакомых с такими языками, как SQL.
AERGO
В рамках нашей миссии по созданию платформы с открытым исходным кодом, пригодной для массового использования, мы планируем обеспечить поддержку SQL в блокчейне несколькими способами. Наш план предполагает две вещи:
- Предоставление функциональных возможностей баз данных в AERGO: возможность опроса(interrogation) данных и кодификации будущих функций совместимости(interoperability) через SQL
- Смарт-контракты, основанные на SQL: Поддержка синтаксиса и семантики на основе SQL в кодировании смарт-контрактов
Реализация LiteTree в блокчейне претворяет в жизнь первый пункт, интегрируя в блокчейн целое множество сложных функциональностей базы данных. Это обеспечивает невероятно более удобный способ обработки данных в цепочках(chains) и предоставляет много других функций совместимости по сравнению с простой системой на основе хранилища ключей/значений.
Предоставление функциональных возможностей базы данных в AERGO
Есть две основные функции, которые мы можем осуществить в AERGO с помощью LiteTree:1. Управление хранением базы данных для сети AERGOLiteTree позволяет использовать функциональные возможности реляционной базы данных в гроссбухе/леджере(ledger), чтобы обеспечить возможность реорганизации и отката блоков посредством восстановления на момент времени, как объяснялось выше. В AERGO LiteTree будет выполнять этот процесс чрезвычайно быстро — быстрее, чем это делала LiteReplica, когда она была применена в Coinstack у Blocko.На Рис. 2 изображено хранилище состояний(states) на основе SQL, управление которого осуществляется с помощью LiteTree. Хранилище SQL может хранить структурированные данные и быть доступно через SQL, а также является единственным для каждого контракта.
Рис. 2: Пример того, как LiteTree будет использоваться в блокчейне
Разветвление(branching) LiteTree на AERGO: Благодаря использованию LiteTree у вас есть не только надежные функции сверхбыстрого движка SQLite, но также и возможность разветвления. Это то, что мы изначально планировали использовать в нашей n-уровневой архитектуре на AERGO. Изначально мы планировали предоставить git-подобные ветви(branches) в блокчейне как часть решения для распараллеливания блоков, а реализация LiteTree позволила бы управлять хранением реляционных баз данных в ветвях (описано в нашей текущей технической статье). Однако с тех пор мы изменили план, чтобы вместо этого использовать протокола 1-го уровня для хранилища базы данных. Это означает, что изначально разработанный нами функционал ветвления LiteTree использоваться не будет. Мы активно занимаемся исследованиями и будем информировать наше техническое сообщество о том, как способность ветвления на уровне хранения будет применяться в AERGO.2. Управление параллелизмом нескольких версий состояния в соответствии с блокамиLiteTree, реализованный в AERGO, позволяет включить контроль параллелизма нескольких версий, поэтому разработчики могут видеть согласованные данные между различными высотами блоков(block heights).
Смарт-контракты, основанные на SQL
Поддержка SQL для разработки смарт-контрактов — это еще один шаг AERGO по расширению использования платформы среди более обширного сообщества разработчиков. Платформа будет включать AERGOSQL — канонический механизм смарт-контрактов, основанный на языке кодирования, который использует синтаксис и семантику SQL.Мы рады сообщить, что разработка AERGOSQL идет полным ходом и в настоящее время тестируется частная бета-версия. Более подробная информация о его выпуске с открытым исходным кодом будет объявлена в будущем. Первый предстоящий выпуск AERGOSQL будет включать поддержку интерфейса уровня вызовов (call-level interface) SQL. После этого позже будет выпущена интегрированная с грамматикой поддержка SQL.
Как пользоваться LiteTree
Каждая транзакция базы данных сохраняется как коммит, и каждый коммит имеет инкрементный номер. Давайте рассмотрим пустую базу данных, в которой мы запускаем эту первую команду SQL:
CREATE TABLE t1 (name)
Теперь у базы данных есть первый коммит в автоматически созданнойmaster
ветви.
Когда мы выполняем новые транзакции, она добавляет новые коммиты в текущую ветвь.
INSERT INTO t1 VALUES ('first')
INSERT INTO t1 VALUES ('second')
Теперь у нас есть 3 коммита.
Для того чтобы включить много SQL команд в один коммит, мы должны заключить их в BEGIN
and COMMIT
команды.Когда мы создаем новые ветви(branches), мы сообщаем исходную ветвь и номер коммита.
PRAGMA new_branch=test at master.2
После выполнения этой команды создается новая ветвь, но в нее не добавляются новые данные. Соединение с базой данных также перемещается в эту новую ветвь, имея ее в качестве текущей ветви. Мы можем проверить текущую ветвь с помощью команды.
PRAGMA branch
Ответом на наш запрос мы получим: test
Если мы выполним команду SQL для соединения с этой базой данных, коммит будет сохранен в текущей ветке соединения.
INSERT INTO t1 VALUES ('from test branch')
Теперь состояние графа коммитов будет следующим:
Мы также можем считывать базу данных в этой новой ветке.
SELECT * FROM t1
Это вернет нам следующие значения:
first
from test branch
Мы можем перейти к master ветви с помощью команды
PRAGMA branch=master
Выполняя такую же SELECT команду, но теперь в master ветви, мы получим
first
second
Таким образом, мы получаем разное содержание одной и той же таблицы в разных ветвях.Коммиты в отдельных ветвях имеют одинаковую нумерацию, основанную на расстоянии от первого коммита.
Мы можем считывать базу данных в предыдущий момент времени (point-in-time), перейдя к нужному коммиту.
PRAGMA branch=master.2
В этой точке у таблицы t1
есть одна строка, и если мы выполним команду SELECT, то получим в качестве ответа толькоfirst
.Запись возможна только в начало(head) каждой ветви, поэтому мы не можем записывать в базу данных, когда мы находимся в определенном коммите. Если вы хотите внести изменения в какой-то предыдущий коммит, вы должны создать новую ветвь, которая начинается с него. Кроме того, можно обрезать ветвь на определенном коммите, переименовать ее, удалить и получить информацию о ветви.Вы можете использовать LiteTree с большими базами данных, которые требуют много гигабайт дискового пространства. При создании новой ветви копирование данных не выполняется; в этом случае при коммите новой транзакции копируются только измененные страницы базы данных.
Слияние(Merging) на LiteTree
Сначала мы решили не включать возможности diff или merging в LiteTree, поскольку эти функции не нужны в AERGO. Однако многие разработчики, которые сталкивались с LiteTree, проявили интерес к этим свойствам. Поэтому в данное время мы активно работаем над их внедрением. Будучи не только проектом с открытым исходным кодом, но и целой платформой с открытым исходным кодом и поддерживающей экосистемой, мы планируем сделать исходный код и инструменты разработки максимально привлекательными и полезными, чтобы привлечь как можно больше разработчиков в нашу экосистему.
Заключение
Подводя итог, реализация LiteTree на AERGO позволит нам предоставить разработчикам множество функциональных возможностей баз данных и позволит им использовать свои возможности кодирования SQL на блокчейне. Мы также сможем внедрить свойства ветвления LiteTree для функциональных возможностей хранения баз данных в дизайн n-уровневого блокчейна AERGO, максимизируя программируемость для разработчиков или компаний, развертывающих и управляющих цепочками(chains) на платформе AERGO.Мы надеемся увидеть многих из вас, использующих LiteTree в своих проектах, и с нетерпением ждем того, что придумает наше техническое сообщество. Пожалуйста, следите за обновлениями относительно дополнительных функций LiteTree в ближайшем будущем. В то же время не стесняйтесь вносить свой вклад в LiteTree, как вы пожелаете.Если вы хотели бы сотрудничать с нами относительно LiteTree или каких-либо технических аспектов AERGO, мы недавно открыли наш официальный сервер Discord:
Также вы можете присоединиться к нам на любом из наших других каналов:
Оригинальная версия статьи:
https://medium.com/aergo/releasing-litetree-a-blazing-fast-branchable-database-engine-ab477ea6c9da