Size: a a a

Kotlin Community

2020 October 08

с#

саша сок #KotlinGang... in Kotlin Community
саша сок #KotlinGang
стоп, разве нельзя 2 разных invoke сделать? там же в ишью суть вроде как в мультинаследовании от функций для последующих тайп чеков, нет ?
точнее в том, что это неправильно работает
источник

с#

саша сок #KotlinGang... in Kotlin Community
Quantum Harmonizer
Я бы, конечно, хотел, чтобы проперти была и продьюсером () -> T, и консьюмером (T) -> Unit, но это, к сожалению, пока что работать не будет
а, я понял. вопрос снят
источник

AS

Andrei Shikov in Kotlin Community
Quantum Harmonizer
висит с 1.2, не критикал, на версии не стоит 😭
ну тут уже вопрос про то, как реализованы функции в котлине и дженерики в джаве ахах
мне кажется, что заинлайнить референсы к сеттеру и геттеру как то реальнее
источник

RI

Ruslan Ibragimov in Kotlin Community
Так тоже можно выставлять флаги в true/false в DSL, но вы пожалуйста так не делайте)
источник

RI

Ruslan Ibragimov in Kotlin Community
источник

QH

Quantum Harmonizer in Kotlin Community
уйблин, говорят, такое можно в Compose встретить
источник

RI

Ruslan Ibragimov in Kotlin Community
Quantum Harmonizer
уйблин, говорят, такое можно в Compose встретить
Печально конечно) Функция + маркер выглядит не хуже по компактности, но намного понятнее и ожидаемее
источник

d

double_b in Kotlin Community
Ребят, ситуация такая.
по вебсокету подряд приходит куча пакетов - до 99
каждый раз надо тащить с бд один объект - проверить значение его поля - при выполнении условия обновить это поле и обновить запись в бд. И надо учитывать, что выполнение условия при текущем пакете  зависит от обновленного значения при предыдущем пакете.
Что происходит на деле
1. приходит первый пакет - тащит с бд объект
2. обновляет значение поля - отправляет на апдейт в бд
3. в этот момент приходит след пакет и тащит с бд объект, который еще не успел обновиться после первого пакета - то есть значение там еще старое и получается несостыковка значений
предполагаю, что полученные пакеты нужно кещировать - дальше запускать метод, который по одному будет брать пакет из кеща - подождет пока обновится в бд и только потом из кеща брать след пакет.
Что-то внутри подсказывает, что мне тут надо использовать async await - channels - actor - в одном наборе.
В правильном направлении иду? и если знаете какой-то похожий  пример или статью в этом духе - подскажите пожалуйста
источник

RI

Ruslan Ibragimov in Kotlin Community
double_b
Ребят, ситуация такая.
по вебсокету подряд приходит куча пакетов - до 99
каждый раз надо тащить с бд один объект - проверить значение его поля - при выполнении условия обновить это поле и обновить запись в бд. И надо учитывать, что выполнение условия при текущем пакете  зависит от обновленного значения при предыдущем пакете.
Что происходит на деле
1. приходит первый пакет - тащит с бд объект
2. обновляет значение поля - отправляет на апдейт в бд
3. в этот момент приходит след пакет и тащит с бд объект, который еще не успел обновиться после первого пакета - то есть значение там еще старое и получается несостыковка значений
предполагаю, что полученные пакеты нужно кещировать - дальше запускать метод, который по одному будет брать пакет из кеща - подождет пока обновится в бд и только потом из кеща брать след пакет.
Что-то внутри подсказывает, что мне тут надо использовать async await - channels - actor - в одном наборе.
В правильном направлении иду? и если знаете какой-то похожий  пример или статью в этом духе - подскажите пожалуйста
Все сложно (c)

Стоит задача синхронизации, которая в общем случае не очень хорошо решается. Но решается неплохо в частном случае, например:

0. Несколько инстансов, база без локов - распределенный консенсус - отдельная система типо etcd/zookeeper которая будет отвечать за локи
1. Несколько инстансов приложения, один postgres - лок на запись aka select for update
2. Один инстанс - actor отлично подойдет, вот тут про опции можно прочитать https://kotlinlang.org/docs/reference/coroutines/shared-mutable-state-and-concurrency.html
источник

QH

Quantum Harmonizer in Kotlin Community
пока кто-то держит блокировку, новые пакеты можно батчить, чтобы потом бахнуть их все одним запросом
источник

d

double_b in Kotlin Community
Ruslan Ibragimov
Все сложно (c)

Стоит задача синхронизации, которая в общем случае не очень хорошо решается. Но решается неплохо в частном случае, например:

0. Несколько инстансов, база без локов - распределенный консенсус - отдельная система типо etcd/zookeeper которая будет отвечать за локи
1. Несколько инстансов приложения, один postgres - лок на запись aka select for update
2. Один инстанс - actor отлично подойдет, вот тут про опции можно прочитать https://kotlinlang.org/docs/reference/coroutines/shared-mutable-state-and-concurrency.html
😁 я один момент не указал, ссори. это все на андроиде - инстанс один, спасибо за наводку, пойду копаться
источник

QH

Quantum Harmonizer in Kotlin Community
double_b
😁 я один момент не указал, ссори. это все на андроиде - инстанс один, спасибо за наводку, пойду копаться
телеграм подобным образом накатывает обновления в базу
источник

d

double_b in Kotlin Community
Quantum Harmonizer
пока кто-то держит блокировку, новые пакеты можно батчить, чтобы потом бахнуть их все одним запросом
ты про такой подход?)) кстати у нас тоже месенджер
источник

QH

Quantum Harmonizer in Kotlin Community
double_b
ты про такой подход?)) кстати у нас тоже месенджер
неа, просто про сам факт. Апдейты льются из сети в базу
источник

QH

Quantum Harmonizer in Kotlin Community
и, да, грузи данные батчами в транзакции, иначе оверхед на постоянную фиксацию микротранзакций будет огромным
источник

d

double_b in Kotlin Community
Quantum Harmonizer
и, да, грузи данные батчами в транзакции, иначе оверхед на постоянную фиксацию микротранзакций будет огромным
если я правильно понял - то копить сначала - и потом разом лезть в бд? а не гонять в бд при каждом пакете?
источник

QH

Quantum Harmonizer in Kotlin Community
double_b
если я правильно понял - то копить сначала - и потом разом лезть в бд? а не гонять в бд при каждом пакете?
угу
источник

d

double_b in Kotlin Community
Спасибо за совет, в эту сторону пока не смотрел серьезно
источник

Y

Yuriy in Kotlin Community
double_b
Ребят, ситуация такая.
по вебсокету подряд приходит куча пакетов - до 99
каждый раз надо тащить с бд один объект - проверить значение его поля - при выполнении условия обновить это поле и обновить запись в бд. И надо учитывать, что выполнение условия при текущем пакете  зависит от обновленного значения при предыдущем пакете.
Что происходит на деле
1. приходит первый пакет - тащит с бд объект
2. обновляет значение поля - отправляет на апдейт в бд
3. в этот момент приходит след пакет и тащит с бд объект, который еще не успел обновиться после первого пакета - то есть значение там еще старое и получается несостыковка значений
предполагаю, что полученные пакеты нужно кещировать - дальше запускать метод, который по одному будет брать пакет из кеща - подождет пока обновится в бд и только потом из кеща брать след пакет.
Что-то внутри подсказывает, что мне тут надо использовать async await - channels - actor - в одном наборе.
В правильном направлении иду? и если знаете какой-то похожий  пример или статью в этом духе - подскажите пожалуйста
Имхо. Кэширование записи из бд в памяти и получить из вебсокета flow, чтобы обрабатывать в порядке очереди. Не подойдёт, если пакеты идут кучей постоянно, и в этом случае придется все равно часть отбрасывать.
источник

Y

Yuriy in Kotlin Community
double_b
ты про такой подход?)) кстати у нас тоже месенджер
И у меня) кучно пошло
источник