powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Подойдет ли мне SQLite ?
13 сообщений из 13, страница 1 из 1
Подойдет ли мне SQLite ?
    #39775664
dundin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня всем!
У меня есть задача: организовать взаимодействие некоторого числа (к примеру - 20) одновременно работающих программ с общими данными. Данных не много - в пределах 1МБ. Каждый из 20 экземпляров пишет в таблицу некоторые данные достаточно часто (к примеру - раз в секунду), и потом делает к этой таблице SQL-запрос.
Мне видится проблема в виде блокировок. Я поверхностно почитал про SQLite - когда идет запись - блокируется весь файл БД. Другие программы в этот момент не могут ни читать ни писать, ждут когда блокировка исчезнет. И мне видится что к примеру 20 программ, пишущих в базу некоторые данные с периодичностью раз в секунду будут мешать друг другу.
Повторюсь: данных не много, в основном - численные.
Получается - мне SQLite не подходит?

Если не подходит - посоветуйте альтернативы?
На самом деле, эти данные важны только первые 5 секунд. Потом они "прокисают") Я к тому что в идеале эта общая таблица должна висеть в оперативке, и все чтения и запись должны происходить в оперативке. Сохранность данных тут на последнем месте.
SQLite может конечно все держать в оперативке (in-memory), но такая in-memory БД будет для каждого экземпляра своя. А мне нужна общая для всех. Соответственно - это не вариант.
Далее: если таблица висит в оперативке - то у неё должен быть хозяин. Это уже сервер БД. Опять же - не хочется палить из пушки по воробьям - вместе с программой распространять еще и полновесный "условный MySQL".

Натолкните пожалуйста на правильные мысли.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39775744
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массив в памяти блокируемый мутексом (или несколькими) и все. СУБД для этой задачи нафиг не нужен.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39775755
dundin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlМассив в памяти блокируемый мутексом (или несколькими) и все. СУБД для этой задачи нафиг не нужен.

Какие слова гуглить?)
Программа написана на Delphi.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39775800
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLite в чистом виде тут не лучший вариант, т.к. обмен будет через дисковую подсистему, что лишние тормоза.

Если размер "БД" заранее известен (хотя бы максимум), то гугли "shared memory" и "именованный мьютекс"

Можно пойти другим путем: сделать отдельный процесс для сервера БД, внутри sqlite c in-memory. Все остальные обращаются к нему через какие-то каналы обмена (TCP, PIPE и т.п.), т.е. передают ему свежую инфу и периодически получают общее состояние. Если пойдешь этим путем можешь глянуть ZeroMQ
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39775842
dundin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T , White Owl Спасибо за ответы!
Я забыл добавить, что экземпляры программ могут перезагружаться.
Пока мысль льется в таком направлении:
1. Если копать в сторону Shared Memory. Насколько я понимаю - один из экземпляров должен создать этот кусок Shared Memory.
Соответственно, когда создатель этого куска перезагрузится - кусок Shared Memory тоже пропадет. Не будет же бесхозный кусок памяти висеть в памяти. С другой стороны - можно при каждом обращении каждым экземпляром проверять наличие и если его нет - создавать и грузить туда данные. Сработает интересно?

2. Вариант с неким "диспетчером" - отдельный экземпляр, который работает в режиме сервера. Всем хорош. Но диспетчер всегда должен работать. А что если он отрубился по каким то причинам? Конечно вариант без диспетчера - более красив и гибок, но более гемороен , ибо при вставки данных в эту общую таблицу требуется функциональность SQL, поддержка уникальности ключей.
Ну и с SQL - ем работать просто привычней.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39775854
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dundin1. Если копать в сторону Shared Memory. Насколько я понимаю - один из экземпляров должен создать этот кусок Shared Memory.
Соответственно, когда создатель этого куска перезагрузится - кусок Shared Memory тоже пропадет. Не будет же бесхозный кусок памяти висеть в памяти. С другой стороны - можно при каждом обращении каждым экземпляром проверять наличие и если его нет - создавать и грузить туда данные. Сработает интересно?
Не угадал, кусок существует до тех пор пока его используют, и неважно кто его создал. Гугли, а лучше Рихтера почитай .

dundin2. Вариант с неким "диспетчером" - отдельный экземпляр, который работает в режиме сервера. Всем хорош. Но диспетчер всегда должен работать. А что если он отрубился по каким то причинам? Конечно вариант без диспетчера - более красив и гибок, но более гемороен , ибо при вставки данных в эту общую таблицу требуется функциональность SQL, поддержка уникальности ключей.
Ну и с SQL - ем работать просто привычней.
Тут ты сам должен следить чтоб не отрубился. Не может прога диспетчеру отправить, проверяет что он умер, или если завис, то убивает и запускает нового диспетчера.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39776024
Известные мне сетевые БД (Firebird, PostgreSQL, MySQL) легко справятся с этой задачей, 1 Мб всегда будет в кэше
+ Легкая реализация стандартными компонентами
+ Масштабирование по сети
- Надо ставить программу сервера БД

Известные мне файловые БД (Clarion, FoxPro, DBase) тоже легко с этим справятся
+ Масштабирование по сети через общий диск
+ Ничего ставить не надо
- Морально устаревшая технология

При выборе этих вариантов нужно изучить, как в конкретной БД обстоят дела с удалением мусора, иначе файл может быстро расти.

Если все экземпляры программы всегда работают только на одном компьютере, то, имхо,
* может пересмотреть архитектуру, и вообще все сделать в одной программе
* может пересмотреть архитектуру, и вообще все сделать без БД, например общая память, или каждый экземпляр хранит свой набор данных и при обновлении оповещает всех с помощью ZeroMQ, или один процесс все хранит и всем раздает

Вариант с общей памятью самый быстрый, но, прямое использование Windows API, на мой взгляд, большой минус.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39776046
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

это мы такое тоже вычитали из книжки то?

авторпочитал про SQLite - когда идет запись - блокируется весь файл БД.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39776049
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizDima T,

это мы такое тоже вычитали из книжки то?

авторпочитал про SQLite - когда идет запись - блокируется весь файл БД.
Да, для записи блокировка всей БД. В книжке стр. 131 п. 6.3.4 "Пишущие Транзакции"
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39776064
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соискатель С++Вариант с общей памятью самый быстрый, но, прямое использование Windows API, на мой взгляд, большой минус.
Не вижу ничего криминального в использовании WinAPI.
Скорее всего в дельфи есть уже что-нибудь готовое по этой теме, компоненты какие-нибудь и т.п. Тема не такая уж экзотическая. Это в форуме по дельфи лучше уточнить.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39777476
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dundinи потом делает к этой таблице SQL-запрос.Сложный ли запрос? Директорией с файлами нельзя обойтись через FindFirst/FindNext с wildcard? Если запись невелика можно обойтись даже (путём+)именем файла в качестве строки данных с пустым телом. Длиной до 260 символов при обычном упрощённом доступе. В атрибутах есть ещё несколько полей, например, время создания и т.п.
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39777675
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Датчики?
...
Рейтинг: 0 / 0
Подойдет ли мне SQLite ?
    #39798260
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писать раз в секунду - это вообще ни о чём. SQLite сотни тысяч таких операций в секунду может сделать.
Если совсем много конкурентных записей надо то читать здесь: https://www.sqlite.org/wal.html
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Подойдет ли мне SQLite ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]