В то время как Solidity воплотила в жизнь захватывающие новые приложения, работающие на децентрализованных архитектурах, его сложность и незнание большим количеством разработчиков, ограничили развитие децентрализованных приложений только небольшой группой преданных евангелистов.
По оценкам, сегодня существует более 18 миллионов квалифицированных разработчиков программного обеспечения, возможно, менее 1% из которых обладает навыками разработки с использованием Solidity. Приученные к нормам программирования, большинство разработчиков просто не имеют гибкости или способности разработки программного обеспечения используя новые языки программирования. Компании часто используют подрядчиков, работающих неполный рабочий день, для выполнения ИТ-проектов. Многие из этих подрядчиков вряд ли захотят изучать новый язык программирования для проекта. Если эти задачи будут переданы на аутсорсинг , мы считаем, что было бы неразумно полностью полагаться на стороннюю третью сторону для написания и кодирования важной бизнес-логики и правил блокчейн.
Для разработки блокчейн приложений, чтобы достичь массового принятия, процесс программирования должен быть легкгим и понятным для разработчиков.
Мы считаем, что единственный способ реализовать это - за счет использования существующего опыта и опыта разработчика через знакомые инструментальные цепочки. Мы планируем сделать это возможным через AERGO и распространить развитие блокчейна на более широком рынке. Для достижения этой цели мы представляем сложный набор SDK, IDE и ориентированных на развертывание приложений, основанных на многих из 23 коммерческих блокчейн решений от Blocko.
Мы также вводим язык, который многие считают старым и скучным; SQL, чтобы открыть возможность разработки блокчейн приложений для более чем 8500 000 разработчиков SQL. С этой целью наша команда разработчиков R & D в Бразилии создала мощный движок SQLite, который мы включим в набор функциональных возможностей AERGO, чтобы открыть разработку блоучейн приложений и кода для массового рынка.
Представляем LiteTree
Представьте, что вы можете иметь несколько подключений к одной базе данных, причем каждое соединение считывает отдельную ветвь или запись одновременно. Представьте себе единую базу базу данных, каждая запись которой будет полностью разделяться на ветви. Это возможно благодаря новому инструменту, в который один из наших разработчиков из Бразилии, Бернардо Рамос , вложил 20 лет опыта разработки программного обеспечения и управления реляционными базами данных.
Мы с гордостью объявляем наш первый из многих выпусков проектов с открытым исходным кодом: LiteTree, быстрый движок SQLite с возможностями ветвления. LiteTree получил значительный интерес и очень хорошо зарекомендовал себя среди сообщества разработчиков, так как мы сначала открыли исходную версию на нашей странице GitHub. Он был на первой странице Hacker News в течение нескольких часов; это стало горячей темой в Hackaday; и это было хорошо расценено на OpenNET. Инновация и вклад LiteTree в open-source были признаны более чем 1250 пользователями, добавившими его в избранное на GitHub на момент написания.
В LiteTree есть две основные функции:
- Ветвление: в потоке Git-типа LiteTree позволяет разработчикам разворачивать данные на основе SQL
- Скорость: LiteTree работает быстро; в два раза быстрее, чем исходное программное обеспечение SQLite для чтения и записи.
LiteTree позволяет хранить несколько версий одной базы данных, благодаря чему каждая ветка может продолжать независимо разрабатываться и обновляться. Это означает, что пользователь может получить доступ к базе данных через несколько точек чтения, каждая из которых связана с конкретной ветвью развития в базе данных. LiteTree более чем в два раза быстрее, чем SQLite, как правило, на Linux и MacOSX. Он реализуется путем хранения страниц базы данных SQLite на LMDB.
Ниже мы раскажем, почему и как мы пришли к разработке его для использования в Blocko, и какую роль он будет играть на протоколе AERGO, мы прилагаем все усилия, чтобы выпустить его в следующем году.
Coinstack
Несколько месяцев назад команда Blocko, хотела предоставить функциональную возможность восстановления к точке по времени на основе SQL в Coinstack, нашем полнофункциональном блокчуйн продукте, развернутом в более чем 23 корпоративных средах. Эта функция восстановления к точке по времени может обеспечить функцию отката базы данных для блокчейн при реорганизации блоков. Мы пришли к выводу, после многих дискуссий между нами и нашими партнерами, что это нужно задействовав в Coinstack. Мы начали с использования LiteReplica, модифицированного SQLite-механизма для репликации базы данных, чтобы предоставить Coinstack эту функцию базы данных.
Но что именно происходит в момент восстановления? См. Рисунок 1 в качестве примера, чтобы сделать его более понятным.
Рисунок 1. Откат с хранилищем на базе SQL для блокчейн (восстановления к точке по времени)
Скажем, блок может иметь ноль или более транзакций контракта. Если блок успешно подключен к самой длинной цепочке, он оставляет одну фиксацию в соответствующем хранилище SQL для каждой транзакции контракта. Эта фиксация содержит все обновления транзакций контракта. Блок содержит точки фиксации, связанные с хранилищем базы данных SQL. Точка фиксации контракта, которая не была обновлена, является той же точкой фиксации предыдущего блока.
На рис.1 исходным лучшим блоком является блок 103. Если новые блоки принимаются от блока 101 до этапа 110, блок-цепочка должна быть отброшена назад к этапу 100. После этого точка фиксации контракта A является фиксацией 1, а точка фиксации контракта B является фиксацией 8. Откат базы данных контракта B для фиксации точки 8 может привести к тому, что его хранилище SQL соответствует блоку 100.
Благодаря восстановлению к точке по времени мы эффективно можем беспрепятственно выполнять транзакции контрактов, бесследно для новых блоков. Мы реализовали эту функцию на нашей платформе Coinstack, и клиенты смогли извлечь выгоду из нее во многих различных случаях использования.
В течение многих месяцев внедрения, мы обнаружили, что мы строим AERGO. В отличие от Coinstack, AERGO будет полностью с открытым исходным кодом, и основная цепочка будет публичной. По этой причине мы обнаружили, что хотим обратиться к большему числу разработчиков, чем в Coinstack. Мы решили включить эти функции, чтобы сделать платформу доступной для более широкого сообщества инженеров баз данных, знакомых с такими языками, как SQL.
AERGO
В нашей миссии по созданию платформы с открытым исходным кодом, пригодной для массового использования, мы планируем обеспечить поддержку SQL в блокчейн несколькими способами. Наш план сделать это влечет за собой две вещи:
- Предоставление функциональных возможностей базы данных в AERGO: разрешение опроса данных и кодификация функций будущей совместимости через SQL
- Интеллектуальные контракты на основе SQL: поддержка синтаксиса и семантики на основе SQL в интеллектуальном кодировании контрактов
Блокчейн реализация LiteTree необходима для, интеграции в блокчейн сложных функциональных возможностей базы данных. Он обеспечивает более удобный способ обработки данных по цепочкам и обеспечивает больше функциональных возможностей взаимодействия по сравнению с простой системой хранения на основе ключ/значение.
Предоставление функциональных возможностей базы данных в AERGO
Есть две основные функции, которые мы можем принести в AERGO с помощью LiteTree:
1. Управление хранением базы данных для цепочки AERGO
LiteTree позволяет использовать функциональные возможности реляционной базы данных в регистре, чтобы обеспечить возможность реорганизации и отката блоков посредством точки восстановления по времени, как объяснялось выше. В AERGO LiteTree обеспечит чрезвычайно быстрое время в восстановлении; быстрее, чем то, что LiteReplica удалось достичь, когда оно было применено к Coinstack от Blocko.
На рисунке 2, управляющее хранилище на основе SQL управляется с использованием LiteTree. Хранилище SQL может хранить структурированные данные и доступно через SQL. Для каждого контракта есть только одно хранилище SQL.
Разветвление LiteTree на AERGO: с LiteTree у вас есть не только надежные функции сверхбыстрого SQLite-движка, но также и возможность разветвления. Это то, что мы изначально планировали использовать в нашей n-уровневой архитектуре на AERGO. Первоначально мы планировали предоставлять Git-подобные ветвив блочной цепочке как часть решения распараллеливания блоков, а реализация LiteTree позволит управлять реляционными базами данных в ветвях (описанных в нашем техническом вайтпейпер). Однако с тех пор мы изменили план, чтобы вместо этого использовать хранилище базы данных уровня 1-го уровня. Это означает, что мы изначально разработали функциональность LiteTree без использования ветвления. Мы активно занимаемся исследованиями и будем информировать наше техническое сообщество о том, как ветвление на уровне хранения будет применяться в AERGO.
2. Многовариантная параллельность Контроль состояния в соответствии с блоками
С LiteTree, реализованным в AERGO, включен контроль параллелизма нескольких версий, поэтому разработчики могут видеть согласованные данные между различными высотами блоков.
SQL-смарт-контракты
Поддержка SQL для разработки интеллектуальных контрактов - это еще один шаг AERGO по расширению использования платформы среди более широкого сообщества разработчиков. Платформа будет включать AERGOSQL, канонический интеллектуальный контрактный механизм, основанный на языке кодирования, который использует синтаксис и семантику, подобный SQL.
Мы рады сообщить, что разработка AERGOSQL прошла успешно, и в настоящее время тестируется приватная бета-версия. Более подробная информация о выпуске с открытым исходным кодом будет объявлена в будущем. Первый предстоящий выпуск AERGOSQL будет включать поддержку call-level SQL. После этого будет выпущена поддержка SQL Server с поддержкой грамматики.
Как использовать LiteTree
Каждая транзакция базы данных сохраняется как фиксация, и каждая фиксация имеет инкрементное число. Рассмотрим пустую базу данных, в которой мы запускаем эту первую команду SQL:
CREATE TABLE t1 (name)
Теперь у него будет первая фиксация в автоматически созданной master
рветке.
Когда мы выполняем новые транзакции, он добавляет новые коммиты в текущую ветку.
INSERT INTO t1 VALUES ('first')
INSERT INTO t1 VALUES ('second')
Теперь у нас есть 3 фиксации.
Чтобы включить в команду несколько команд SQL, мы должны заключить их в команды BEGIN
и COMMIT
команды.
Мы создаем новые ветви, информирующие об ветке источнике и номере фиксации.
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
Мы можем перейти к мастер-ветке.
PRAGMA branch=master
Выполняя ту же команду SELECT, но теперь в главной ветке, она вернется.
first
second
Разный контент для одной таблицы на отдельных ветвях.
Записи в отдельных ветвях имеют одинаковую нумерацию, основанную на расстоянии от первой фиксации.
Мы можем прочитать базу данных в предыдущий момент, перейдя к этому коммиту, как это.
PRAGMA branch=master.2
В этот момент таблица t1
имеет одну строку, и если мы сделаем SELECT, она вернется просто first
.
Запись возможна только во главе каждой ветви, поэтому мы не можем писать в базу данных, когда мы находимся в определенном коммите. Если вы хотите вносить изменения в предыдущую фиксацию, вы должны создать новую ветку, которая начинается с этого фиксации. Также возможно обрезать ветвь в конкретной фиксации, переименовать ветвь, удалить ее и получить информацию о вевтви.
Вы можете использовать LiteTree с большими базами данных, для которых требуется много гигабайт пространства для хранения. Нет копий данных при создании новой ветви; при совершении новой транзакции копируются только измененные страницы базы данных.
Слияние с LiteTree
Сначала мы решили не включать возможности diff или слияния в LiteTree, поскольку эти функции не нужны в AERGO. Однако многие разработчики, которые сталкивались с LiteTree, проявили интерес к этим функциям. Мы активно работаем над включением этих функций. В качестве не только проекта с открытым исходным кодом, но и всей платформы с открытым исходным кодом и поддержки экосистемы; мы планируем сделать код и инструменты, которые мы считаем как привлекательные и полезные, насколько это возможно, чтобы привлечь как можно больше разработчиков в нашу экосистему.
Заключение
Подводя итог, внедрение LiteTree на AERGO позволит нам предоставить разработчикам множество функциональных возможностей баз данных и позволить им использовать возможности SQL-кодирования для блокчейн. Мы также сможем использовать возможности ветвления LiteTree для функциональных возможностей хранения базы данных в конструкции N-уровневого блокчейна AERGO, максимизируя программируемость для разработчиков или компаний, развертывающих и управляющих цепочками на платформе AERGO.
Мы надеемся, что многие из вас используют LiteTree в ваших собственных проектах и с нетерпением ждут того, что придумает наше техническое сообщество. Пожалуйста, следите за обновлениями в отношении дополнительных функций LiteTree в ближайшем будущем. В то же время, не стесняйтесь вносить свой вклад в LiteTree, как вы пожелаете.
Оригинал статьи: https://medium.com/aergo/releasing-litetree-a-blazing-fast-branchable-database-engine-ab477ea6c9da
Контакты для связи со мной:
mail: [email protected]
twitter: https://twitter.com/nnevinniy777
@yevhenpoliakov Поздравляю! Вы получили личную награду!
С Днём Рождения - 1 год на Голосе
Вы можете нажать на бейдж, чтобы увидеть свою страницу на Доске Почета.