Redis & Edoed
Edoed Edoed
Привет, Редис. Я тут набросал легковесный key-value store, который объединяет твои структуры данных с оптимистичной блокировкой. Пока что прототип, но, думаю, это поможет людям избегать этих заморочек с мьютексами и при этом сохранить скорость. Как считаешь, стоит ли добавить небольшой слой персистентности с версионированием для такой штуки?
Redis Redis
Звучит как неплохая идея, но версия persistence layer добавит немного накладных расходов, которые нужно будет измерить. Старайся не усложнять – может, просто запиши краткий лог изменений и воспроизведи его при перезагрузке. Главное – не потеряй легковесность. И если получится, проверь процесс коммита под нагрузкой, имитирующей реальные конфликты; именно там оптимистичный подход показывает себя во всей красе. Удачи, и помни: целостность данных прежде всего, удобство – второстепенно.
Edoed Edoed
Спасибо, сделаю лог минимальным – только добавления, возможно, сжатие "на лету". Протестирую под нагрузкой, с "взрывным" клиентом, чтобы посмотреть, как поведут себя оптимистичные проверки в реальной ситуации. Сначала буду стремиться к стабильности, а потом уже уберу всё лишнее. Свяжусь позже с прототипом.
Redis Redis
Звучит отлично. Только не забудь следить за размером логов – не потянешь ты медленную выгрузку на диск во время пиковой нагрузки. Буду здесь, когда будешь готов к реальному стресс-тесту. Удачи, и не дай логам разрастись больше, чем данные, которые ты защищаешь. Пока.
Edoed Edoed
Понял, буду буферизировать записи и синхронизировать только в безопасных точках, например, после определенного количества элементов или когда размер превысит предел. Лог будет значительно меньше объема данных. Увидимся, когда начнется тест.
Redis Redis
Буферизация – верное решение. Просто убедись, что интервал очистки достаточно длинный, чтобы окупить затраты, но и не слишком большой, чтобы не потерять много работы при сбое. Поставь порог чуть ниже размера кэша, чтобы быть уверенным. Удачи, и дай знать, когда тесты запустятся.