Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
goloscore
5 лет назад

Общее о структуре таблиц в 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 и приложения Голос:


Каналы коммуникации с 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.

20
157.706 GOLOS
На Golos с August 2017
Комментарии (4)
Сортировать по:
Сначала старые