База данных в памяти с обновляемыми результатами запросов
От: Рома Мик Россия http://romamik.com
Дата: 23.08.17 15:47
Оценка:
А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.
Re: База данных в памяти с обновляемыми результатами запросов
От: Qulac Россия  
Дата: 23.08.17 16:07
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.


От потерянного обновления это не защитит, так как есть временная задержка в распространении событий, соответственно один пользователь может переписать результаты работы другого из-за того, что он слишком поздно получил событие об изменении данных другим пользователем.
Программа – это мысли спрессованные в код
Re: База данных в памяти с обновляемыми результатами запросов
От: Тёмчик Австралия жж
Дата: 24.08.17 04:15
Оценка: 1 (1)
Здравствуйте, Рома Мик, Вы писали:

РМ>А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.


https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableMap.html.
Наверное, и без javafx аналог есть/можно собрать.
Re: База данных в памяти с обновляемыми результатами запросов
От: wildwind Россия  
Дата: 24.08.17 05:32
Оценка: 3 (1)
Здравствуйте, Рома Мик, Вы писали:

РМ>А делалось ли такое уже где-нибудь?


Конечно. RethinkDB, например.
Re[2]: База данных в памяти с обновляемыми результатами запросов
От: Рома Мик Россия http://romamik.com
Дата: 24.08.17 11:46
Оценка:
Здравствуйте, Тёмчик, Вы писали:

РМ>>А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.

Тё>https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableMap.html.
Тё>Наверное, и без javafx аналог есть/можно собрать.
Ну это только одна таблица, а запрос из нескольких таблиц с условиями и т.д. уже так не сделать...
Re[2]: База данных в памяти с обновляемыми результатами запросов
От: Рома Мик Россия http://romamik.com
Дата: 24.08.17 11:52
Оценка:
Здравствуйте, wildwind, Вы писали:

РМ>>А делалось ли такое уже где-нибудь?

W>Конечно. RethinkDB, например.
Интересная штука.

Меня правда больше интресует локально внутри приложения, а не в виде отдельного сервиса. И как следствие однопользовательское, однопоточное, что должно все значительно упрощать.
Re[3]: База данных в памяти с обновляемыми результатами запросов
От: Тёмчик Австралия жж
Дата: 24.08.17 15:17
Оценка: 1 (1)
Здравствуйте, Рома Мик, Вы писали:

РМ>Ну это только одна таблица, а запрос из нескольких таблиц с условиями и т.д. уже так не сделать...

Можно сделать составную структуру из мапов, листов, фильтров вложенных, маппингов (когда 1 значение зависит от 2 других и пересчитывается лениво) и т.д.
Re[3]: База данных в памяти с обновляемыми результатами запросов
От: wildwind Россия  
Дата: 24.08.17 17:17
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>однопользовательское, однопоточное


Тогда я не понял, какой смысл в

поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись

Re[4]: База данных в памяти с обновляемыми результатами запросов
От: Рома Мик Россия http://romamik.com
Дата: 25.08.17 08:30
Оценка:
Здравствуйте, wildwind, Вы писали:

РМ>>однопользовательское, однопоточное


W>Тогда я не понял, какой смысл в

поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись

Смысл примерно такой: все состояние приложения хранится в этой базе данных, вся логика работает только с ней. И например есть окно в котором отображается какой-то список, это окно создает запрос и слушает изменения. При этом как-только они происходят, окно обновляется. И больше того можно сделать элемент управления список, который принимает запрос в качестве параметра, и сам показывает всё, что нужно. Ну или например одна система создает какой-то объект, а другая сразу это замечает, т.к. подписана на такие объекты, и сразу обрабатывает его создание, и опять есть гарантия, что по завершения цикла обработки сообщений, всё в корректном виде. И вся эта логика в формализованном, легко читаемом виде.
Re[5]: База данных в памяти с обновляемыми результатами запросов
От: wildwind Россия  
Дата: 25.08.17 15:49
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Смысл примерно такой: все состояние приложения хранится в этой базе данных, вся логика работает только с ней. И например есть окно в котором отображается какой-то список, это окно создает запрос и слушает изменения. При этом как-только они происходят, окно обновляется. И больше того можно сделать элемент управления список, который принимает запрос в качестве параметра, и сам показывает всё, что нужно. Ну или например одна система создает какой-то объект, а другая сразу это замечает, т.к. подписана на такие объекты, и сразу обрабатывает его создание, и опять есть гарантия, что по завершения цикла обработки сообщений, всё в корректном виде. И вся эта логика в формализованном, легко читаемом виде.


Не думал, что эти задачи нужно возлагать на базу данных, но приложение твое, тебе виднее.
Re[6]: База данных в памяти с обновляемыми результатами запросов
От: Тёмчик Австралия жж
Дата: 25.08.17 22:59
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Не думал, что эти задачи нужно возлагать на базу данных, но приложение твое, тебе виднее.


Если формализовать до БД, то можно БД хранить на одном компе, логику на другом, а GUI на третьем и иметь несколько GUI (десктоп, веб, mobile).
Re: База данных в памяти с обновляемыми результатами запросов
От: Mna 404 and heavy formation
Дата: 26.08.17 04:12
Оценка: 6 (1) +1
Здравствуйте, Рома Мик, Вы писали:

РМ>А делалось ли такое уже где-нибудь? Что-то вроде базы данных, хранящейся в оперативной памяти. Но запросы к ней не выполняются и забываются, а регистрируются и поддерживают результат в актуальном состоянии по мере обновления базы данных. Отдают события добавилась/удалилась/изменилась запись в результате запроса. Никакой многопоточности, разных пользователей, транзакций, коллизий и т.п.


Можно взять SQLite, держать базу в памяти:

In-Memory Databases
https://sqlite.org/inmemorydb.html
rc = sqlite3_open(":memory:", &db);

И подписаться на изменения:

Data Change Notification Callbacks
https://sqlite.org/c3ref/update_hook.html

Таким образом удовлетворяются все требования за исключением, чтоб это было событие "обновление данных в курсоре запроса" — будет "обновление данных в таблице".

Сойдет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.