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

Проблема обновления данных в толстом клиенте

В предыдущем посте я получил довольно интересные комментарии. Основная тема текущего поста - как обновлять информацию с Голоса в своей базе данных. Архитектура там будет своя, строиться будет на базовых принципах. @primus правильно отметил:

Зачем обновлять всех пользователей по крону? Может лучше парсить блокчейн Голоса по мере появления новых блоков и исходя из того, что в блоках записано - накатывать обновления в базе пользователей / статей / балансов / апвоутов и т.п. Тогда у вас не будет пустой работы о "обновлению" неактивных аккаунтов и будет только производительная деятельность по учёту реальных изменений.

В целом - идея здравая. И ее можно попытаться частично реализовать - начать рыть методом get_block и пробираться по блокчейну восстанавливая все данные в своей структуре. Возможно, я попытаюсь сделать что-то подобное. Это самый "правильный" способ, в теории. А вот на практике - не знаю. В одном блоке часто записано много операций. В них записано всё: и новые посты, и комментарии, и лайки, и переводы голоса, и создание аккаунтов. И изменение постов. И комментариев.

Более того - изменение постов и комментариев написаны в виде unidiff (читаем Универсальный формат Diff). Получается огромная линейка событий. И тут развилка в желаниях и возможностях. Получить конечный/актуальный контент можно по прямому запросу. А можно пройдя все исторические слепки воссоздать актуальный контент. Что же выбрать и почему?

По-правде говоря - толстому клиенту не зачем хранить всю историю изменений - это и так записано в Голосе, зачем дублировать эту информацию? Требуется последняя версия контента. И тут мы попадаем в следующую ловушку. Необходимость проходить рекурсивно все комментарии.

Рассмотрим пример - предыдущий пост и комментарии к нему. Как видно - API выдает лишь комментарии первой вложенности. Хотите загрузить дальше? Делайте еще один запрос. Рекурсия меня не пугает, но вот обработку данных она может запросто превратить в ад.

Для того, чтобы определиться - нужно в первую очередь разобраться, что проще и быстрее внедрить. Стоит ли держать у себя ВСЕ данные Голоса. Или стоит "собирать" их по-требованию от клиента. Зашел человек к пользователю, который давно не обновлялся, быстро подгрузилась/дополнилась история его постов и комментарии по API выборке с этого конкретного пользователя. Получится реализация кругами по воде. Запросили - дали + подгрузили связанные части.

Очень двоякая ситуация, не понятно как ее решить. Дорогу осилит идущий. Целостность контента тоже очень важна. Вопрос лишь в том, как получать новые данные через API. Думаю, если у меня удастся правильно отработать unidiff на контенте/комментариях в PHP, то стоит рассмотреть полный обход линейки блоков Голоса. А вы как считаете?

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