Общее о структуре таблиц в MongoDB

В настоящем разделе приведены описания структур объектов, хранящихся в базе данных 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 содержит несколько отдельных баз данных. Имя каждой базы данных состоит из префикса и имени аккаунта, на котором загружен контракт. Префикс задается в параметре chaindb_sys_name во время запуска nodeos. Например, указав в параметре префикс CYBERWAY для контракта cyber.token, загруженного на аккаунт cyber.token имя базы данных будет _CYBERWAY_cyber_token_.

База данных MongoDB является документо-ориентированной и состоит из набора коллекций. Каждая коллекция содержит набор документов и имеет свой алфавитно-цифровой идентификатор, размер которого ограничен 128 символами.

                 «База данных»
                /      |      \
      Коллекция_1    . . .    Коллекция_n
          |          . . .        |
     Документ_1.1    . . .    Документ_n.1
     Документ_1.2    . . .    Документ_n.2
          . . .                . . . 
     Документ_1.m    . . .    Документ_n.k

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

Типовые объекты в документах

Все документы коллекций содержат свой идентификатор и объект _SERVICE_. Кроме этого в документах могут содержаться объекты с типовой конструкцией (например, объект типа asset). Описание полей таких объектов в параметрах документов опускается.

Структура документов имеет следующий вид:

"_id" : ObjectId("уникальный номер"),
"Object 1": { ... },
...
"Object N": { ... },
"_SERVICE_" : {
      "scope" : "имя аккаунта",
      "rev" : <номер ревизии>,
      "payer" : "имя аккаунта",
      "size" : <количество байтов>
}

_id Идентификатор документа (objectId) _id создается во время записи документа в БД и состоит из алфавитно-цифровых символов (например, "5cadb0b8cda6a371d236fe9c").

_SERVICE_ В конце документов находится объект _SERVICE_, в котором хранится служебная информация, в том числе:

  • scope — область видимости (действия) документа. Параметр определяет область в системе, в рамках которой описываемая в документе сущность является актуальной. Например, токены, созданные аккаунтом, могут быть ликвидными только в рамках одного приложения;

  • rev — номер ревизии, увеличивается с каждым изменением документа;

  • payer — имя аккаунта, который оплачивает используемую память для хранения документа;

  • size — объем занимаемый документом памяти (в байтах).

asset Для описания токенов в документах используется объект типа asset, содержащий в БД следующие поля:

  • amount — количество токенов;

  • decs — поле, задающее точность стоимости токена в виде количества знаков после запятой;

  • sym — символ токена, состоящий из набора прописных букв.

Last updated