M>Хм, вполне норм. А что будет, интересно, если одновременно есть писатель и читатели?
писатели читателям не мешают (если WAL режим). может быть одновременно много читателей, они другу другу тоже не мешают.
чтоб упереться в эксклюзивную запись, это надо достаточно высокую нагрузку иметь.
у меня в продакшине используется, на 300 юзеров на одной базе, более 5лет, 30Гб база. проблем нет.
Здравствуйте, Marty, Вы писали:
M>Каких-то особых требований нет, и я бы наверное предпочёл SQLite, но он вроде не даёт одновременного доступа к одной БД из разных процессов. Хочется что-то такое же легко, не требующее отдельной установки, чтобы можно было с собой и базу и движок таскать, но позволяющее шарить БД между процессами
Под твоё описание идеально подходит Firebird Embedded. Полноценный SQL-сервер. В редакции Embedded устанавливается файловым копированием.
Здравствуйте, Marty, Вы писали:
DO>>Надо смотреть. Я лично опыта не имел. В принципе можно прикрутить какую-нибудь приблуду, типа диспетчер запросов, через которую лазать непосредственно в базу. Ну или поискать, может уже кто-то прикрутил M>Так этот диспечер надо наверно выносить в отдельный процесс? Опять геммор
Зачем? Весь такой диспечер делается на одном именованном мьютексе.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Dym On, Вы писали:
DO>Здравствуйте, varenikAA, Вы писали:
AA>>если java, то AA>>https://www.h2database.com/html/main.html DO>На OpenJDK заведется? Или ей только Oracle нужен?
Здравствуйте, IT, Вы писали:
IT>Ну дык мало ли чего вы там ещё накрутили. У нас такая простейшая синхронизация процессов работает уже много лет шо железная железяка. Каждый день без выходных.
В управляемой среде проблемы нет, т.к. приложение не может (почти никогда) аварийно завершиться. Приложение на C++ может, и иногда так и делает. В результате у тебя нет раскрутки стека, и просто никто не отдает мутекс системе после падения как минимум в POSIX. Лечится по старинке перезагрузкой компьютера!
Здравствуйте, Marty, Вы писали:
M>Каких-то особых требований нет,
Раз требований нет, бери любую
M>Хочется что-то такое же легко, не требующее отдельной установки, чтобы можно было с собой и базу и движок таскать, но позволяющее шарить БД между процессами
Ну и бери SQLite, вот тут пишут
Yes SQLite can support multiple users at once. It does however lock the whole database when writing, so if you have lots of concurrent writes it is not the database you want (usually the time the database is locked is a few milliseconds — so for most uses this does not matter). But it is very well tested and very stable (and widely used) so you can trust it.
Может еще чего-нибудь хочется? Ну там изолированных транзакций из коробки?
Здравствуйте, Marty, Вы писали:
M>Хм, вполне норм. А что будет, интересно, если одновременно есть писатель и читатели?
Надо смотреть. Я лично опыта не имел. В принципе можно прикрутить какую-нибудь приблуду, типа диспетчер запросов, через которую лазать непосредственно в базу. Ну или поискать, может уже кто-то прикрутил
Каких-то особых требований нет, и я бы наверное предпочёл SQLite, но он вроде не даёт одновременного доступа к одной БД из разных процессов. Хочется что-то такое же легко, не требующее отдельной установки, чтобы можно было с собой и базу и движок таскать, но позволяющее шарить БД между процессами
UPD Сорян, что-то забыл вот еще что. От самой СУБД сказал что хочу, а вот то, что я хочу из джавы и из плюсиков использовать — забыл. Из джавы — много-много писатель и редко-редко читатель, из плюсиков — наоборот
Здравствуйте, Marty, Вы писали:
M>Каких-то особых требований нет, и я бы наверное предпочёл SQLite, но он вроде не даёт одновременного доступа к одной БД из разных процессов. Хочется что-то такое же легко, не требующее отдельной установки, чтобы можно было с собой и базу и движок таскать, но позволяющее шарить БД между процессами
Здравствуйте, gyraboo, Вы писали:
M>>Каких-то особых требований нет, и я бы наверное предпочёл SQLite, но он вроде не даёт одновременного доступа к одной БД из разных процессов. Хочется что-то такое же легко, не требующее отдельной установки, чтобы можно было с собой и базу и движок таскать, но позволяющее шарить БД между процессами
G>А если коннекшн закрывать после запроса?
Да можно, но кто гарантирует, что несколько процессов не захотят одновременно что-то записать? Или SQLite содержит защиту от этого, как-то лочит файл базы? Мне почему-то казалось, что там и такого нет
Здравствуйте, Dym On, Вы писали:
M>>Каких-то особых требований нет, DO>Раз требований нет, бери любую
M>>Хочется что-то такое же легко, не требующее отдельной установки, чтобы можно было с собой и базу и движок таскать, но позволяющее шарить БД между процессами DO>Ну и бери SQLite, вот тут пишут DO>
DO>Yes SQLite can support multiple users at once. It does however lock the whole database when writing, so if you have lots of concurrent writes it is not the database you want (usually the time the database is locked is a few milliseconds — so for most uses this does not matter). But it is very well tested and very stable (and widely used) so you can trust it.
Хм, вполне норм. А что будет, интересно, если одновременно есть писатель и читатели?
DO>Может еще чего-нибудь хочется? Ну там изолированных транзакций из коробки?
Здравствуйте, Dym On, Вы писали:
M>>Хм, вполне норм. А что будет, интересно, если одновременно есть писатель и читатели? DO>Надо смотреть. Я лично опыта не имел. В принципе можно прикрутить какую-нибудь приблуду, типа диспетчер запросов, через которую лазать непосредственно в базу. Ну или поискать, может уже кто-то прикрутил
Так этот диспечер надо наверно выносить в отдельный процесс? Опять геммор
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, gyraboo, Вы писали:
M>>>Каких-то особых требований нет, и я бы наверное предпочёл SQLite, но он вроде не даёт одновременного доступа к одной БД из разных процессов. Хочется что-то такое же легко, не требующее отдельной установки, чтобы можно было с собой и базу и движок таскать, но позволяющее шарить БД между процессами
G>>А если коннекшн закрывать после запроса?
M>Да можно, но кто гарантирует, что несколько процессов не захотят одновременно что-то записать? Или SQLite содержит защиту от этого, как-то лочит файл базы? Мне почему-то казалось, что там и такого нет
Движок лочит файл бд на время коннешна, поэтому второй процесс не сможет подключиться и можно сделать чтобы он ожидал освобождения файла.
И ещё, на всякий случай, делай составные запросы в транзакциях, чтобы избежать неконсистентности.
Здравствуйте, gyraboo, Вы писали:
G>Движок лочит файл бд на время коннешна, поэтому второй процесс не сможет подключиться и можно сделать чтобы он ожидал освобождения файла. G>И ещё, на всякий случай, делай составные запросы в транзакциях, чтобы избежать неконсистентности.
Вроде бы блокировка на запись настраивается. Либо ключами, либо самому с директивами пересобрать. Либо делать отдельный процесс для бд.
Здравствуйте, Sharov, Вы писали:
G>>Движок лочит файл бд на время коннешна, поэтому второй процесс не сможет подключиться и можно сделать чтобы он ожидал освобождения файла. G>>И ещё, на всякий случай, делай составные запросы в транзакциях, чтобы избежать неконсистентности.
S>Вроде бы блокировка на запись настраивается. Либо ключами, либо самому с директивами пересобрать. Либо делать отдельный процесс для бд.
Ну да.
А ещё у неё есть шифрование (правда тоже нужна пересборка).
В итоге выходит, что найти альтернативу будет очень тяжело.
Я для всех своих шароварных проектов именно её использую.
Хотя один раз работал в проекте десктопного приложения, который Postgres использует, и это сделано прозрачно для юзера — т.е. никаких запусков серверов, всё скрыто от юзера. В этом плане постгрес конечно круче sqlite по многим параметрам.
Здравствуйте, white_znake, Вы писали:
vsb>>PostgreSQL
_>Странно, человек раздумывает об inproc бд, а ты ему навороченную бд в клиент серверной архитектуре предлагаешь.
Вообще-то я написал, что найти альтернативу sqlite трудно.
Про постгрес упомянул просто как ремарка на полях, т.к. работал в проекте, где постгрес был интегрирован с программой совершенно бесшовно и без всей тяжести клиент-серверной архитектуры — запуск серверов, проброс портов докера и прочих телодвижений. Причем у программы есть и десктопная версия, и мобильные сборки для андроида и ios. И какого-то клиент-серверного оверхеда я не наблюдал — всё работало очень шустро, запуск программы — буквально за пару секунд. Рекомендовать такой подход не стану, т.к. не знаю всех деталей реализации, возможно там есть какие-то ноу-хау.
Здравствуйте, gyraboo, Вы писали:
G>Здравствуйте, white_znake, Вы писали:
vsb>>>PostgreSQL
_>>Странно, человек раздумывает об inproc бд, а ты ему навороченную бд в клиент серверной архитектуре предлагаешь.
G>Вообще-то я написал, что найти альтернативу sqlite трудно.
G>Про постгрес упомянул просто как ремарка на полях, т.к. работал в проекте, где постгрес был интегрирован с программой совершенно бесшовно и без всей тяжести клиент-серверной архитектуры — запуск серверов, проброс портов докера и прочих телодвижений. Причем у программы есть и десктопная версия, и мобильные сборки для андроида и ios. И какого-то клиент-серверного оверхеда я не наблюдал — всё работало очень шустро, запуск программы — буквально за пару секунд. Рекомендовать такой подход не стану, т.к. не знаю всех деталей реализации, возможно там есть какие-то ноу-хау. Зато возможности для программы открывались широкие — при необходимости можно было подключаться к удаленному бд серверу совершенно так же, как к локальному (естественно, что в терминах программы фигурировал не БД-сервер, а "хранилище данных"). С sqlite так просто удаленный доступ не организовать.
Здравствуйте, kaa.python, Вы писали:
KP>Да, да, а потом придумывать что с ним таким прекрасным делать, если приложение упало без раскрутки стека. Был у нас такой один прекрасный диспечер
Ну дык мало ли чего вы там ещё накрутили. У нас такая простейшая синхронизация процессов работает уже много лет шо железная железяка. Каждый день без выходных.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
DO>>>Надо смотреть. Я лично опыта не имел. В принципе можно прикрутить какую-нибудь приблуду, типа диспетчер запросов, через которую лазать непосредственно в базу. Ну или поискать, может уже кто-то прикрутил M>>Так этот диспечер надо наверно выносить в отдельный процесс? Опять геммор
IT>Зачем? Весь такой диспечер делается на одном именованном мьютексе.
Здравствуйте, Sharov, Вы писали:
IT>>Зачем? Весь такой диспечер делается на одном именованном мьютексе. S>Здравая идея. А что будет, если процесс во время удержания помрет?
Одному из оставшихся будет дан зелёный свет.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Одному из оставшихся будет дан зелёный свет.
А мьютекс разве не будет сдержан навсегда упавших процессом? Хотя ОС это должна понять и освободить соотв. ресурс. Скорее всего проблем не будет и вариант нормальный.
Здравствуйте, Sharov, Вы писали:
S>А мьютекс разве не будет сдержан навсегда упавших процессом? Хотя ОС это должна понять и освободить соотв. ресурс. Скорее всего проблем не будет и вариант нормальный.
С этим проблем вроде не было. Бывает исключение типа AbandoneMutexException при создании, но это решается в примере выше.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Marty, Вы писали:
M>Что-то громковато лок на мьютексе ты назвал диспетчером запросов
Это не я. Я-то как раз сразу сказал, что диспетчеров никаких не надо.
M>ЗЫ Да, я обновил свои хотелки — забыл сразу указать, что мне нужна джаба и C++ (под винду, но тем не менее. блин, про подвинду тоже забыл указать )
Ну дык там логика должна быть понятна даже джабо/C++ неудачникам
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Marty, Вы писали:
M>ЗЫ Да, я обновил свои хотелки — забыл сразу указать, что мне нужна джаба и C++ (под винду, но тем не менее. блин, про подвинду тоже забыл указать )
Здравствуйте, IT, Вы писали:
M>>Что-то громковато лок на мьютексе ты назвал диспетчером запросов
IT>Это не я. Я-то как раз сразу сказал, что диспетчеров никаких не надо.
IT>Зачем? Весь такой диспечер делается на одном именованном мьютексе.
Мог бы и кавычки поставить тогда
M>>ЗЫ Да, я обновил свои хотелки — забыл сразу указать, что мне нужна джаба и C++ (под винду, но тем не менее. блин, про подвинду тоже забыл указать )
IT>Ну дык там логика должна быть понятна даже джабо/C++ неудачникам
Просто хз, как из джабы до виндовых мутексов доковыривать
Здравствуйте, Sharov, Вы писали:
M>>ЗЫ Да, я обновил свои хотелки — забыл сразу указать, что мне нужна джаба и C++ (под винду, но тем не менее. блин, про подвинду тоже забыл указать )
S>Так мьютекс это примитив ОС,язык тут не при чем.
В плюсиках просто системные (виндовые) либы подключаются, а как в джабе, я хз. Она же вся из себя кроссплатформенная, а АПИ для мьютексов в кажой ОС своё
Здравствуйте, Marty, Вы писали:
M>ЗЫ Да, я обновил свои хотелки — забыл сразу указать, что мне нужна джаба и C++ (под винду, но тем не менее. блин, про подвинду тоже забыл указать )
Кстати сишный пример есть прямо в MSDN: https://docs.microsoft.com/en-us/windows/win32/sync/using-mutex-objects
Здравствуйте, white_znake, Вы писали:
vsb>>PostgreSQL
_>Странно, человек раздумывает об inproc бд, а ты ему навороченную бд в клиент серверной архитектуре предлагаешь.
Вроде люди делают PostgreSQL embedded. То, что он навороченный, не значит, что он плохой. Ну и вообще моё дело вариант добавить, решать топикстартеру. Я бы тоже SQLite взял ) Или вообще какую-нибудь жабью БД вроде H2. Но советовать не буду, опыта с ней нет.
Здравствуйте, Dym On, Вы писали:
M>>ЗЫ Да, я обновил свои хотелки — забыл сразу указать, что мне нужна джаба и C++ (под винду, но тем не менее. блин, про подвинду тоже забыл указать ) DO>Кстати сишный пример есть прямо в MSDN: https://docs.microsoft.com/en-us/windows/win32/sync/using-mutex-objects
Ну, мьютексом я пользовался, да. Тока мьютекс — это не диспетчер доступа к БД, а в данном случае просто костыль
Здравствуйте, Marty, Вы писали:
M>Ну, мьютексом я пользовался, да. Тока мьютекс — это не диспетчер доступа к БД, а в данном случае просто костыль
Ну тут опять же вопрос требований, если достаточно костыля, почему бы и нет.
Здравствуйте, Dym On, Вы писали:
M>>Ну, мьютексом я пользовался, да. Тока мьютекс — это не диспетчер доступа к БД, а в данном случае просто костыль DO>Ну тут опять же вопрос требований, если достаточно костыля, почему бы и нет.
DO>PS Но постепенно уже формируется некоторое ТЗ
Ага, да
Нужен SQL, без изысков — норм
Доступ из джава и C++ — какие-то удобные либы и там и там нужны.
Win32
Что-то безсерверное, inproc.
Один пишет много, другие читают много. Читатели редко-редко что-то записывают, писатель периодически почитывает некоторые таблицы — ищет отзывы от читателей
Носить на дискеткефлешке рабочую копию
S>Под твоё описание идеально подходит Firebird Embedded.
Выделяю болдом фрагмент в его описании:
Хочется что-то такое же легко, не требующее отдельной установки, чтобы можно было с собой и базу и движок таскать, но позволяющее шарить БД между процессами
Теперь смотрим на описание предложенного тобой, тоже на всякий случай болдом выделю:
only single user access
В более глубоких интернетиках находится информация о возможности использовать костыль через конкурирующее дрюканье лок-файла, но не раскрывается тема стабильности — что будет, если текущий локер примет ислам. Кроме того, данный костыль доступен и в сабжевом SQLite.
Короч, так себе альтернатива, до "идеальной" ей как раком до луны.
S>Полноценный SQL-сервер.
"Больше 100кмч можно ехать на автобане в любом ряду кроме правого крайнего" (c) pik
"В германии земля в частной собственности" (c) pik
"Закрывать школы, при нулевой смертности среди детей и подростков, это верх глупости" (c) Abalak
Здравствуйте, kaa.python, Вы писали:
IT>>Ну дык мало ли чего вы там ещё накрутили. У нас такая простейшая синхронизация процессов работает уже много лет шо железная железяка. Каждый день без выходных.
KP>В управляемой среде проблемы нет, т.к. приложение не может (почти никогда) аварийно завершиться. Приложение на C++ может, и иногда так и делает. В результате у тебя нет раскрутки стека, и просто никто не отдает мутекс системе после падения как минимум в POSIX. Лечится по старинке перезагрузкой компьютера!
У Рихтера же вроде русским по белому было написано, что мьютек (нормальный системный виндовый объект) будет освобожден, если удерживающий его поток (процесс?) завершится (полагаю, в том числе и аварийно)...
Сам я ни разу не удосужился это проверить
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>У Рихтера же вроде русским по белому было написано, что мьютек (нормальный системный виндовый объект) будет освобожден, если удерживающий его поток (процесс?) завершится (полагаю, в том числе и аварийно)...
Я такую беду на macOS ловил, что там в Windows вообще не в курсе