Size: a a a

2020 November 23

LL

Lama Lover in pro.elixir
Евгений
А нужно это вот для чего. Я бы хотел расшарить некий большой объект между несколькими нодами. Но объект часто меняется и чтобы не передавать этот объект целиком, возникла мысль передавать только его изменения с указанием версии.
Я хочу чего-то странного? Или может есть уже готовые велосипеды для подобного?
А изменения коммутативные?
источник

Е

Евгений in pro.elixir
Lama Lover
А изменения коммутативные?
нет
источник

Е

Евгений in pro.elixir
Хотя... может их можно попытаться сделать коммутативными, но это нужно еще проверять, считать их некоммутативными как-то проще.
источник

LL

Lama Lover in pro.elixir
Ну, pubsub ещё умеет терять сообщения, например
Так что нужно понимать какая консистентность тут нужна

Если устраивает eventually consistent, то можно использовать готовые delta crdt библиотеки

Если нужна сильная консистентность, то нужно думать как конкретно её в твоём случае реализовать
источник

Е

Евгений in pro.elixir
Lama Lover
Ну, pubsub ещё умеет терять сообщения, например
Так что нужно понимать какая консистентность тут нужна

Если устраивает eventually consistent, то можно использовать готовые delta crdt библиотеки

Если нужна сильная консистентность, то нужно думать как конкретно её в твоём случае реализовать
Терять не страшно, потерю сообщения можно распознать и перечитать объект целиком, на крайний случай.
источник

Е

Евгений in pro.elixir
В принципе перестановку наверное тоже можно отследить, но насколько часто такая гадость вообще может происходить.
источник

Е

Евгений in pro.elixir
TCP/IP насколько я понимаю гарантирует порядок пакетов, нет?
источник

LL

Lama Lover in pro.elixir
Сначала всё-таки лучше определитья с консистентностью
источник

LL

Lama Lover in pro.elixir
Если устраивает eventually, то есть готовая delta crdt библиотека
источник

Е

Евгений in pro.elixir
Lama Lover
Если устраивает eventually, то есть готовая delta crdt библиотека
А что такое eventually consistency?
источник

LL

Lama Lover in pro.elixir
Реализовывать что-то своё будет достаточно долго, потому что есть много corner case, которые нужно учитывать
источник

Е

Евгений in pro.elixir
Скажем так, мне допустимо если у читателя есть не самая актуальная версия, главное чтобы это была какая-то из версий.
источник

LL

Lama Lover in pro.elixir
Евгений
А что такое eventually consistency?
Долго объяснять, погугли
источник

LL

Lama Lover in pro.elixir
Евгений
Скажем так, мне допустимо если у читателя есть не самая актуальная версия, главное чтобы это была какая-то из версий.
Тогда тебе подойдёт eventually, значит можно использовать delta crdt типы данных
источник

Е

Евгений in pro.elixir
Lama Lover
Долго объяснять, погугли
Ок, погуглю
источник

LL

Lama Lover in pro.elixir
Значит можно использовать вот эту либу например
https://hexdocs.pm/delta_crdt/api-reference.html

Нучжно учитывать что у неё last write wins стратегия
источник

Е

Евгений in pro.elixir
источник

Е

Евгений in pro.elixir
Lama Lover
Значит можно использовать вот эту либу например
https://hexdocs.pm/delta_crdt/api-reference.html

Нучжно учитывать что у неё last write wins стратегия
Спасибо, посмотрю
источник

LL

Lama Lover in pro.elixir
Если нужно какое-нибудь более-менее production решение, то можно использовать redis. Если чисто на elixir, то можно и mnesia
источник

Е

Евгений in pro.elixir
Lama Lover
Если нужно какое-нибудь более-менее production решение, то можно использовать redis. Если чисто на elixir, то можно и mnesia
Просто этот объект - бинарное дерево. Без серьезной просадки производительности его не засунешь ни в мнезию, ни в redis. Во всяком случае мне так показалось.
источник