Releasing LiteTree : A blazing-fast, branchable database engine (Russian version) Відкриття блокчейн розробки для більш ніж 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 як приклад.
Малюнок 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
Congratulations @mrpl2017! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Award for the number of upvotes received
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last post from @steemitboard: