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 за вычитку этого поста перед публикацией.
Голосуйте за меня в качестве делегата
Вы также можете проголосовать прямо с платформы Голос здесь. Для этого нужно проделать следующее. Каждый голос важен. Спасибо !
@arcange Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество полученных голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
@arcange Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Вы опубликовали 4 постов в один день
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Очень рад, что у разработчиков есть GolosSQL. У меня вопрос к частоте сбора данных. Раньше упоминалось, что данные собираются каждые 10 минут. Какая периодичность сейчас?
По моим расчетам по текущей базе:
Транзакции за последние 30 дней по базе
Количество транзакций: 1562468 за 2591997 секунд.
Скорость появления новых транзакций: 1 транзакция за 1.66 секунд.
Транзакции за последние 7 дней по базе
Количество транзакций: 413070 за 604797 секунд.
Скорость появления новых транзакций: 1 транзакция за 1.46 секунд.
Транзакции за последние 2 дня по базе
Количество транзакций: 128826 за 172797 секунд.
Скорость появления новых транзакций: 1 транзакция за 1.34 секунд.
новые блоки обрабатываются каждые 10 секунд.
Это изменение в таблице
Accounts
иComments
, которые обрабатываются каждые 10 минут.Новый блок создается каждые 3 секунды. Но это занимает некоторое время, чтобы он стал необратимым.
"Задержка" GolosSQL поэтому очень снижена по сравнению с блокчейн.
Наконец, неправильно сделать разделение для расчета транзакций в секунду.
Есть моменты, или есть много транзакций в блоке. И другой момент, блоки являются практически пустыми.
Это важно, это самое большое количество сделок, включенных в один блок. Именно в этот момент, что производительность должны быть лучшие.
Но никогда блок не будет происходит быстрее, чем за 3 секунды.
Понимаю, надо считать количество операций в блоке, а не транзакции. Но мой анализ по всей базе показал, что большинство транзакций не содержат более 2 операций (исключение лишь транзакции ботов, когда за 1 куратором идут паровозом 5 голосов следом). Про время генерации блоков - понял. Спасибо за вашу работу!
Hello!
I'm trying to play with GolosSQL DB and the first thing that surprises me is the fields that are naturally numeric like balance, vesting_shares etc being VARCHAR and moreover including currency in the field value (e.g. all balance values are "xxxx GOLOS"). Not only this is bloating the database in size and is against the relational database design principles, but also very inconvenient when querying as I have to do something like:
CAST(SUBSTRING(vesting_shares, 1, LEN(vesting_shares) - LEN(' GESTS')) AS FLOAT)
to get a meaningful value I can operate with. Why was it designed like this and is there any better way of getting numeric values for the fields in question?
Вряд ли пользователей заинтересует внутренняя механика блогчейнов
Некоторых не волнуют. Но, с другой да, и они больше, чем вы думаете.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
yefet, gidlark, losos, kibela, litrbooh, t3ran13, boddhisattva, xroni, ianboil, francisgrey, strecoza, ukrainian, neo, gildar, mir, polyideic, andrvik, zoss, phoenix, dikaniovs, dimarss, kot, vasyl73, vik, investigator, tristamoff, genyakuc, vadbars, dany2323, maksina, yurgent71, elviento, dr-boo, lenarius, vasilisapor2, pioner777888, kulik, guepetto, vict0r, semasping, svinsent, gromozeka, lira, drim, gryph0n, arystarch, rubin, miroslav, ukrainochka, igor-golos, yuriks2000, boltyn, gapel, bobrik, on1x, newodin, vika-teplo, sva-lana, borisss, aleksandra, nims55, aiparnyuk, kondratij, baltiyka, myhardmoney, amelina.elena, cattyshark, del137, prost, mixtura, bombo, manavendra, lispir, dimas102, azimablog, nerengot, bag, now, sergiusduke, igrinov
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
Без сомнения, серьезная работа проделала.
Спасибо. И есть еще вещи, чтобы сделать ... ;)
Спасибо. Хорошая работа проделана.
Хотя большинство, этих улучшений и не заметит
Пусть и дальше сопутствует удача
Спасибо большое за проделанную работу.
Спасибо!