Какие проблемы могут возникнуть при работе программы с файлом БД из удаленной папки?
Есть идея создать следующее приложение.
Клиенты расположены на компьютерах пользователей в сети. Сеть локальная100 Мбит/с.
База данных расположена на сервере в расшаренной папке. Это простой файл SQLite (например).
Клиенты осуществляют чтение/запись в БД из сетевой папки, как будто работают с локальным файлом.
Предполагается, что:
БД будет относительно небольшой
Клиенты будут осуществлять запросы Insert (вставить что то), Select where id=1 (выборка с условием..."поиск по всей базе")
Клиенты могут работать с БД одновременно (в одно и тоже время вставлять данные, читать и т.д.)
Какие проблемы могут возникнуть при такой работе программы с файлом БД из удаленной папки ?
PS
Вариант с стандартным сервером БД, решающий все вопросы выше пока исключен.
Почитал немного об конкурентном доступе SQLite.
В интернете (и мануалах по SQLite) пишут что с select проблем нет.
Если большинство этих параллельных обращений являются чтениями (например, SELECT), SQLite может очень хорошо с ними справиться. Но если вы начнете писать одновременно, конфликт блокировок может стать проблемой.
У меня предполагается около 1000 записей в БД (10 столбцов в таблице, один из них VARCHAR(512), остальное мелочи..).
100 клиентов вызывающих select where id=... из БД 24 раз в день.
10 клиентов, которые будут писать в БД "записьVARCHAR(512)" чаще всего в разное время, но совпадения не исключены.
В общем, в теории вроде все должно работать, но на практике такое решение весьма сомнительно.
Есть и другие мысли по типу - каждый клиент пишет в свой файл бд, а потом загружает его на сервер.
А другой клиент копирует этот файл себе и работает с ним, как с локальным. Но это сложно.
Наверно, лучше не делать финтов ушами и сделать все просто и надежно - использовать полноценную СУБД.
Главная проблема - конкурентный доступ. SQLite емнип не предполагает расшаренного доступа к файлу БД.
Вторая проблема - устройство системы разграничения доступа - или у клиента будет доступ на запись в файл (тогда он может сделать все, включая удаление файла), или доступ только на чтение.
Третья проблема связана с главной - даже если получится конкурентный доступ, транзакций не будет уж точно, что имхо при многопользовательском режиме критично.
В общем я бы предложил не исключать вариант с сервером БД.
Вариант с стандартным сервером БД, решающий все вопросы выше пока исключен.
Вы не ищите легких путей. Перестаньте мыслить файлами с общим доступом в качестве хранилища. Эту роль как раз целиком и полностью берет полноценная СУБД в вашем кейсе.