А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.
Re: База данных в памяти с обновляемыми результатами запросов
Здравствуйте, Рома Мик, Вы писали:
РМ>А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.
От потерянного обновления это не защитит, так как есть временная задержка в распространении событий, соответственно один пользователь может переписать результаты работы другого из-за того, что он слишком поздно получил событие об изменении данных другим пользователем.
Программа – это мысли спрессованные в код
Re: База данных в памяти с обновляемыми результатами запросов
Здравствуйте, Рома Мик, Вы писали:
РМ>А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.
Здравствуйте, Тёмчик, Вы писали:
РМ>>А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п. Тё>https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableMap.html. Тё>Наверное, и без javafx аналог есть/можно собрать.
Ну это только одна таблица, а запрос из нескольких таблиц с условиями и т.д. уже так не сделать...
Re[2]: База данных в памяти с обновляемыми результатами запросов
Здравствуйте, wildwind, Вы писали:
РМ>>А делалось ли такое уже где-нибудь? W>Конечно. RethinkDB, например.
Интересная штука.
Меня правда больше интресует локально внутри приложения, а не в виде отдельного сервиса. И как следствие однопользовательское, однопоточное, что должно все значительно упрощать.
Re[3]: База данных в памяти с обновляемыми результатами запросов
Здравствуйте, Рома Мик, Вы писали:
РМ>Ну это только одна таблица, а запрос из нескольких таблиц с условиями и т.д. уже так не сделать...
Можно сделать составную структуру из мапов, листов, фильтров вложенных, маппингов (когда 1 значение зависит от 2 других и пересчитывается лениво) и т.д.
Re[3]: База данных в памяти с обновляемыми результатами запросов
Здравствуйте, wildwind, Вы писали:
РМ>>однопользовательское, однопоточное
W>Тогда я не понял, какой смысл в
поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись
Смысл примерно такой: все состояние приложения хранится в этой базе данных, вся логика работает только с ней. И например есть окно в котором отображается какой-то список, это окно создает запрос и слушает изменения. При этом как-только они происходят, окно обновляется. И больше того можно сделать элемент управления список, который принимает запрос в качестве параметра, и сам показывает всё, что нужно. Ну или например одна система создает какой-то объект, а другая сразу это замечает, т.к. подписана на такие объекты, и сразу обрабатывает его создание, и опять есть гарантия, что по завершения цикла обработки сообщений, всё в корректном виде. И вся эта логика в формализованном, легко читаемом виде.
Re[5]: База данных в памяти с обновляемыми результатами запросов
Здравствуйте, Рома Мик, Вы писали:
РМ>Смысл примерно такой: все состояние приложения хранится в этой базе данных, вся логика работает только с ней. И например есть окно в котором отображается какой-то список, это окно создает запрос и слушает изменения. При этом как-только они происходят, окно обновляется. И больше того можно сделать элемент управления список, который принимает запрос в качестве параметра, и сам показывает всё, что нужно. Ну или например одна система создает какой-то объект, а другая сразу это замечает, т.к. подписана на такие объекты, и сразу обрабатывает его создание, и опять есть гарантия, что по завершения цикла обработки сообщений, всё в корректном виде. И вся эта логика в формализованном, легко читаемом виде.
Не думал, что эти задачи нужно возлагать на базу данных, но приложение твое, тебе виднее.
Re[6]: База данных в памяти с обновляемыми результатами запросов
Здравствуйте, Рома Мик, Вы писали:
РМ>А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.
Таким образом удовлетворяются все требования за исключением, чтоб это было событие "обновление данных в курсоре запроса" — будет "обновление данных в таблице".