Общее о структуре таблиц в MongoDB
Уважаемые пользователи!
Сегодня мы рассмотрим функционирование общей БД состояния системы. Как вы знаете, данные делятся на две категории:
Категория данных, необходимых для фиксирования консенсуса в системе, в том числе:
- Существование аккаунтов в системе;
- Текущий баланс пользователя в системе;
- Текущие ограничения пользователя в системе;
- Уникальность поста;
- Другая информация.
Категория больших по объему данных, полное содержимое которых не влияет на консенсус, в том числе:
- Тело постов и комментариев;
- Профиль пользователя;
- Другая информация.
Первая категория данных формируется на основе операций, включенных в транзакции блоков, и сохраняется в СУБД MongoDB. Это открывает широкие возможности. Обработку данных можно осуществлять с помощью языка запросов, будь то: формирование выборок по условиям, агрегирование данных по критериям, подсчет метрик и так далее.
Благодаря встроенным возможностям MongoDB по репликации данных, появляется возможность сделать несколько экземпляров одного и того же множества баз данных, горизонтально масштабируя доступ к данным из множества клиентов.
Вторая категория данных для консенсуса не нужна. И есть два способа получить доступ к этим данным:
- Можно запросить блок, внутри которого лежит транзакция с нужными вам данными.
- Можно построить пользовательскую базу данных по событиям от Event Engine, написав собственное приложение на удобном для вас языке программирования - будь то Go, Python или JavaScript. Что, собственно, и сделала команда golos io. Прелесть данного решения заключается в том, что блокчейн больше не обременен необходимостью строить сложные структуры данных и сложный API интерфейс к ним.
В данном документе приведены описания структур объектов, относящиеся к первой категории данных, которые хранятся в СУБД MongoDB на платформе CyberWay. Также рассмотрены структуры наиболее часто используемых объектов приложения Голос.
Приведенные примеры структур объектов получены с использованием shell-команд вида:
$ use CYBERWAY<contract_name> db.<collection_name>.find().pretty()
<contract_name> = {cyber_token, golos_charge, golos_ctrl, ...}
<collection_name> = {accounts, state, balances, restorers, ...}
База данных MongoDB
В отличие от реляционных баз данных в MongoDB отсутствуют таблицы с заданным количеством столбцов и типами данных. СУБД MongoDB в блокчейне CyberWay содержит несколько отдельных баз данных, каждая из которых начинается с префикса CYBERWAY. Каждая база данных содержит набор коллекций. Документы внутри коллекций могут быть разного типа и представлять собой структуры в формате JSON.
Типовые объекты в документах
Все документы коллекций CyberWay содержат объект _SERVICE_
. В документах могут содержаться объекты с типовой конструкцией (например, объект типа asset
).
Структура документов имеет следующий вид:
"_id" : ObjectId("уникальный номер"),
“Object 1”: { ... },
...
“Object N”: { ... },
"_SERVICE_" : {
"scope" : "имя аккаунта",
"rev" : <номер ревизии>,
"payer" : "имя аккаунта",
"size" : <количество байтов>
}
_id
Идентификатор документа (objectId) _id
состоит из алфавитно-цифровых символов (например, "5cadb0b8cda6a371d236fe9c"). Используется MongoDB для репликации данных.
_SERVICE_
В конце документов находится объект _SERVICE_
, в котором хранится служебная информация, в том числе:
scope
— область видимости (действия) документа. Параметр определяет область в системе, в рамках которой описываемая в документе сущность является актуальной;rev
— номер ревизии, увеличивается с каждым изменением документа;payer
— имя аккаунта, который оплачивает используемую память для хранения документа;owner
— имя аккаунта, который является владельцем документа;size
— объем занимаемый документом памяти (в байтах).
asset
Для описания токенов в документах используется объект типа asset
, содержащий в БД следующие поля:
amount
— количество токенов;decs
— поле, задающее точность стоимости токена в виде количества знаков после запятой;sym
— символ токена, состоящий из набора прописных букв.
Далее мы рассмотрим тему Коллекции таблиц (документов) в MongoDB, используемых системных контрактах.
Полное описание вы можете найти на гитхабе.
Cерия статей, раскрывающих идею и принципы функционирования блокчейна CyberWay и приложения Голос:
- Ответы на вопросы о CyberWay часть 4
- Ответы на вопросы о CyberWay. Часть 3
- Ответы на вопросы о CyberWay. Часть 2
- Ответы на вопросы о CyberWay. Часть 1
- Golos.io: Адаптация к блокчейну CyberWay
- Основные положения CyberWay
- CyberWay: предпосылки создания платформы. Основные отличия от EOS
- Разработка новой блокчейн-платформы CyberWay. Дорожная карта проекта
- Функционирование смарт-контрактов приложения Голос на платформе БЧ CyberWay
- Техническая реализация bandwidth на платформе CyberWay
- Testnet: Экспериментальная версия
- Кошелек golos_wallet для Bittrex на платформе CyberWay
Каналы коммуникации с Golos•Core
- https://t.me/goloscoretc (решение технических вопросов, связанных с работой блокчейн, нод, api и др.)
- https://t.me/joinchat/BLwf_A118xQ57nsM1Q4MPA (канал для вноса предложений от комьюнити, обсуждение перехода на кодовую базу EOS)
- https://t.me/golos_tools (решение вопросов по различным интерфейсам и дополнительным инструментам, создаваемым Golos•Core)
- https://t.me/goloscore_analytics (решение вопросов по работе экономики блокчейн, статистическим экономическим данным, аналитике данных)
- https://t.me/goloscoretech (новостной канал, с актуальной информацией от Golos•Core)
Мы будем очень рады, если вы поддержите делегата @goloscore. Заходите на страничку https://golos.io/~witnesses голосуйте за делегата Golos•Core!
Спасибо за внимание и хорошего дня!
С уважением,
Команда Golos•Core: @andreypf, @korpusenko, @maslenitsa, @muhazokotuha, @zxcat, @annaeq, @anazarov79, @kaynarov, @s-medvedev, @eugin, @dedbaraded, @jimak.