Фильтрование account_history


Я закоммитил в своей ветке изменения, которые я сделал относительно account_history плагина с целью снизить потребление памяти golosd и в то же время сохранить возможность получать виртуальные операции.

Взять код можно здесь https://github.com/gropox/golos/commits/less_account_history

Как это работает

У нас имеются нормальные операции, которые прописанны в протоколе. Вроде vote, comment, transfer и другие, которые могут инициировать пользователи блокчейна. Так же есть и виртуальные операции, которые генерирует нода выполняя расчеты. 

Вот список виртуальных операций

fill_convert_request_operation,
author_reward_operation,
curation_reward_operation,
comment_reward_operation,
x liquidity_reward_operation,
interest_operation,
fill_vesting_withdraw_operation,
fill_order_operation,
x shutdown_witness_operation,
fill_transfer_from_savings_operation,
hardfork_operation,
comment_payout_update_operation

Эти виртуальные операции не сохраняются в блокчейне, так как они вычисляемые. Их всегда можно вычислить на основе других данных, записанных в блокчейне. Эти операции часто очень интересны скриптописателям ботов и их можно получить коммандами get_account_history и get_ops_in_block. Обе комманды, при включенном account_history плагине возвращают как обычные, так и виртуальные операции. Для этого account_history плагин сохраняет все операции в базе данных. Получется, двойной расход памяти, так как нормальные операции и так уже хранятся в памяти. На данный момент, при включенном account_history плагине, нода потребляет ~37G памяти от shared_memory. Так как shared_memory лучше распалогать в RAM, то можно представить, на сколько дорогой становится сервер. Вот и родилась у меня идея, сохранять не все в базе данных, а только виртуальные операции. Нормальные же операции можно все еще получить командой get_block.

В конфигурационном файле config.ini можно было уже фильтровать операции и включалось это опцией filter-posting-ops. Правда тогда оставались только операции transfer и тому подобные.

Потому я добавил еще один параметр only-virtual-ops. "Пропатченная" мной нода, при включенном filter-posting-ops параметре отбрасывает только pow операции генерируемые майнерами. Мне они не интересны, и вообще я думаю майнинг должен быть все равно выпилен.

Если помимо filter-posting-ops включить only-virtual-ops, то тогда только виртуальные операции будут сохраняться в базе.

Вот пример того, что выдает get_account_history в таком случае

Как видно у @vik-а в истории остались только виртуальные операции.

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

Еще бы разобраться с get_ops_in_block методом database_api, что бы он могла вытаскивать нормальные операции из блока, а виртуальные из базы, созраненные account_history плагином. То было бы еще интереснее, так как не пришлось бы переписывать скрипты, для которых интересны виртуальные операции.

Кстати у account_history_plugin есть еще один параметр track-account-range которым можно задавать аккаунт, для которого сохранять историю. Таким образом можно еще больше снизить потребление памяти, если скрипт должен отслеживать только один какой то аккаунт.

 

 

 

 

 

 

 

 

 


Comments 7


Я верно понимаю, что с таким патчем будут только виртуальные операции возвращаться? А остальные нужно самостоятельно из блока доставать?

21.01.2018 06:50
0

Да, все верно

21.01.2018 10:54
0

Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
francisgrey, niiu, vik, vadbars, vict0r, semasping, cergey-p, kssenia, tnam0rken, exan, yudina-cat, vika-teplo, hyipov, mryabinin, graff0x, manavendra, lengalenga, prifix, mp42b, zhenek, magformers, irimeiff, chirakovalsky, benken, funt33, maryatekun, makssib, anykeycheg
Поэтому я тоже проголосовал за него!

Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!


Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"


dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:

21.01.2018 23:03
0

Так а в результате сколько ГБ стало кушать вместо 37?

28.01.2018 00:26
0

15G как я понимаю

28.01.2018 09:10
0

Ого, нехило!

28.01.2018 14:10
0

@ropox Поздравляю! Вы получили личную награду!

С Днём Рождения - 1 год на Голосе
Вы можете нажать на бейдж, чтобы увидеть свою страницу на Доске Почета.

Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.

10.02.2018 11:14
0
My pageSettingsLogout
Cancel Confirm
100%
Cancel Confirm
Cancel Confirm