OurSQL — реплікація баз даних MySQL із використанням Blockchain

OurSQL — реплікація баз даних MySQL із використанням Blockchain

Я — Роман Гелемб’юк з Івано-Франківська. Уже більше 17 років займаюся програмуванням. Основні технології — PHP та Golang. Як порядний IT-шник я маю свої pet-проекти. Наразі мене цікавлять децентралізовані бази даних та блокчейн-технології.

Хочу розповісти про свій проект OurSQL. Це, свого роду, розширення MySQL, яке дозволяє створити децентралізовану базу даних без вузлів із «особливими» правами.

Ідея

Спочатку була ідея створити децентралізовану платформу для громадянського суспільства. Щось типу соціальної мережі, але децентралізовану, без «адміна», «власника» і модераторів, із можливостями вести конструктивний діалог, водночас.

Першою прийшла ідея використати блокчейн як базу, але весь механізм виглядав занадто складним. Потім ідея еволюціонувала в більш вузьку — створити універсальну платформу для децентралізованих баз даних. А тоді вже на цій базі можна буде робити все інше, концентруючись лише на бізнес-логіці самої соціальної мережі.

Огляд готових рішень для децентралізованих ДБ не дав результатів, фактично є лише BighainDB (на базі MongoDB). Насправді ж вона не виконує обіцяного, хоч і є розрекламованою та популярною. Слід відзначити проект Hyperledger.org, який у той час видався мені занадто складним для використання. Напевно, для корпорацій він буде найкращим вибором, але не для малих компаній чи одинаків.

Процес розробки

Задача була створити інструмент для реплікації баз SQL-даних повністю децентралізованим способом, без будь-яких master вузлів.

Вибір технології був простим. Поки що єдиним рішенням, яке довело свою ефективність для таких задач, є Blockchain. Тому я почав вивчати цю технологію на прикладі створення криптовалюти. Для розробки я вибрав Golang. Основна причина — я давно хотів отримати реальний досвід на цій мові програмування із великим проектом.

У результаті написав спрощений клон bitcoin на Golang із нуля. Він робочий, хоча підтримувати я його не планую.

Далі на базі коду democoin був створений OurSQL — проксі-сервер MySQL, який фільтрує SQL-запити, перевіряє можливість виконання, конвертує SQL у блокчейн-транзакції, будує блоки (для блокчейну), відправляє блоки та транзакції іншим нодам (іншим серверам OurSQL в межах однієї бази даних) і ті, в свою чергу, роблять відповідні оновлення у своїх локальних копіях MySQL-баз.

Назва OurSQL народилася сама собою. MySQL — для моєї бази даних, а OurSQL — для нашої бази даних. У процесі довелося вивчити протокол MySQL клієнта, детально розібратися у всіх нюансах шифрування та електронних підписів у різних мовах програмування та бібліотеках та інше.

Continue Reading ...

OurSQL — tool to replicate MySQL databases using blockchain

OurSQL — tool to replicate MySQL databases using blockchain

Imagine you have a databases created with MySQL (or other SQL server). You need to share this database with some community and allow write access. And because of trust problem, there can not be any “master” nodes or any special administrating roles with special permissions. Additionally, there is no 100% trust to all users who will want to use a database, however, you expect to have the DB working.

In other words, you need to create a distributed ledger. Best and most known technology to convert your local database to a distributed ledger is a blockchain.

How to do this?

How many coding will it require to join your MySQL DB with a blockchain tools?

What if your local DB already has a GUI and you want to reuse it in your distributed ledger too?

Some time ago I had this question. I didn’t find a solution that time.

And I got an idea to create the tool.

The idea

I would like to have a tool that can do all work related to replication of data between copies of same databases managed by different people. I want to work on my DApp business logic as easy as on any centralised application, like a web site or a desktop app storing a data in a local database. In my DApp I don’t want to think about how data changes are delivered to other instances of an app.

Continue Reading ...