GolosSQL - Обновление 8 - Улучшение производительности
GolosSQL - это публичная база данных MS-SQL со всеми данными блокчейна внутри.
Предыдущие посты:
- Вступительный пост
- Обновление 1 - Распознавание языка (english only - только на английском)
- Обновление 2
- Обновление 3
- Обновление 4
- Обновление 5
- Обновление 6
- Обновление 7
Что нового?
GolosSQL - русский брат SteemSQL. Те из вас, у кого есть аккаунт в Стим, знают, что весь последний месяц количество пользователей лавинообразно увеличивалось. В результате этого активность на блокчейне испытала такой же прирост. И высказанное мной беспокойство по поводу способности SteemSQL ежедневно поглощать растущую массу данных оказалось пророческим.
Взгляните на следующий график, который отображает количество транзакций в день в блокчейне Steemit, и вы увидите, что количество транзакций, которое необходимо обрабатывать, утроилось (+199%) за последние 30 дней.
В случаях с количеством постов и комментариев это означает соответственное увеличение на 315% и 297%.
А количество апвоутов более чем удвоилось, увеличившись на 112%.
Постепенно показатели введения данных в базу данных ухудшились. В конце концов SteemSQL стал плохо справляться со всеми многочисленными обновлениями, генерируемыми каждой транзакцией. В некоторых случаях я обнаруживал задержку в 24 часа и более по сравнению с данными, имеющимися в блокчейне.
Поэтому я решил взять быка за рога и провел тщательный анализ, который привел к нескольким изменениям в базе данных и полной реорганизации инжектора базы данных.
1. Изменения в базе данных
В основном они касаются индексов базы данных. Я обнаружил, что было создано множество индексов для улучшения производительности некоторых запросов, но в итоге выяснилось, что эти индексы использовались редко.
Поэтому я проанализировал индексы базы данных один за другим: некоторые из них удалил, другие - изменил.
2. Изменения в инжекторе базы данных
Инжектор базы данных - это процесс, ответственный за чтение каждого блока блокчейна и распределение транзакций в разные таблицы базы данных.
Я поработал над оптимизацией этих процессов, отделив инъекцию транзакций от обновления затронутых нетранзакционных таблиц (таблицы Accounts и Comments).
Эти процессы теперь выполняются параллельно, благодаря оптимизированной многопоточной реализации различных задач.
Результат
Благодаря проделанной работе я смог сократить общее время обработки в 3 раза!
Теперь я перенес эти улучшения также и в GolosSQL, и сейчас он без проблем может совладать с таким ростом количества транзакций.
Будем надеяться, что в один прекрасный день мы увидим 1 000 000 транзакций в день. Это то, чего я действительно желаю платформе Голос!
Спасибо за чтение!
Все выплаты с этого поста пойдут на поддержание работы GolosSQL. Спасибо за вашу поддержку.
Спасибо @rusteemitblog за вычитку этого поста перед публикацией.
Голосуйте за меня в качестве делегата
Вы также можете проголосовать прямо с платформы Голос здесь. Для этого нужно проделать следующее. Каждый голос важен. Спасибо !