Простое многопользовательское решение для базы данных - PullRequest
7 голосов
/ 06 декабря 2009

Я написал настольное приложение для Windows, которое прекрасно работает с Sqlite. Это было однопользовательское приложение, и база данных находится прямо на компьютере, на котором оно запущено.

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

Я бы хотел иметь возможность поделиться файлом sqlite на сетевом диске, но это, очевидно, приведет к повреждению данных, если у кого-то нет идей.

Полагаю, мне может потребоваться установка сервера базы данных, но коммерческая лицензия MySQL не имеет смысла, PostgreSQL настолько отличается, что мне придется переписывать большую часть своего приложения. Я вообще не работал с Firebird, поэтому не уверен, что это хорошее решение или нет.

Существуют ли какие-либо серверы баз данных Sqlite, которые можно установить для обработки входящих транзакций в файле базы данных Sqlite?

Если мне требуется, чтобы клиент самостоятельно загружал и устанавливал MySQL, нужно ли иметь коммерческую лицензию?

Любые предложения или указания будут великолепны, спасибо.

Ответы [ 8 ]

8 голосов
/ 06 декабря 2009

Вы можете использовать файл Sqlite на общем сетевом диске, как вы описали, в зависимости от базовой файловой системы:

http://www.sqlite.org/faq.html#q5

Несколько процессов могут иметь одинаковые База данных открыта одновременно. Несколько процессов могут делать ВЫБЕРИТЕ одновременно. Но только один Процесс может вносить изменения в база данных в любой момент времени, однако.

SQLite использует блокировки чтения / записи для контролировать доступ к базе данных. (Под Win95 / 98 / ME, в котором отсутствует поддержка замки читатель / писатель, вероятностный вместо этого используется симуляция.) Но используйте Внимание: этот механизм блокировки может не работает правильно, если база данных файл хранится в файловой системе NFS. Это потому, что блокировка файла fcntl () сломан на многих реализациях NFS. Вы должны избегать установки SQLite файлы базы данных в NFS, если несколько процессы могут пытаться получить доступ к файлу в то же время. В Windows Документация Microsoft говорит, что блокировка может не работать при FAT файловые системы, если вы не используете Share.exe демон. Люди, у которых есть большой опыт работы с Windows, скажите мне что блокировка файлов сетевых файлов очень глючит и не заслуживает доверия. Если то, что они говорят, правда, разделяя База данных SQLite между двумя или более Windows-машины могут вызвать неожиданные проблемы.

5 голосов
/ 06 декабря 2009

Я думаю, что Firebird может быть очень хорошим выбором

  • Это бесплатно
  • встроенная версия существует
5 голосов
/ 06 декабря 2009

Как насчет SQL Server Express , он бесплатный и не должен переписывать большую часть кода,

3 голосов
/ 10 декабря 2009

Существуют серверы sqlite, которые позволяют использовать sqlite в многопользовательской среде. Читайте здесь: http://www.sqlite.org/cvstrac/wiki?p=SqliteNetwork. Я не знаю, как эти решения работают и масштабируются.

2 голосов
/ 06 декабря 2009

Я не знаю, почему вы предполагаете, что файл данных будет поврежден, если вы поместите его на сетевой диск и позволите нескольким экземплярам вашего приложения получать к нему доступ одновременно. Если вы в основном читаете, у вас должно быть все в порядке. Если вы делаете много записей, вы, вероятно, пострадаете от снижения производительности, поскольку одновременно может писать только один экземпляр. (См. http://www.sqlite.org/faq.html)

Если вы делаете много записей, вам, вероятно, понадобится установка отдельного сервера - рассматривали ли вы MS SQL Server Express? Должно быть легко и просто, чтобы начать работу.

0 голосов
/ 27 августа 2017

Если мне требуется, чтобы клиент самостоятельно загружал и устанавливал MySQL, нужно ли иметь коммерческую лицензию?

номер

Значение коммерческой лицензии MySQL заключается в том, что она позволяет распространять стандартный MySQL или модифицированный MySQL в двоичном виде без , а также распространять исходный код. Это также дает вам доступ к поддержке.

Однако, если пользователь сам получает MySQL от Oracle, GPL не возлагает на вас никаких обязательств по предоставлению им исходного кода MySQL. Они могут получить это от Oracle. Действительно, Oracle обязана предоставить это, если они распространяются по лицензии GPL.

0 голосов
/ 28 июня 2017

используйте этот код в строке подключения, после чего несколько пользователей могут вставлять, удалять, выбирать e.t.c. в вашей базе данных без проблем.

SQLiteConnection con = new SQLiteConnection ("Источник данных = D: \ yourdatabase.db; Подсчет изменений = выключен; Режим журнала = выключен; Пул = истина; Размер кэша = 10000; Размер страницы = 4096; Синхронный = выкл");

0 голосов
/ 15 ноября 2012

Слишком поздно, я знаю, но в наши дни ни у кого не должно быть необходимости писать приложение без инфраструктуры, которая предлагает абстракцию базы данных.

Лично я использую Web2py, основанный на Python Web Framework. По умолчанию он использует SQLite, который отлично подходит для однопользовательских приложений на локальном рабочем столе или для небольших и средних приложений в локальной сети, которые в основном представляют собой операции чтения. Однако, если бы я решил увеличить область использования приложения, я бы просто изменил строку подключения в модальной базе данных, чтобы использовать другую базу данных. Web2py или любой другой фреймворк, который стоит использовать, просто переписал бы операторы SQL, чтобы соответствовать новым требованиям.

...