Извиняюсь за, скажем так, не совсем профильный вопрос
Никто не поделитеся ссылками (в научном смысле этого слова) на работы по блокировкам колоночных/family column + timeseries СУБД?
Конкретные требования
- есть многомерное пространство (скрепя сердце. я согласен представить есть как композитный primary key в РСУБД)
- есть большое количество атрибутов для каждой точки (или строчки в случае РСУБД)
- нужны read-write блокировки на отдельные точки пространства
- данные лишь вставляются, никогда не удаляются
- блокировки часто берутся по целым range'ам
Конкретный сценарий - есть некоторый внешний сервис, у него есть измерения
- "некоторый уникальный id"
- квантованное время
- атрибуты
Для каждого id и атрибута, по сути, у там timeseries
Клиент работает следующим образом:
- клиент берет множество уникальных id, берет range времени, берет множество атрибутов
- клиент идет в базу, пытается взять read-lock'и для эти данных
- ТОЧКИ ДЛЯ КОТОРЫХ ДАННЫЕ ЕСТЬ - берет read-lock (либо, раз у нас нету апдейтов, просто вычитывает даные)
- ТОЧКИ ДЛЯ КОТОРЫХ ДАННЫЕ ОТСУТСТВУЮТ: берет уникальную блокировку на все множество точек (опционально - возвращает конкретные координаты, но это клиент может вычислить взяв исходный запрос и вычтя прочитанные данные)
- клиент вычисляет недостающие данные и записывает в СУБД (после этого блокировки снимаются)
- если клиент умер или превысил таймаут - блокировки автоматически снимаются
- если клиент пытается прочитать данные, которых нет, но на которые взяли эксклюзивные блокировки на запись, то клиент должен ждать, пока СУБД освободит блокировки (либо дав прочитать записанные другим клиентом данные, либо после отката дав взять эксклюзивные блокировки)
Тут, как мне видится, целая серия стандартных проблем
- "обедающие философы" - что делать при пересечении диапозонов данных у двух запросов (вполне решается порядком взятия блокировок, я могу его сделать детерминированным - мне облегчают задачу точно знание, какие точки я хочу взять)
- эффективные блокировки по range'ам (отлично решается gap locking/infimum-supermum locking как в InnoDB)
Меня вполне устроит собственное решение поверх PostgreSQL или Tarantool или неважно-что-вообще, проблема и вопросы именно про блокировки (имея блокировки под указанные требования задача становится для меня обычной инженерной)
Буду благодарен за ссылки на научные работы, книги, реализации, либо идеи, как эффективно представлять такие блокировки
https://www.facebook.com/groups/postgresql/?fref=ts