Size: a a a

Software Design/Architecture/Zen

2020 November 27

SP

Sergey Protko in Software Design/Architecture/Zen
Lev Shagalov
Положим, у меня 20-40к сущностей, составляющих состояние электросети. Мы можем обновлять их как по одной так и сразу 20к.

Но база умеет атомарность только на уровне документа. А еще она умеет репликацию, но не по порядку записи документа, зараза.

Если я положу все 40 в один документ - тогда нет бонуса при репликации.
Если я положу их раздельно - то нет консистентности. (Может быть она мне и не нужна, это надо подумать)

Есть ли хитрый трюк чтобы устроить консистентность при записи в разные документы? Может писать в каждом какую то версию а потом писать в базу сущность-версию (но, из-за неупорядоченности репликации это сложно перенести на другой комп консистентно)
Eventual consistency
источник

LS

Lev Shagalov in Software Design/Architecture/Zen
Sergey Protko
Eventual consistency
Ну, как я написал - это надо подумать.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Ну ты сам взял технологию которая тебе не подходит
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Так что думай
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
Lev Shagalov
Положим, у меня 20-40к сущностей, составляющих состояние электросети. Мы можем обновлять их как по одной так и сразу 20к.

Но база умеет атомарность только на уровне документа. А еще она умеет репликацию, но не по порядку записи документа, зараза.

Если я положу все 40 в один документ - тогда нет бонуса при репликации.
Если я положу их раздельно - то нет консистентности. (Может быть она мне и не нужна, это надо подумать)

Есть ли хитрый трюк чтобы устроить консистентность при записи в разные документы? Может писать в каждом какую то версию а потом писать в базу сущность-версию (но, из-за неупорядоченности репликации это сложно перенести на другой комп консистентно)
Звучит как классическая "транзакция" в реляционных СУБД. Имеет смысл посмотреть, как они обеспечивают атомарность коммитов - версионность изменений и т.п.
источник

p

pragus in Software Design/Architecture/Zen
Sergey Alaev
Сам разбор ни разу не функциональный. Классическая машина состояний, обернутая в функциональный интерфейс. ФП-идиоматичность часто конфликтует с быстродействием и это нужно учитывать, жестко разделяя код, критичный по времени выполнения и код, критичный по сложности/стоимости поддержки.
Сишники просто кастят к большой структуре и проверяют значения полей. Видел варианты сразу с simd.
Но интересно посмотреть на решения такого на fp
источник

p

pragus in Software Design/Architecture/Zen
Sergey Alaev
Хороший пример ФП-парсера - это, внезапно, java.util.regex.Pattern. Входной DSL (строка) преобразуется в иммутабельное дерево (Pattern), которое интепретируется эффективным мутабельным парсером (Matcher)
спасибо, посмотрю
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
pragus
Сишники просто кастят к большой структуре и проверяют значения полей. Видел варианты сразу с simd.
Но интересно посмотреть на решения такого на fp
Есть решения полностью на ФП, но они неэффективны. Разве что для самообразования.
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Sergey Alaev
Ну вот отказ от ADT - это, имхо, перебор) Концепция а) простая б) полезная в) не эмулируемая традиционной джава-разработкой.
В Java adt это эксепшены))
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
Yury Golikov
В Java adt это эксепшены))
ADT - это алгебраические типы данных, при чем тут исключения?)
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Sergey Alaev
ADT - это алгебраические типы данных, при чем тут исключения?)
Ну просто в джаве часто исключения юзаются для управления потоком
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
Yury Golikov
Ну просто в джаве часто исключения юзаются для управления потоком
Даже в джаве это антипаттерн, еще с прошлого века. ADT - это совсем не об этом
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Sergey Alaev
Даже в джаве это антипаттерн, еще с прошлого века. ADT - это совсем не об этом
Что же тогда большинство известных либ им пользуются?) спринг тот же? Наверное потому что удобно, и экономия не так важна
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
Yury Golikov
Что же тогда большинство известных либ им пользуются?) спринг тот же? Наверное потому что удобно, и экономия не так важна
> наверное потому что это исключения не для управления потоком
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
Yury Golikov
Что же тогда большинство известных либ им пользуются?) спринг тот же? Наверное потому что удобно, и экономия не так важна
"управление потоком" и "отмена выполнения функции при обнаружении ошибки" - это разные вещи
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
к разговору о том как часто ты ловишь исключения спринга
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
я вот не помню чтобы когда-то это видел
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
в плане обработки исключений в коде
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Sergey Alaev
"управление потоком" и "отмена выполнения функции при обнаружении ошибки" - это разные вещи
Исключения просто инструмент
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Использовать можно по разному
источник