metaclass: (Default)
[personal profile] metaclass
Очередной раз стукнулся об ленивость.

Делаю фоновый расчет отчетов - клиент просит у сервиса "посчитай мне отчет", тот ему возвращает идентификатор-ссылку на future со считалкой отчета и далее клиент опрашивает сервис на предмет "а не готов ли наш отчет" и тот ему отвечает либо "не готов" либо "готов, вот тебе данные".
Ну, склепал очередь отчетов - атом, в нем мап, в мапе идентификаторы запрошенных отчетов и future к ним. Запускаю - а оно мгновенно говорит, "да, вот отчет готов, забирай" и давай его считать и отдавать. В потоке запроса, не в рабочем потоке future.
Ленивость. Оно возвращает башку последовательности данных отчета сразу, "на тэбэ, дорогой, форси меня". И запрос готовых данных (в том числе, даже просто попытка в целях отладки посмотреть на мап с future) - вызывает форсинг последовательности.

PS: И еще обнаружил очередную фичу кложури - thread-local bindings протаскиваются во все вызовы, которые перекладывают работу в другие потоки. Т.е. конкретно тут - я в запросе часть общих параметров (типа имени пользователя) складываю в thread-local binding чтобы не протаскивать их руками через 100500 функций, думал, что при вычислении внутри future придется их доставать и перекладывать во второй поток - а оно уже сделано.
Авторы кложури не перестают удивлять своей крайней адекватностью и практичностью языка.

Date: 2013-03-27 09:00 am (UTC)
From: [identity profile] metaclass.livejournal.com
У меня обычно отчеты по неизменяемым данным, там проще.
А для динамических нужны какие-то более другие методы работы, в т.ч. и кэширование результата запроса.

Date: 2013-03-27 09:04 am (UTC)
From: [identity profile] sergiej.livejournal.com
Не надо кешировать. Первым запросом берутся только айдишки да побольше, скажем страниц на 10, если больше говорим "заузь критерии, всё не влазит". Потом очередной набор айдишек кверится для каждой страницы с деталями, вот и всё. Обеспечено что пациент пролистав увидит все записи. Можно не листать а дописывать внизу вновь прочитанные - так намного удобнее, но не во всех гридах это возможно без извращений.
Пейджинг собственно только для того и нужен, чтобы особо недоверчивые были уверены что они "проверили всё глазками".

Date: 2013-03-27 09:10 am (UTC)
From: [identity profile] metaclass.livejournal.com
Мы ID храним на клиенте, получается?

Date: 2013-03-27 09:13 am (UTC)
From: [identity profile] sergiej.livejournal.com
Ну можно на миддлвере если трёхзвёнка. Хранить пару сотен айдишек это мелочь по сравнению со сложностью обеспечения правильного педжинга делая каждый раз запрос рейнджа. Да и для базы в итоге такое легче. Только один раз идёт запрос по сложным критериям, потом всегда "ин" по конкретным индексированым айдишкам.

Date: 2013-03-27 09:20 am (UTC)
From: [identity profile] metaclass.livejournal.com
Заебись идея, в целом. Хранить IDшники гораздо легче, чем целиком результат.

Date: 2013-03-27 09:29 am (UTC)
From: [identity profile] sergiej.livejournal.com
Может есть что-то более правильное, но это из опыта просто и быстро сделать.
Проблема только с хипстерскими базами, где нет айдишек, но там пейджинг это вообще секс в гамаке стоя :)

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 17th, 2025 12:09 pm
Powered by Dreamwidth Studios