Сделал до сюда, починил по пути какие-то баги, судя по логам что-то даже обрабатывает и что-то записывает, что именно пока не читал. В следующей итерации допишу промежуточных проверок что по флоу всё правильно считает и напишу основные — соберу исходные данные которые записал, руками посчитаю по ним перцентили, попрошу вычислить, сравню. Затем промутирую исходную коллекцию, добавив туда новых строк и удалив часть старых, запущу всё снова, снова сравню с ожидаемыми.
Штука довольно прикольно выглядит. Я задумывал это как возможность писать интеграционные тесты, но по сути если назвать чуть иначе, то там уже практически можно демонов обработки этих потоков данных делать. Там уже доступен запрос «жди пока у коллекции Х не изменится id поколения», есть возможность попросить запустить трансформацию. Т.е. уже можно сделать цикл который следит за тем, что данные были изменены и чтобы оно пересчитало их в следующую коллекцию. Параллельно можно запустить ещё таких штук, которые будут следить за изменениями следующих коллекций и перекладывать дальше. Это и так будет отдельной командой (и по задумке оно будет умным, видя что таких команд запущено больше одной на разных хостах и будет делить работу в тех трансформациях где это возможно), но мне нравится, что это уже физически реализуемо.
Ну и на самом деле это полукостыль, потому что такой агент на самом деле должен выполняться не внутри васма, а быть самостоятельным бинарником, который просто ходит в апи (чтобы он мог и сайд-эффекты относительно внешнего мира совершать). Но сейчас для тестирования всего этого васм-взаимодействия полезнее такой вариант, уже отловил пачку заляп ансейфных (благо в дебаге оно даже в unchecked-операциях обложено проверками на валидность и довольно понятно говорит что пошло не так; а без unsafe там не получится, т.к. всё общение идёт через `extern "C"`).
Вряд ли на этой неделе закончу с proof-of-concept потокового вычисления перцентилей, там нужно разбираться в мёртвом коде трёхлетней давности. Но очень хочется доделать, даже если затем просто выкину. Выкину потому что не так уж они и нужны скорее всего. Ко мне пришла довольно логичная мысль, что для такого кейса использования проще использовать мою балалайку как source of truth относительно данных и затем имея механизмы обеспечения консистентных преобразований наладить синхронизацию части лежащих у меня данных с каким-нибудь clickhouse, где производить вычисления, где они определённо будут сильно быстрее из-за правильной укладки данных, а затем выдавать результаты в итоговые коллекции, где их заберёт тот кому они нужны. А всё что я делаю просто даст возможность всегда знать, актуальны ли данные лежащие в итоговой коллекции, насколько они отстают от исходных, иметь гарантии консистентности входа и выхода.
#diffbelt
Штука довольно прикольно выглядит. Я задумывал это как возможность писать интеграционные тесты, но по сути если назвать чуть иначе, то там уже практически можно демонов обработки этих потоков данных делать. Там уже доступен запрос «жди пока у коллекции Х не изменится id поколения», есть возможность попросить запустить трансформацию. Т.е. уже можно сделать цикл который следит за тем, что данные были изменены и чтобы оно пересчитало их в следующую коллекцию. Параллельно можно запустить ещё таких штук, которые будут следить за изменениями следующих коллекций и перекладывать дальше. Это и так будет отдельной командой (и по задумке оно будет умным, видя что таких команд запущено больше одной на разных хостах и будет делить работу в тех трансформациях где это возможно), но мне нравится, что это уже физически реализуемо.
Ну и на самом деле это полукостыль, потому что такой агент на самом деле должен выполняться не внутри васма, а быть самостоятельным бинарником, который просто ходит в апи (чтобы он мог и сайд-эффекты относительно внешнего мира совершать). Но сейчас для тестирования всего этого васм-взаимодействия полезнее такой вариант, уже отловил пачку заляп ансейфных (благо в дебаге оно даже в unchecked-операциях обложено проверками на валидность и довольно понятно говорит что пошло не так; а без unsafe там не получится, т.к. всё общение идёт через `extern "C"`).
Вряд ли на этой неделе закончу с proof-of-concept потокового вычисления перцентилей, там нужно разбираться в мёртвом коде трёхлетней давности. Но очень хочется доделать, даже если затем просто выкину. Выкину потому что не так уж они и нужны скорее всего. Ко мне пришла довольно логичная мысль, что для такого кейса использования проще использовать мою балалайку как source of truth относительно данных и затем имея механизмы обеспечения консистентных преобразований наладить синхронизацию части лежащих у меня данных с каким-нибудь clickhouse, где производить вычисления, где они определённо будут сильно быстрее из-за правильной укладки данных, а затем выдавать результаты в итоговые коллекции, где их заберёт тот кому они нужны. А всё что я делаю просто даст возможность всегда знать, актуальны ли данные лежащие в итоговой коллекции, насколько они отстают от исходных, иметь гарантии консистентности входа и выхода.
#diffbelt