Блокчейн как очередной этап эволюции систем хранения данных


Рассказ простыми словами о том, что находится «под капотом» большинства современных программ и вебсайтов.


абрикоски
эти абрикосы, напоенные лучами крымского солнца, здесь для привлечения внимания

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

Как хранятся данные?

Если отбросить различную экзотику, данные в памяти машины хранятся как последовательность бит. Каждый бит может иметь всего два значения: 1 или 0. Любые данные, такие как числа, тексты, картинки, музыка и видео в памяти компьютера представляют собой последовательность нулей и единичек. Для удобства доступа биты объединяются в группы. Группа из 8 бит по традиции называется байтом. В зависимости от архитектуры компьютера 1, 2, 4 или 8 байт образуют машинное слово. Каждое машинное слово имеет уникальный адрес в памяти и может содержать, например, число или текстовый символ, но чаше всего это будет маленькая часть более сложной структуры данных, например, записи банковской транзакции.

Представление данных в виде массива машинных слов и отдельных бит отлично подходит для компьютерных программ, но совершенно не годится для людей, так как человеческий ум не может эффективно работать с длинными последовательностями нулей и единиц. Для людей данные всегда необходимо структурировать.

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

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

Файловые системы

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

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

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

Системы Управления Базами Данных (СУБД)

Исторически сложилось так, что начиная примерно с семидесятых годов прошлого века для хранения данных в основном использовались системы управления базами данных (СУБД). Это специальные программы, которые обеспечивают одновременный доступ к данным для нескольких пользователей и помогают поддерживать корректность этих данных. При работе с базой данных (БД) программа, вместо записи данных в файлы, обращается к СУБД. По сути, между программой и данными появляется посредник.

Кроме надежного хранения данных, важной функцией любой СУБД является обеспечение их корректности. В частности, программа СУБД, управляющая базой данных, должна уметь разруливать ситуации, когда два пользователя одновременно пытаются обновить одни и те же данные. Также она должна предотвращать внесение в базу заведомо неверных данных. Например, неудачей должна окончиться попытка вставить в базу данных бухгалтерской программы запись о сотруднике, возраст которого отрицателен, а имя и фамилия не определены.

СУБД могут брать на себя дополнительные функции. Одной из них является разграничение доступа. По сути, СУБД следит за тем чтобы пользователи получали доступ только к тем данным, которые им разрешено видеть или изменять. Например, в большинстве случаев рядовой сотрудник не должен получать доступ к информации о зарплатах топ-менеджмента и уж тем более модифицировать эти данные.

Кроме хранения данных СУБД способны также производить их обработку, например, делать выборку по заданному критерию или автоматически присваивать уникальный идентификатор при добавлении новой записи. Это позволяет программам, работающим с СУБД, запрашивать только те данные, которые требуются в данный момент.

Реляционные СУБД и язык SQL

За сорокалетнюю историю системы управления базами данных значительно эволюционировали. Появилось несколько различных типов СУБД, из которых наибольшее распространение получили реляционные базы данных, в которых вся информация хранится в виде записей в таблицах.

Язык, на котором происходит взаимодействие программы с реляционной СУБД, называется SQL. Он позволяет делать сложные выборки данных по различным критериям, а также добавлять, удалять и модифицировать записи в таблицах. Сами таблицы также создаются при помощи SQL. А еще SQL позволяет накладывать разнообразные ограничения на данные, скажем, можно наложить требование уникальности на значения в одной колонке таблицы и запретить добавлять записи, в которых чего-то не хватает. Например, при добавлении в БД записи о сотруднике, его табельный номер должен быть уникален в рамках предприятия, а поля Ф.И.О. и дата рождения обязательно заполнены.

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

Современные системы управления контентом (CMS), наиболее популярным представителем которых является WordPress, используют реляционные СУБД для хранения постов, комментариев и прочих необходимых данных. То есть, когда вы просматриваете странички в интернет, во многих случаях содержимое страницы извлекается из базы данных, преобразуется в пригодный для просмотра вид и затем отправляется в ваш браузер. Данные вебсайтов помещают в БД для того, чтобы владелец сайта мог легко изменять как содержимое отдельных страниц, так и саму структуру сайта без редактирования множества различных файлов на диске сервера.

Проблема масштабирования СУБД и базы данных NoSQL

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

С развитием интернет, стало появляться все больше проектов, которые было достаточно сложно реализовать, используя реляционные СУБД и язык SQL. Это привело к появлению новых типов СУБД, которые в отличие от предшественников изначально поддерживали эффективные способы репликации. Для таких обозначения таких баз данных используется термин NoSQL, по причине того, что они используют для доступа к данным наборы команд, значительно отличающиеся от SQL, который на протяжении многих лет является стандартным языком для работы с данными. Базы данных NoSQL подходят для более узкого круга задач, чем реляционные БД, так как за высокую производительность и масштабируемость приходится чем-то платить.

Блокчейн

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

Под капотом любого блокчейна находятся две вещи. Во-первых, это специальная структура данных, в которой сохраняется вся информация блокчейна, по сути, это обычное хранилище данных, чем-то напоминающее традиционные базы данных. Во-вторых, для доступа к данным блокчейна требуется программа, которая чем-то похожа на очень сильно специализированную СУБД, работающую только с данным с заранее заданной структурой.

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

Также каждый блокчейн работает только с одной базой данных, к которой получают доступ абсолютно все пользователи. Ситуация, когда создается еще один экземпляр данных блокчейн, пусть и с такой же структурой, называется «форк». В результате форка получается два разных блокчейна, даже если структура данных и программное обеспечение не менялось. В отличие от блокчейна традиционные СУБД позволяют не только создавать сколько угодно разных баз данных, но также гибко ограничивать доступ к ним согласно инструкциям разработчиков. Другими словами, данные в конкретном блокчейне выглядят так, как будто существуют в единственном экземпляре, который доступен каждому, тогда как СУБД обычно может управлять десятками баз данных с различной структурой, легко создавать их копии и ограничивать доступ пользователей к этим данным.

Еще одной распространенной особенностью блокчейна является хранение истории изменения данных. Например, когда вы публикуете пост на сайте, работающем под управлением WordPress, этот текст записывается в базу данных и вы можете изменить или удалить его в любой момент. Это можно сделать или через админку WordPress или же обратившись напрямую к базе данных. Несколько простых команд SQL и от вашего текста останется разве что копия в кеше Google. С блокчейн Golos такой номер не проходит, даже если вы изменяете или удаляете что-то на сайте golos.io, предыдущая версия данных все равно никуда не денется. Собственно поэтому и говорят, что блокчейн помнит все.

На этом я позволю себе завершить рассказ, спасибо за внимание.

P.S. Я старался сделать этот текст читабельным для неспециалистов, но мне трудно судить, насколько хорошо это получилось. Если у вас возникли вопросы, пожалуйста, задавайте их в комментариях.

В случае если вы обнаружили не неточность или ошибку, прошу сообщить об этом. Любая конструктивная критика приветствуется.


✪  ✪  ✪

_Если вам понравилась эта статья, подписывайтесь на мой блог — впереди будет много интересного.

Заранее благодарен вам за поддержку._


Comments 1


Спасибо, интересно. Возможно, человек сам блогчейн ходячий и является частью другого блогчейна))

25.07.2017 20:17
0

ДНК и РНК, первая хранит данные, вторая с ними операции осуществляет. Вот и получается что весь человек это запакованный в днк код.

25.07.2017 21:01
0

Спасибо за то, что написали нормальным человеческим языком)
Наконец-то поняла, почему "помнит всё".

26.07.2017 04:13
0