SQLite в многопользовательской среде

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

SQLite в многопользовательской среде

Сообщение Андрей Варкентин » 25.06.2012 06:12:26

Привет, форумчане!

Хочется/необходимо написать небольшую учетную систему, в которой один пользователь наполняет базу и два-три человека строят на базе этих данных отчеты. Не будут ли проблемы в работе при использование СУБД SQLite? Возможно ли организовать комфортную работу клиентам? Сеть - обычная локальная одноранговая. Почему SQlite - не спрашивайте, нравится! ;)
Андрей Варкентин
новенький
 
Сообщения: 21
Зарегистрирован: 17.09.2010 11:56:14

Re: SQLite в многопользовательской среде

Сообщение Ism » 25.06.2012 15:53:07

Проблемы будут, SQLite рассчитан на одного пользователя, хотя может кажется со многими. Замена - Firebird - то же самое , но работает и в embedded и в серверном режиме
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: SQLite в многопользовательской среде

Сообщение amateur » 25.06.2012 16:13:40

по идее нет, но при вашей схеме: работает 1 пользователь, а другие смотрят. А комфорт от Вас зависит :wink:

с несколькими пользователями sqlite работает...
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: SQLite в многопользовательской среде

Сообщение debi12345 » 26.06.2012 21:53:19

Проблемы будут, SQLite рассчитан на одного пользователя, хотя может кажется со многими

Если возможна однвоременная запись и файловая система не поддрживает автоблокирвку файлов БД при записи в них (как это умеет например Netware), то лучше написать над SQlite3 приемщик+диспетчер запросов. Если автоблокирвка файлов есть - то нкакх проблоем для многоих поьзователей, кроме равзе что лочки файла дл всех при слете записи от одного.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: SQLite в многопользовательской среде

Сообщение Ism » 26.06.2012 23:43:45

Все это садомазохизм, sqlite не создана для многопользовательской работы
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: SQLite в многопользовательской среде

Сообщение debi12345 » 27.06.2012 00:26:54

sqlite не создана для многопользовательской работы

Как и Clipper|FoxPro - но на этих СУБД написано множдество многопользователських (сотни пользователей !) программ, нужен лишь механизм блокировки файлов БД для предотвращения одновремнной записи.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: SQLite в многопользовательской среде

Сообщение Максим » 27.06.2012 00:32:59

Какой смысл извращаться при наличии вменяемых мощных инструментов?
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 598
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Re: SQLite в многопользовательской среде

Сообщение Kitayets » 27.06.2012 00:36:08

плюсую Максиму - нужно брать уже готовый вариант многопользовательской базы, тут много вариантов и не одного повода тащить на эту задачу sqlite.
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24

Re: SQLite в многопользовательской среде

Сообщение stikriz » 27.06.2012 09:08:31

FireBird
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: SQLite в многопользовательской среде

Сообщение Nik » 27.06.2012 09:09:24

В теории SQLite может работать с несколькими пользователями одновременно, но на практике я бы не рисковал, если данные дороги. Берите MySQL или что-то подобное.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: SQLite в многопользовательской среде

Сообщение debi12345 » 27.06.2012 09:59:19

Какой смысл извращаться при наличии вменяемых мощных инструментов?

Тяжеловесность этой мощи :)
Вы наверно не писали проги под SQlite3 - 1) не надо вообще ничего настраивать, возиться с установокой и созданием БД и пользователей 2) все "летает" - не то слово 3) практически невозможно убить БД (в реЖиме WAL- мне удалось только с 15-го (!) выключения света при вставке полмиллиона записей в одной транзакции - ставил эксперимент на живучесть, и то "убить" удалось только шифрованный вариант SQLITE, обычный не "убьешь"), 4) из-за мизерного размера БД может бэкапиться хоть каждый запуск, 5) таблицы можно "раскидать" по отдельным файлам (что резко повышает живучесть, да и скорость выборки) и объдинять в одну вирутальную БД на этапе коннекта (команда ATTACH)...

Кстати, в SQlite3 уже год как поддрживаются несколько одновременных транзакций на БД, хотя с обрастанием фишками сама DLL стала уже не совсем "лайт".
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: SQLite в многопользовательской среде

Сообщение stikriz » 27.06.2012 11:13:20

debi12345 писал(а):1) не надо вообще ничего настраивать, возиться с установокой и созданием БД и пользователей

Embeded FireBird - то же самое, но это уже не многопользовательский режим.
debi12345 писал(а):2) все "летает" - не то слово 3)

FireBird - смотря что там надо. Есть-ли триггеры? Сколько, какие вьюшки, сортировки по индексам? и т.д. и т.п
debi12345 писал(а):3) практически невозможно убить БД

Про Абрамс слышали ? :-) Бакап, бакап и только бакап - это единственно верное решение всех времен и народов, но это не говорит, что FireBird сам по себе ненадежен - там все нормально, пока винда не испортит файл базы, но это другая песня.
debi12345 писал(а):4) из-за мизерного размера БД может бэкапиться хоть каждый запуск,

FireBird очень компактно хранит данные. Если у Вас база маленькая, то тоже бакапьте при запуске.
debi12345 писал(а):5) таблицы можно "раскидать" по отдельным файлам (что резко повышает живучесть, да и скорость выборки)

Очень спорно. Живучесть точно понижает. Скорость тоже понижает, когда файлов становится много.

Явные преимущества FireBird, например (т.е. вменяемой СУБД): это сервис, а значит прямого доступа к файлу БД не надо - все работают по сети, мноооого пользовательская работа, процедуры, вьюшки, транзакции+версионность. А так же, навыки работы с стандартным SQL сервером, которые пригодятся обязательно.
Отличная дока: http://www.ibase.ru/develop.htm

Есть еще Постгресс, но это немного сложнее.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: SQLite в многопользовательской среде

Сообщение debi12345 » 27.06.2012 11:43:44

FireBird - смотря что там надо. Есть-ли триггеры? Сколько, какие вьюшки, сортировки по индексам? и т.д. и т.п

Все это есть в SQLITE3. Есть даже язык для написания БД-функций и процедур (если не хочется заморачиваться с написанием оных на "С").

Живучесть точно понижает.

Нет, если хранить рид-онли справочную инфу в одном файле, а активно записываемую - раскидать по разным файлам в завимости от задачи. В самом худшем сценарии крэша "убивается" инфа только одной задачи.

Скорость тоже понижает, когда файлов становится много.

Скорость выборки из БД зависит не от количества файлов(если их конечно не тысячи - что нереально для расматирваемой задачи), а от их размера - начиная с какого-то порогового размера БД-файл перестает помещаться в кэш файловой системы и, чтобы прочитать весь файл - головкам диска, с их латентностью 20+ ms приходится побегать по поверхности, собирая весь этот файл (для борьбы именно с этим эффектом и презназначены БД-индексы - они до минимума сужают область бегания головок ).

ПС:
Не спорю, что "птичка" - супервещь, но SQLITE3 вообще поражает воображение :) Такой малыш даже BLOB-ы умеет хранить, никаких проблем с юникодом, с датами, с NUMERIC (арифметика без потери точности),.. !

Добавлено спустя 7 минут 14 секунд:
Да, забыл особо подчеркнуть наличие версии с шифрованными файлами БД (оная используется например в IPhone & Co... - здесь я так понял, SQLIT3 нашла свою очень жирную нишу). Аналогов подобного (шифрования именно файлов, а не отдельных полей) нет ни в какой другой БД.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: SQLite в многопользовательской среде

Сообщение stikriz » 27.06.2012 12:05:44

debi12345 писал(а):Нет, если хранить рид-онли справочную инфу в одном файле, а активно записываемую - раскидать по разным файлам в завимости от задачи.

Ну, и остались мы со справочной информацией... Что толку? База все равно сдохла, для дальнейшей работы негодится. Все наши данные попорчены.
debi12345 писал(а):а от их размера - начиная с какого-то порогового размера БД-файл перестает помещаться в кэш файловой системы и, чтобы прочитать весь файл - головкам диска, с их латентностью 20+ ms приходится побегать по поверхности, собирая весь этот файл (для борьбы именно с этим эффектом и презназначены БД-индексы - они до минимума сужают область бегания головок ).

Кэш файловой системы ~ 64 Кб. Что толку говорить о неком кэше файловой системы? Пратически никогда база там не помещается. В СУБД используется совсем другое кэширование. Кэширование объектов базы, а не некого файла. И если база небольшая, то все там помещается. Тем более про индексы говорить не надо - в FireBird все в порядке с индексами.
debi12345 писал(а):Такой малыш даже BLOB-ы умеет хранить, никаких проблем с юникодом, с датами, с NUMERIC (арифметика без потери точности),.. !

Поверьте, что вот такие восторги по поводу обычных обыденных решений наводит на мысль, что с "птичкой" Вы просто незнакомы. Одновременно, что SQLLit_у больше похвастаться нечем? :-) Когда-то давно разработчики Постгресс восторженно сообщили, что работа с базой в каком-то там режиме ускорилась в 200 раз... На что в конфе InterBase задумались, мол, а много-ли там еще таких хреновых алгоритмов осталось, ну, которые можно ускорить в 200 раз? :-)

Я же не спорю, тем более, не хочу говорить, что SQLLite использовать не надо. Просто, я думаю, что всегда лучше использовать полноценную СУБД. А из полноценных СУБД FireBird самый маленький+бесплатный+легко администрируемый и устанавливаемый. К тому же, он позволяет расти проекту, т.к. имеет довольно большой запас по масштабируемости, размеру базы и к-ва пользователей. К тому же, он развивается очень активно. Много хорошей доки, есть сообщество и т.д. и т.п.

Добавлено спустя 18 минут 20 секунд:
debi12345 писал(а):Аналогов подобного (шифрования именно файлов, а не отдельных полей) нет ни в какой другой БД.

В InterBase есть.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: SQLite в многопользовательской среде

Сообщение debi12345 » 27.06.2012 14:11:46

Ну, и остались мы со справочной информацией... Что толку? База все равно сдохла, для дальнейшей работы негодится. Все наши данные попорчены.

В этом случае делается автоматический бэкап файлов оперативных таблиц при старте программы. Пару раз (на старых - менее надежных версиях SQLITE3) выручило после "дергания" электричества и ошибок операторов (вбили не те данные).

Кэш файловой системы ~ 64 Кб

Это скорее единица дробления кэша. Насчет целого кэша "FREE" в Линуксе дает совсем другие цифры. Десятки и даже сотни мегабайт.

К тому же, он позволяет расти проекту, т.к. имеет довольно большой запас по масштабируемости, размеру базы и к-ва пользователей.

100%. Позволяет безболезненно проапгрэйдиться до сетевой версии - в этом случае однозначно предпочтение "птичке". С другой стороны, если нужны фишки из разряда ORACLE (процедурные языки, блокировки на уровне отдельных записей,..) - можно стразу ставить PostgreSQL в режиме локального сервера с репликацией "наверх" (так сделано у нас в "конторе" - но мучаемся с падениями баз из-за плохого электричества - порядка 10..15 "вытаскиваний" данных в месяц при примерно 200 рабочих не-UPSованных мест). С SQLITE3 имели проблему с целостностью файлов БД всего однажды за примерно 4года на 4 рабочих местах.

Добавлено спустя 7 минут 10 секунд:
Постгресс восторженно сообщили, что работа с базой в каком-то там режиме ускорилась в 200 раз... На что в конфе InterBase задумались, мол, а много-ли там еще таких хреновых алгоритмов осталось,

Знаю этот режим - оператор "NOT IN" (он по сути есть множество "OR", которые традиционно плохо оптимизируются). Решалось сложным по синтаксису (и отжирающим память) трюком с применением LEFT OUTER JOIN и отфильтровкой несовпавших - возможно включили это решение в мэйнстрим. Еще..добавили автоматичкий HASH_JOIN (можно сказать автоиндекс) на строковых WHERE - тоже огромное ускорение... Это не плохие "алгортимы" - это чрезвычайная мозго- и трудоемкость оптимизации, всему свое время..
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

След.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru