powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite VS Gigabase
51 сообщений из 51, показаны все 3 страниц
SQLite VS Gigabase
    #35225318
Alexandr Fedirko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто что скажет про производительность сабжевых БД в роли ОЛТП сервера. В частности, планируется использовать её для хранения истории биллинга. Т.е. постоянно будет только поступать информация и проводится простейшее суммирование значений. В данный момент база находится на Oracle 10g. Посоветовали эти СУБД, как более шустрые на элементарных операциях к базе большого объёма (INSERT, UPDATE). Если есть варианты лучше - выслушаю с превеликим удовольствием.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35225370
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюнь в того кто тебе это посоветовал.
SQLite это встраиваемая база. Для микро задач. Вот недельную-месячную историю продаж на ней хранить запросто. Запихнуть ее в кассовый терминал для хранения чеков - идеально.
Заменять ею большую базу - идиотизм.
GigaBASE сам не щупал, но судя по описанию - так себе. Любительская поделка.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35230950
черный_монах
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем можно сконвертнуть данные из Access 2002 в Sqlite?
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35234554
Alexandr Fedirko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПлюнь в того кто тебе это посоветовал.
SQLite это встраиваемая база. Для микро задач. Вот недельную-месячную историю продаж на ней хранить запросто. Запихнуть ее в кассовый терминал для хранения чеков - идеально.
Заменять ею большую базу - идиотизм.
GigaBASE сам не щупал, но судя по описанию - так себе. Любительская поделка.
Спасибо за ответ, но судя по всему придется проводить стресс-тест этих СУБДшек. Если интересует, то потом отпишусь о результатах...
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35275418
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отпишите.

--
~PPA() {} //
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35487212
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
White OwlПлюнь в того кто тебе это посоветовал.
SQLite это встраиваемая база. Для микро задач. Вот недельную-месячную историю продаж на ней хранить запросто. Запихнуть ее в кассовый терминал для хранения чеков - идеально.
Заменять ею большую базу - идиотизм.

SQLite на средних базах данных (до 100 гиг) отлично себе работает. В биллинге необходимо разделить данные по месяцам и при построении отчетов attach-ть нужные базы. Ну, если у вас за месяц набегает более 100 гиг данных, придется еще что-то придумать.

P.S. Сказанное относится к ФС ext3 и грамотно настроенной базе. Про fat, ntfs и прочие поделия ничего сказать не могу.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35491832
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG White OwlПлюнь в того кто тебе это посоветовал.
SQLite это встраиваемая база. Для микро задач. Вот недельную-месячную историю продаж на ней хранить запросто. Запихнуть ее в кассовый терминал для хранения чеков - идеально.
Заменять ею большую базу - идиотизм.

SQLite на средних базах данных (до 100 гиг) отлично себе работает. В биллинге необходимо разделить данные по месяцам и при построении отчетов attach-ть нужные базы. Ну, если у вас за месяц набегает более 100 гиг данных, придется еще что-то придумать.

P.S. Сказанное относится к ФС ext3 и грамотно настроенной базе. Про fat, ntfs и прочие поделия ничего сказать не могу.

Угу угу. Только вот SQLite (по крайней мере та версия шо я гонял) создает по файлу на каждую транзакцию. Создает и удаляет, создает и удаляет Ну и для кучи, БД на любой DML блокирувается ексклюзивна :) Забавно будет посмотреть ЭТО в биллинге.

Про GigaBase врать не буду, но еенная сестренка FastDB тоже очень смешная :)
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35492192
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan)Только вот SQLite (по крайней мере та версия шо я гонял) создает по файлу на каждую транзакцию. Создает и удаляет, создает и удаляет Ну и для кучи, БД на любой DML блокирувается ексклюзивна :) Забавно будет посмотреть ЭТО в биллинге.

И чем вам этот файл так не нравится? Операционная система, веб-сервер и, к примеру, постгрес тоже много чего создают и удаляют, просто вы об этом не догадываетесь. В последнем вот только недавно проматывание счетчика транзакций на читающих транзакциях устранили. Кроме того, в эскулайте можно выбрать режим persist, в котором этот файл не удаляется. Не нужна вам целостность базы при аварийном отключении сервера - можете вообще отказаться от использования файла журнала, в скорости существенно выиграете.

Блокировка базы имеет свои преимущества - на SATA-дисках много эффективнее записывать на диск в одном процессе, так что эскулайт на таких дисках дает очень высокую производительность. Версионные СУБД на SATA при сотне-другой транзакций в секунду упираются в производительность дисков. Эскулайт, при полной блокировке базы, в единицу времени больше транзакций выполняет. И зачем вам DML в больших количествах в биллинге - может, просто термин нравится? :-)

Кстати, на многоядерных серверах эскулайт линейно масштабируется - если вам это о чем-то говорит. А для обработки блокировок мьютексы используются - вы не поверите, но это стандартный подход, и другие СУБД тоже не обходятся без обработки блокировок. Также и жесткий диск для чтения/записи должен позиционировать головки, да еще и дубли записанной информации создать, да еще проверить корректность записи... так что видимость одновременной записи множеством потоков создается контроллером диска и в софте это стоит учитывать.

Да, сразу добавлю - разрабатывать на эскулайте сложнее, следует учесть многое из того, что в других СУБД уже сделано в движке, но в результате эффективность системы при отсутствии администрирования окупают затраты на разработку.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35500661
Фотография BION
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGДа, сразу добавлю - разрабатывать на эскулайте сложнее, следует учесть многое из того, что в других СУБД уже сделано в движке , но в результате эффективность системы при отсутствии администрирования окупают затраты на разработку.

Если не трудно, в хотябы крадце, о каких нюансах идет речь? Ибо сам в ближайшее время собираюсь активно использовать sqlite.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35500736
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGИ чем вам этот файл так не нравится?


Да в общем-то всем нравится :) только при частой фиксации транзакций (что для биллинга характерно), постоянное создание/удаление файла просаживает производительность на столько, что SQLite в основном занимается только этим Производительность падает на порядки.
Можно конечно сделать транзакции подлинее, но тогда в полный рост втсает второй фактор ;)

MBG
Операционная система, веб-сервер и, к примеру, постгрес тоже много чего создают и удаляют,


Дык СУБД тем и отличается от файловой системы, что старается эти вещи оптимизировать. А фиксация транзакций - бутылочное горло для любой известной мне РСУБД :(
Например Oracle ничего не создает и не удаляет, а перезаписывает поверх старого REDO. И уж разумеется не занимается маразмом с созданием удалением файла на каждом commit-е
Кстати, а чего там Postgress постоянно создает/удаляет ? Удивите меня

MBG
просто вы об этом не догадываетесь.


ага ;)

MBG
В последнем вот только недавно проматывание счетчика транзакций на читающих транзакциях устранили.


В SQLite ? А Вы твердо уверены, что сие есть Бобро, а не уродливый костыль ???

MBG
Кроме того, в эскулайте можно выбрать режим persist, в котором этот файл не удаляется. Не нужна вам целостность базы при аварийном отключении сервера - можете вообще отказаться от использования файла журнала, в скорости существенно выиграете.


Ага, конечно. Зачем нам целостность та ?
Вот persist конечно несколько более умно, надо посмотреть на досуге

MBG
Блокировка базы имеет свои преимущества - на SATA-дисках много эффективнее записывать на диск в одном процессе, так что эскулайт на таких дисках дает очень высокую производительность.


И свои недостатки :) Два DML не могут выполняться одновременно
Т.е. все DML-и выстраиваются в очередь. Для производительности исключительно полезно

MBG
Версионные СУБД на SATA при сотне-другой транзакций в секунду упираются в производительность дисков. Эскулайт, при полной блокировке базы, в единицу времени больше транзакций выполняет.


Проводили тестирование ? С чем сравнивали ? Oracle, Postgress, IB, MS SQL 2005 ???
С небольшим приложением в виде результатов тестирования, заявление звучало бы менее голословно ;)
Кстати, дабы исключить влияние механизмов версионности, возможно разумнее сравнивать блокировочники с блокировочниками ???

MBG
И зачем вам DML в больших количествах в биллинге - может, просто термин нравится? :-)


Ага, нравится :) Только ими можно сказать и занимаюсь
Очень интересно, посмотреть на биллинг БЕЗ insert-ов и update-ов
Кстати, под биллингом я имею в виду Internet. Телефонный тоже можно, если он поддеживает prepaid

MBG
Кстати, на многоядерных серверах эскулайт линейно масштабируется - если вам это о чем-то говорит.


Как только чем нибудь подкрепите свои слова, сразу же скажет.
Не в первый раз уж слышу сказки про линейную масштабируемость, да только видеть ее никогда не доводилось :(
Кстати, количество процессоров далеко не самый главный фактор в производительности СУБД

MBG
А для обработки блокировок мьютексы используются - вы не поверите, но это стандартный подход, и другие СУБД тоже не обходятся без обработки блокировок. Также и жесткий диск для чтения/записи должен позиционировать головки, да еще и дубли записанной информации создать, да еще проверить корректность записи... так что видимость одновременной записи множеством потоков создается контроллером диска и в софте это стоит учитывать.


Да Вы шо o O
Может просто сравним цифры ???

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

Не скрою (с) к нулевому администрированию SQLite ближе чем Oracle
Если бы она еще и работатала ...

Собственно я не хочу сказать, что SQLite это плохо. У нее есть своя ниша (Web, CD-справочники), но биллинг ?
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35500916
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan)...

Насчет проматывания счетчика транзакций - это в постгресе, разумеется, в блокировочнике такого отродясь не бывает. Создание временных файлов постгрес любит, посмотрете его механизм работы с временными таблицами/видами/индексами... Просто вы не знаете о работе СУБД, и полагаете, что эскулайт делает лишние операции, а остальные "святым духом" работают. Для поддержания целостности данных все СУБД делают примерно одно и то же, разница собственно только между блокировочниками и версионниками. Ну и в СУБД типа оракла и постгреса базовый код довольно давно написан, что тоже плохо.

Удаление файла под линуксом операция не затратная, так что эскулайт может себе это позволить, как и постгрес (см. выше). Ну, для недоделанных ФС есть режим persist.

Сравнивал с постгресом - требования оракла к железу кажутся мне фантастически завышенными, ну а эмэсэскуэль мало того что проприетарный, так еще и не работает на линуксе или соляре, так что явно не вариант. Цифры для сравнения можете поискать в инете, мои результаты показывают ускорение до 60х при переходе с постгреса на эскулайт (понятно, архитектуру тоже менял, благо в эскулайте есть возможность подключать другие базы к текущей, да еще и данные хранятся раз так в 5 компактнее). Кстати, в постгресе были применены в т.ч. и нетривиальные методы оптимизации, см.
http://postgrestips.blogspot.com/2007/06/blog-post.html

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

Насчет DML - вы серьезно считаете, что в биллинге вам так и нужны тысячи и более записей в секунду? Данные пакетно сбрасываются с коллекторов, если посчитаете, то телефонный биллинг на 10 миллинов звонков в месяц создает не слишком большую нагрузку - в месяце около 2,5 миллиона секунд, так что это получится в среднем 4 звонка в секунду, нагрузка в пике зависит от характеристик вашей системы, но не более чем на два порядка превзойдет среднюю, т.е. до 400 звонков в секунду. Если данные аккумулировать на коллекторах и сбрасывать, например, раз в секунду, то это будет 1 пакетная в ставка в секунду (продолжительностью несколько миллисекунд). Чего пугаетесь?

Про масштабируемость - при запуске N экземпляров программы на N процессоров/ядер масштабируемость и в самом деле хороша, что вас тут удивляет? В своем движке создаете пул процессов эскулайт и получаете хорошую производительность на многоядернике, в отличие от клиент-серверов, где все зависит от их создателей и проблемы масштабируемости до сих пор не решены до конца.

Можно написать нечто аналогичное мускулю на эскулайт, но нельзя добиться от мускуля реализации возможностей эскулайт, так что эскулайт более эффективный движок. Интересно, вы яву считаете примитивным микроязыком, раз на ней можно делать мидлеты для сотовых телефонов?.. Пора бы осознать, что встраиваемые решения зачастую превосходят своих созданных в серверной отрасли коллег.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35500929
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
BION MBGДа, сразу добавлю - разрабатывать на эскулайте сложнее, следует учесть многое из того, что в других СУБД уже сделано в движке , но в результате эффективность системы при отсутствии администрирования окупают затраты на разработку.

Если не трудно, в хотябы крадце, о каких нюансах идет речь? Ибо сам в ближайшее время собираюсь активно использовать sqlite.

См. оффсайт и рассылку sqlite-users. Вкратце - работая с эскулайт, надо иметь более высокую грамотность, чем при работе с монстрами СУБД, которые зачастую представляют "вещь в себе".
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35503786
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я уже говорил выше, я не считаю SQLite "плохой" СУБД. Более того,
я считаю ее лучшей в классе встраиваемых СУБД, поддерживающих SQL и
поставляемых в открытых исходных кодах. Речь, таким образом идет о том,
что она могла бы быть (и вероятно будет) ГОРАЗДО лучше, если избавится
от некоторых детских болезней (разумеется все сказанное исключительно IMHO).
Ниже приводятся данные о производительности SQLite в зависимости от частоты
фиксации транзакций (исходные тексты теста прилагаются)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
+------------------+---------------------+
|    строк/транз     |         строк/сек       |
+------------------+---------------------+
|                        1  |                       14 , 03  |
|                       10  |                      135 , 98  |
|                      100  |                     1139 , 41  |
|                      500  |                     3873 , 72  |
+------------------+---------------------+

Столь существенное снижение производительности (почти в 300 раз), вызвано
ИСКЛЮЧИТЕЛЬНО неудачным (и легко исправляемым) архитектурным решением -
ведением отдельного (не особенно при том лаконичного) ФАЙЛА журнала
на каждую выполняемую транзакцию. Отговорки на тему дешевизны операций
создания/удаления файла в *nix-системах не выглядят убедительными, когда
речь идет о СУБД, одним из достоинств которой является кроссплатформенность.
Когда речь заходит об относительно легко устраняемом архитектурном дефекте,
советы поставить "правильную" операционную систему (а при невозможности этого,
отказаться от целостности данных) выглядят несколько странно.
Кроме того, сколь бы не дешева была операция, она никак не дешевле чем ее
НЕ выполнение. Зачем тратить время на то, чего делать не нужно ???
Ни одна из известных мне СУБД (включая упоминавшийся здесь Postgress) не
занимается созданием/удалением файлов в рамках выполнения фиксации/отката
транзакции. Думаю, что глупо спорить с тем, что ничем не оправданная идея
сделать бутылочное горло записи REDO еще более узким исключительно НЕУДАЧНА.

Ситуация с монопольным блокированием БД при выполнении DML, разумеется менее
однозначна. Более того, для Embedded БД такое решение более чем разумно.
Действительно, зачем тратить ресурсы на блокировки уровня строк, если БД
используется в однопользовательском режиме? Такие СУБД как TimesTen например,
поддерживают режимы монопольного блокирования БД не только при выполнении DML,
но и на время ЛЮБОЙ незавершенной транзакции (в том числе состоящей только из
операций чтения). Но это именно режимы, а не единственно возможное поведение.
И эти режимы практически непригодны для многопользовательской работы (клановые
мантры о необходимости гораздо большей квалификации при работе с SQLite чем
при работе с Oracle, прошу также оставить в стороне. ЛЮБАЯ работа требует
высокой квалификации и профессионализма).
Другой причиной неудобства этого режима (не очень существенной для Embedded,
но вполне весомой для OLTP) является теоретическая невозможность горизонтального
масштабирования (увеличением количества потоков) БД, работающей в таком режиме.
Для меня было приятным сюрпризом узнать, что TimesTen (к примеру), в рамках
разумного количества потоков (до 10) масштабируется вполне линейно (разумеется
не столь ощутимо как Oracle). Разумеется, TimesTen СОВЕРШЕННО не масштабируется
в режиме монопольного блокирования БД :)
Пикантность ситуации с SQLite добавляет то, что по всей видимости (помимо прочего)
необходимость монопольного блокирования БД, при выполнении DML напрямую связана
с пионерским (в смысле передовым конечно ;) ) решением ведения отдельного файла
на каждую транзакцию. Впрочем, это всего лишь моя теория.

Таким образом, я не веду речь о том, достаточна или нет производительность SQLite
для некоего сферического биллингового приложения (хотя и считаю, что с учетом
озвученных ранее цифр совершенно недостаточна для средненького Internet-биллинга
или биллинга сотовой телефонии). Биллинг биллингу рознь, и почему бы не использовать
SQLite в биллинге проводной телефонии, с оказанием исключительно postpaid-услуг?
Разумеется, зайди речь о выборе для такого применения SQLite vs Gigabase, мои
предпочтения (по ряду причин) оказались бы на стороне первой.
Но ее производительность могла бы быть еще лучше. И кому от этого было бы плохо?

P.S. Кстати, как связано устранение проматывания счетчика в Postgress с созданием/удалением файлов ?
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504062
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan)...

Странная у вас таблица. Эскулайт в секунду в 1-й транзакции выполняет около 50 000 операций insert в секунду, а у вас - несколько тысяч предел.

То, что вы говорите про архитектуру эскулайт, не соответствует действительности. Проверьте работу с прагмой PRAGMA journal_mode = PERSIST; и увидите, что операция создания и последующего удаления файла журнала мало отличается по производительности от работы с постоянным файлом журнала (по крайней мере, на ext3). Какой смысл критиковать поведение программы, которое зависит от ваших настроек?.. Хотите постоянный журнал - пользуйтесь, в чем вопрос-то.
Резкое снижение производительности в режиме autocommit вызвано отнюдь не операциями создания/удаления журнала, а операцией сброса дискового буфера на диск для гарантированнной фиксации изменений - при сбое питания или ПО все закоммиченные данные наверняка будут целы (если конечно не слетит ФС, или не "умрет" дисковая система). Запустите ваш тест с прагмой PRAGMA synchronous = OFF; и убедитесь, что без такой гарантии целостности операции записи выполняются примерно в 50 - 100 раз быстрее.
Далее, не нравится вам, что при записи блокируются операции чтения - используйте прагму PRAGMA read_uncommitted = 1; при которой можно одновременно и писать и читать.

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

Еще замечу, что ваш тестовый пример плох - более адекватным будет использование ANSI C кода и компилятора GCC. Всякие вижуальные среды используют множество настроек оптимизации и проч., что приводит к непредсказуемым последствиям. При использовании GCC все ваши опции будут заданы как аргументы в командной строке, а в вашем примере настройки частично находятся в файле проекта в неудобочитаемом виде, а частично - в менюшках вашей вижуал студии или что у вас там. В рассылке эскулайт пользователи периодически жалуются на проблемы с эскулайт, скомпиленным в вижуал студии, после чего им советуют для начала сбросить все флаги оптимизации.

P.S. В постгресе проматывание счетчика связано с операциями записи в буфера ОЗУ и на диск, что весьма неприятно и на нагруженной системе приводит к высокой нагрузке на дисковую подсистему, при этом создается больший объем и соответственно большее количество файлов журнала (при сотнях транзакций в секунду это ощутимо). Специально для этой операции файлы не создаются, насколько мне известно.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504233
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG
...
правильные системы, правильные компиляторы, сакральные знания + с потолка взятые 50000


Все как обычно
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504509
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan) MBG
...
правильные системы, правильные компиляторы, сакральные знания + с потолка взятые 50000


Все как обычно

Мне казалось это тривиальным, но могу и объяснить. Итак, 100 000 вставок в таблицу с триггером за 2 секунды (сами поделите первое число на второе? если что, см. мой предыдущий пост):

Код: plaintext
1.
2.
3.
4.
5.
$ time ./test_notify.tcl

real    0m2.164s
user    0m2.124s
sys     0m0.036s
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#!/usr/bin/tclsh

package require sqlite3

sqlite3 db :memory:
#sqlite3 db test_notify.db
db eval {
drop table if exists test;
create table test(a,b);
CREATE TRIGGER test_insert after insert on test begin
  SELECT RAISE(ROLLBACK,"Notify is not implemented")
    WHERE notify_insert('test') IS NULL;
end;
}
db transaction {
    for {set i  0 } {$i <  100000 } {incr i} {
        set j "item' number $i"
        db eval {insert into test values ($j,$i% 2 )}
    }
}
db close

Вот такой проц на тестовой машинке:
Код: plaintext
1.
2.
3.
4.
5.
$ cat /proc/cpuinfo |grep model
model           :  15 
model name      : Intel(R) Core(TM) 2  Duo CPU     T5470  @  1 .60GHz
model           :  15 
model name      : Intel(R) Core(TM) 2  Duo CPU     T5470  @  1 .60GHz

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

Насчет компилятора - результаты теста должны быть воспроизводимы. GCC позволяет воспроизвести тест на любой другой машине, вижуал среды - нет. Причины я объяснил в предыдущем посте.

Насчет файловой системы - знать особенности используемой ФС полезно, а иногда и необходимо. Я пользуюсь ext3 и учитываю ее особенности. Если вы не знаете, как работает ваша ФС, это ваши проблемы. Если вы не знаете размер кластера вашей ФС, то у вас почти любая СУБД будет работать неэффективно.

Постом ранее я вам привел набор полезных для повышения эффективности работы базы директив с пояснениями. Если вы хотите разобраться, то попробуете сами. Если нет - не отнимайте время у себя и других людей.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504597
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGВыбран тест, не зависящий от жесткого диска, впрочем, результаты в одной транзакции для базы на диске практически идентичны.


Ясен перец :) а теперь сделай транзакции поменьше, чтобы на OLTP было похоже, а не на заливку CDR-а ;)

MBG
Насчет компилятора - результаты теста должны быть воспроизводимы. GCC позволяет воспроизвести тест на любой другой машине, вижуал среды - нет. Причины я объяснил в предыдущем посте.

Насчет файловой системы - знать особенности используемой ФС полезно, а иногда и необходимо. Я пользуюсь ext3 и учитываю ее особенности. Если вы не знаете, как работает ваша ФС, это ваши проблемы. Если вы не знаете размер кластера вашей ФС, то у вас почти любая СУБД будет работать неэффективно.

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

Все это прекрасно и замечательно, но передо мной ставилась задача определить кто из Embedded/IMDB быстрее на Windows из под MSVC :)
Задача выбора правильной ОС не стояла.
Есть мысли, что улучшить в МОЕМ коде, чтобы работала пошустрее на Windows ?

P.S. Кстати BDB с TimesTen сделали SQLite как стоячую
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504605
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, ДРУГ, мне надоели твои намеки на мои знания/незнания особенностей работы FS, Postgress и т.п. Будь проще
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504645
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan)
Все это прекрасно и замечательно, но передо мной ставилась задача определить кто из Embedded/IMDB быстрее на Windows из под MSVC :)
Задача выбора правильной ОС не стояла.
Есть мысли, что улучшить в МОЕМ коде, чтобы работала пошустрее на Windows ?


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

Для клиентов на винде и винмобайл я особых настроек не использовал, разве что использовать постоянный файл журнала и размер страницы памяти выставить 4096 байт (по умолчанию стоит 1024 и это очень мало). У ntfs есть какие-то настройки производительности, покрутите, fat и vfat использовать не стоит. А сервер все же лучше под линуксом делать.

Ну, повторяющиеся запросы само собой лучше prepared делать.

Если не хотите менять или настраивать ОС и ФС, то остальное зависит больше от архитектуры приложения, тут уж вам должно быть виднее.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504842
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGЕсли не хотите менять или настраивать ОС и ФС, то остальное зависит больше от архитектуры приложения, тут уж вам должно быть виднее.

Ну то есть фактически: RAID и persist (+ prepared)
Как я и думал. На Windows не вариант
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504913
Grami
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)P.S. Кстати BDB с TimesTen сделали SQLite как стоячую

TimesTen делает как стоячих и Oracle и MSSQL :) Другое дело, что область применения у TimesTen существенно уже.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504983
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan) MBGЕсли не хотите менять или настраивать ОС и ФС, то остальное зависит больше от архитектуры приложения, тут уж вам должно быть виднее.

Ну то есть фактически: RAID и persist (+ prepared)
Как я и думал. На Windows не вариант

При чем тут RAID? Прагму размера страницы укажите при создании базы. Журнал сделать persist тоже можно на любой системе. А запросы надо делать prepared вообще-то к любой базе, это на уровне кода реализуется и от ОС не зависит.
Сам использую эскулайт на винмобайл, несколько десятков клиентских инсталляций уже года три как, всем доволен.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35504992
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Grami Gluk (Kazan)P.S. Кстати BDB с TimesTen сделали SQLite как стоячую

TimesTen делает как стоячих и Oracle и MSSQL :) Другое дело, что область применения у TimesTen существенно уже.

TimesTen это что-то вроде berkeleydb? Тогда уж tokyocabinet смотрите, там на ноуте выходит более миллиона вставок в секунду. Только это совершенно другой класс СУБД. А berkeleydb еще и администрирования требует, что для встраиваемого решения не есть хорошо.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505026
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG Grami Gluk (Kazan)P.S. Кстати BDB с TimesTen сделали SQLite как стоячую

TimesTen делает как стоячих и Oracle и MSSQL :) Другое дело, что область применения у TimesTen существенно уже.

TimesTen это что-то вроде berkeleydb? Тогда уж tokyocabinet смотрите, там на ноуте выходит более миллиона вставок в секунду. Только это совершенно другой класс СУБД. А berkeleydb еще и администрирования требует, что для встраиваемого решения не есть хорошо.

TimesTen - IMDB. Очень шустрая, но платная. Не Embedded, крутится отдельным сервисом. Очень продуманная, кроссплатформенная. BDB тож ничо, но естественно помедленнее.
И то и другое для телекома самое то.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505076
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan)
TimesTen - IMDB. Очень шустрая, но платная.

А, я такие даже не рассматриваю. Интересуют только с открытыми исходниками, чтоб допилить в любой момент можно было или хотя бы заглянуть и увидеть что как работает. Когда есть код я могу гарантировать клиентам решение их задач, а с закрытыми решениями все плохо - далеко не все разработчики готовы даже за деньги поправить/доделать что-то, и сам не сделаешь.

Для телекома скорее уж mnesia хороша, для того она и создана :-) Но и она кстати для дискового хранения использует берклидб, токиокабинет или эскулайт. Как вариант, использую in-memory hash для хранения очень часто изменяемых данных, а при старте/останове сервера читаю/пишу их в эскулайт базу. Впрочем, это имеет смысл, если одновременно работающих пользователей около полутысячи и более, иначе не стоит и заморачиваться.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505468
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGДля телекома скорее уж mnesia хороша, для того она и создана :-) Но и она кстати для дискового хранения использует берклидб, токиокабинет или эскулайт. Как вариант, использую in-memory hash для хранения очень часто изменяемых данных, а при старте/останове сервера читаю/пишу их в эскулайт базу. Впрочем, это имеет смысл, если одновременно работающих пользователей около полутысячи и более, иначе не стоит и заморачиваться.

Знаешь, моих заказчиков *nix-ы в ступор вгоняют (они вообще фанаты дотнету), а ты мне про эрланговые надстройки над BDB Интересно было бы конечно пощупать, но уж больно оторвано от моей реальной жизни. Использовать SQLite как дисковое хрнанилище для IMDB - вполне себе подход, даже возражать не буду.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505470
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GramiTimesTen делает как стоячих и Oracle и MSSQL

А какая из них Embedded или IMDB ? ;)
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505522
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan)
Знаешь, моих заказчиков *nix-ы в ступор вгоняют (они вообще фанаты дотнету), а ты мне про эрланговые надстройки над BDB

Имхо, сейчас все ИТ-подразделения умеют обращаться с юниксом/линуксом и солярисом. Хотя мне тут сложно оценивать - большинство людей из моего круга общения пользуются линуксом как на работе, так и дома, а статистика почему-то показывает преобладание виндоус :-) Эрланг кроссплатформенный, кстати.

Что касается СУБД без поддержки SQL, на практике выходит, что хранение в них сериализованных многомерных структур данных и распаковка/запаковка их на уровне приложения на существенно "просаживают" производительность, так что эффективнее пользоваться SQL и наборами функций по обработке blob-полей согласно специфике приложения. В какую базу дампать на диск in-memory структуры, так это и вовсе вопрос религии, например, эскулайт имеет отличный тиклевский биндинг (в отличии от берклидб, к примеру) и позволяет легко писать пользовательские функции на С. Собственно, эскулайт в дефолтной поставке это лишь минимальный движок, к которому следует дописать нужную функциональность.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505537
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGИмхо, сейчас все ИТ-подразделения умеют обращаться с юниксом/линуксом и солярисом. Хотя мне тут сложно оценивать - большинство людей из моего круга общения пользуются линуксом как на работе, так и дома, а статистика почему-то показывает преобладание виндоус :-) Эрланг кроссплатформенный, кстати.


Честно ? Спим и видим как перейти на разработку под никсы, но кто девушку кушает, тот ее и танцует :( Про эрланг знаю, было даже у начальства желание пощупать моими руками мнезию, но как то заглохло

MBG
Что касается СУБД без поддержки SQL, на практике выходит, что хранение в них сериализованных многомерных структур данных и распаковка/запаковка их на уровне приложения на существенно "просаживают" производительность, так что эффективнее пользоваться SQL и наборами функций по обработке blob-полей согласно специфике приложения.


Ну BDB прямо скажем не особенно просаживает, с учетом того, что OLTP запросы то как правило не особо сложные. Хранится структура и все дела. Кроме того ключ до 2G это сильно.

MBG
В какую базу дампать на диск in-memory структуры, так это и вовсе вопрос религии, например, эскулайт имеет отличный тиклевский биндинг (в отличии от берклидб, к примеру) и позволяет легко писать пользовательские функции на С. Собственно, эскулайт в дефолтной поставке это лишь минимальный движок, к которому следует дописать нужную функциональность.

Ч учетом того, что BDB не SQL-БД, биндинг звучит несколько загадочно
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505553
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG[quot Gluk (Kazan)]Кроме того, в эскулайте можно выбрать режим persist, в котором этот файл не удаляется. .

режим persist пока очень сырой (недавно появился).
я получил из-за него существенную просадку производительности на простых select-ах
с индексом по BLOB полю.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505593
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan)Про эрланг знаю, было даже у начальства желание пощупать моими руками мнезию, но как то заглохло


Не очень давно mnesia unlimited вышла, там ограничения на объем данных в узле поснимали, красота. В апстрим собирались включить, но не смотрел, включили или еще нет.

Gluk (Kazan)
Ну BDB прямо скажем не особенно просаживает, с учетом того, что OLTP запросы то как правило не особо сложные. Хранится структура и все дела. Кроме того ключ до 2G это сильно.


Это смотря где - в документообороте, к примеру, при прохождении документом очередной инстанции идет проверка всего документа на валидность плюс генерация информации для отчетов. Большой ключ на практике мало интересен - при извлечении десятка тысяч документов при построении отчета какой объем данных надо будет поднять с таким ключом? :-) В реальном времени, скажем прямо, немыслимо делать подобный анализ.

Gluk (Kazan)
Ч учетом того, что BDB не SQL-БД, биндинг звучит несколько загадочно

Биндинг можно к любой динамической библиотеке сделать :-) Свои функции дописать тоже никто не мешает, но уж больно много кода получается для berkeleydb для выборок (понятно, что эмулировать sql-запросы сишным кодом не самая лучшая затея).
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505611
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
PPA MBG[quot Gluk (Kazan)]Кроме того, в эскулайте можно выбрать режим persist, в котором этот файл не удаляется. .

режим persist пока очень сырой (недавно появился).
я получил из-за него существенную просадку производительности на простых select-ах
с индексом по BLOB полю.

В документации же ясно сказано, что этот режим следет использовать на платформах, где операция удаления файла намного более затратная, нежели забивание первого блока файла нулями. Если на вашей платформе это не так, то режим persist вам не подходит.

"The PERSIST journaling mode is useful as an optimization on platforms where deleting a file is much more expensive than overwriting the first block of a file with zeros."

P.S. "Если ничего больше не помогает, прочтите наконец документацию!" (с)
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505785
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGВ документации же ясно сказано, что этот режим следет использовать на платформах, где операция удаления файла намного более затратная, нежели забивание первого блока файла нулями. Если на вашей платформе это не так, то режим persist вам не подходит.


Гмм. а зачем забивать блок нулями ?
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505791
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGЭто смотря где - в документообороте, к примеру, при прохождении документом очередной инстанции идет проверка всего документа на валидность плюс генерация информации для отчетов.


Я еще недостаточно спятил, чтобы писать документооборот на BDB :)

MBG
Биндинг можно к любой динамической библиотеке сделать :-) Свои функции дописать тоже никто не мешает, но уж больно много кода получается для berkeleydb для выборок (понятно, что эмулировать sql-запросы сишным кодом не самая лучшая затея).

Я под биндингом понимаю параметризованные SQL-запросы
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505832
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan) MBGЭто смотря где - в документообороте, к примеру, при прохождении документом очередной инстанции идет проверка всего документа на валидность плюс генерация информации для отчетов.


Я еще недостаточно спятил, чтобы писать документооборот на BDB :)


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

Gluk (Kazan)
MBG
Биндинг можно к любой динамической библиотеке сделать :-) Свои функции дописать тоже никто не мешает, но уж больно много кода получается для berkeleydb для выборок (понятно, что эмулировать sql-запросы сишным кодом не самая лучшая затея).

Я под биндингом понимаю параметризованные SQL-запросы

Имеется в виду интерфейс определенного языка программирования к динамической библиотеке.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35505864
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGНа клиент-серверных СУБД пара тысяч одновременных пользователей уже требуют офигенного железа.


MTS-а они требуют на Oracle

MBG
Я под биндингом понимаю параметризованные SQL-запросы
Имеется в виду интерфейс определенного языка программирования к динамической библиотеке.

ну это вообще мелочи
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35506015
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan) MBGНа клиент-серверных СУБД пара тысяч одновременных пользователей уже требуют офигенного железа.


MTS-а они требуют на Oracle


Стоимость лицензий на оракл + стоимость железа + стоимость администрирования ... или нахрена попу наган, если поп не хулиган :-) К тому же оракл имхо неоптимально с железом работает (сотню пользователей мог бы и на целероне обслуживать), и расширяемость так себе - по отзывам, база на десяток терабайт требует очень дорогого железа (если постгрес, кажется, в яху, работает с петабайтными базами, то оракл должен уметь сильно поболее, за свою-то цену). Понятно, что оракл делает упор не на производительность, а на "фичастость" - встроенных возможностей вагон и маленькая тележка, плюс модули... Но все эти возможности в одном проекте не нужны, а требуемую часть из них можно найти/написать.

Полтысячи одновременных пользователей документооборота постгрес+эскулайт обслуживают на пентиум Д с парой гиг памяти, и то я полагаю это немного и можно поднять производительность до нескольких тысяч пользователей на указанном железе.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35506109
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGСтоимость лицензий на оракл + стоимость железа + стоимость администрирования ...


Для телекома как правило не критична

по поводу производительности: может быть как и SQLite требует более высокого профессионализма чем SQLite ?
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35506114
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGПолтысячи одновременных пользователей документооборота постгрес+эскулайт обслуживают на пентиум Д с парой гиг памяти, и то я полагаю это немного и можно поднять производительность до нескольких тысяч пользователей на указанном железе.

поставь 8 Oracle на Linux и получай удовольствие на том-же пеньке
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35506239
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Gluk (Kazan) MBGСтоимость лицензий на оракл + стоимость железа + стоимость администрирования ...


Для телекома как правило не критична

До поры до времени - при появлении необхпенькеодимости перенести на кластер из десятка средних серверов вместо одного мощного возникает ощущение присутствия в фильме ужасов :-)

Gluk (Kazan)
по поводу производительности: может быть как и SQLite требует более высокого профессионализма чем SQLite ?

Требует мало того что знания оракла, так еще и существенного времени на администрирование. В последние годы набирают популярность необслуживаемые системы, где или все задается на этапе разработки или система автоподстраивается. Боюсь, написать скрипт, который заменит профессионального админа оракл будет непросто... и стоить этот скрипт будет в разы больше самой системы :-)

На самом деле мы обсуждали только движок - эскулайт, на практике к нему добавляют мощный сервер приложений, и вот уже на этой платформе можно разрабатывать достаточно крупные системы. Любую СУБД с ораклом сравнивать сложно, т.к. это уже не столько база данных, сколько сервер приложений и основную ценность представляет именно как мощная платформа с интегрированной СУБД.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35506324
Фотография BION
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к MBG] : а как в sqlite дело обстоит с многопоточным доступом(не многопользовательским) в масштабах одного приложения, в частности insert? Какова вероятность возникновения ошибок?
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35506539
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
BIONВопрос к MBG] : а как в sqlite дело обстоит с многопоточным доступом(не многопользовательским) в масштабах одного приложения, в частности insert? Какова вероятность возникновения ошибок?

Многопоточный доступ работает как в пределах одного приложения, так и при доступе из разных приложений. Если необходимо выполнять модификацию данных из нескольких потоков, удобно указывать таймаут, в пределах которого запрос стоит в очереди и ожидает освобождения блокировки. Ошибки какого рода имеются в виду? Если речь о возникновении коллизий, то это решается созданием очереди запросов (все делает сама библиотека эскулайт, требуется только максимально допустимое время ожидания в очереди указать). Если в работе самой библиотеки, то вероятность повреждения данных очень мала, лично мне такого видеть не приходилось (использую эскулайт уже лет пять как на серверах и КПК). Хотя при многопоточной работе эскулайт с использованием shared cache пользовательское приложение при неправильной работе с потоками имеет возможность повредить базу (по умолчанию эта опция выключена, имхо выигрыш в производительности от ее использования стоит возможного риска только при критической нехватке ресурсов и тщательно вылизанном коде многопоточного приложения). В рассылке эскулайт время от времени появляются пользователи, в режиме shared cache повредившие базу в многопоточном приложении.

При многопользовательском доступе разумно создавать in-memory базу для выполнения длительных операций и к ней монтировать основную базу приложения (для аналитических приложений бывает необходимо создавать отдельную базу на диске для каждого пользователя - когда пользователей сотни и более и каждый может строить отчеты, обрабатывающие многие десятки или сотни мегабайт данных, притом пользоваться однажды созданными отчетами многократно).

Для контроля доступа используется callback-функция autorizer - позволяет для каждого соединения к базе разрешить/запретить определенные операции, например, для потока, выполняющего аудит изменений, разрешить только чтение данных.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35507268
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG
В документации же ясно сказано, что этот режим следет использовать на платформах, где операция удаления файла намного более затратная, нежели забивание первого блока файла нулями. Если на вашей платформе это не так, то режим persist вам не подходит.

"The PERSIST journaling mode is useful as an optimization on platforms where deleting a file is much more expensive than overwriting the first block of a file with zeros."

P.S. "Если ничего больше не помогает, прочтите наконец документацию!" (с)

Журнал используется при выполнении операции select? (у меня БД не модифицируется)
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35507283
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
PPA MBG
В документации же ясно сказано, что этот режим следет использовать на платформах, где операция удаления файла намного более затратная, нежели забивание первого блока файла нулями. Если на вашей платформе это не так, то режим persist вам не подходит.

"The PERSIST journaling mode is useful as an optimization on platforms where deleting a file is much more expensive than overwriting the first block of a file with zeros."

P.S. "Если ничего больше не помогает, прочтите наконец документацию!" (с)

Журнал используется при выполнении операции select? (у меня БД не модифицируется)

Не используется, но создаваться может - по команде "begin exclusive;" создается файл журнала и база блокируется монопольно. Интересно только, зачем вам понадобилось для операций чтения эксклюзивную блокировку ставить?..
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35507296
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG
Не используется, но создаваться может - по команде "begin exclusive;" создается файл журнала и база блокируется монопольно. Интересно только, зачем вам понадобилось для операций чтения эксклюзивную блокировку ставить?..

У меня явной блокировки нет.

Проблема вообще выглядит так
после указания прагмы PRAGMA journal_mode=PERSIST;

Скорость выполнения нескольких десятков тысяч запросов вида
select count(*) from fly_tth where tth=?;
уменьшается в 10-ки раз

убираешь прагму - все становится хорошо.

версия - свежачек 3.6.1 :)
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35507420
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
PPA MBG
Не используется, но создаваться может - по команде "begin exclusive;" создается файл журнала и база блокируется монопольно. Интересно только, зачем вам понадобилось для операций чтения эксклюзивную блокировку ставить?..

У меня явной блокировки нет.

Проблема вообще выглядит так
после указания прагмы PRAGMA journal_mode=PERSIST;

Скорость выполнения нескольких десятков тысяч запросов вида
select count(*) from fly_tth where tth=?;
уменьшается в 10-ки раз

убираешь прагму - все становится хорошо.

версия - свежачек 3.6.1 :)

Сколько транзакций используете? Ну и тест выкладывайте.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35507437
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG
Сколько транзакций используете? Ну и тест выкладывайте.

В данном месте вообще не используются транзакции
я не меняю данные - выполняется серия select-ов.

история проблемы тут:
http://forum.wafl.ru/index.php?showtopic=5179&pid=79228&st=0entry79228

diff исправления такой:
http://code.google.com/p/flylinkdc/source/detail?r=387#

т.е. удаление "PRAGMA journal_mode=PERSIST;" решило проблему

после PERSIST тормозят такие вызовы
CFlylinkDBManager::is_old_tth(const TTHValue& p_tth)
CFlylinkDBManager::is_download_tth(const TTHValue& p_tth)

их исходник выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
bool CFlylinkDBManager::is_download_tth(const TTHValue& p_tth)
{
 Lock l(m_cs);
 try {
	if(!m_is_download_tth.get())
		m_is_download_tth = auto_ptr<sqlite3_command>(new sqlite3_command(m_flySQLiteDB,
		"select count(*) from fly_tth where tth=?;"));
    sqlite3_command* l_sql = m_is_download_tth.get();
	l_sql->bind( 1 , p_tth.data,  24 );
	return l_sql->executeint() !=  0 ;
	}
	catch(const database_error& e)
	{
		LogManager::getInstance()->message("is_download_tth: " + e.getError());
		return false;
	}
}

bool CFlylinkDBManager::is_old_tth(const TTHValue& p_tth)
{
    Lock l(m_cs);
	return get_tth_id(p_tth,false) !=  0 ;
}
__int64 CFlylinkDBManager::get_tth_id(const TTHValue& p_tth, bool p_create /*= true*/)
{
	try
	{
	if(!m_get_tth_id.get())
		m_get_tth_id = auto_ptr<sqlite3_command>(new sqlite3_command(m_flySQLiteDB,
		"select max(id) from fly_hash where tth=?;"));
    sqlite3_command* l_sql = m_get_tth_id.get();
	l_sql->bind( 1 , p_tth.data, 24 );
	if (const __int64 l_ID = l_sql->executeint64())
    	return l_ID;
	else 
	if(p_create)
	{
	 sqlite3_transaction l_trans(m_flySQLiteDB);
	 if(!m_insert_fly_hash.get())
		m_insert_fly_hash = auto_ptr<sqlite3_command>(new sqlite3_command(m_flySQLiteDB,
        "insert into fly_hash (tth) values(?)"));
     sqlite3_command* l_sql = m_insert_fly_hash.get();
	 l_sql->bind( 1 , p_tth.data, 24 );
 	 l_sql->executenonquery();
     l_trans.commit();
	 return m_flySQLiteDB.insertid();
	}
	else
 	  return  0 ;
	}
	catch(const database_error& e)
	{
		LogManager::getInstance()->message("SQLite - get_tth_id: " + e.getError());
		return  0 ;
	}
}
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35507486
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
PPA MBG
Сколько транзакций используете? Ну и тест выкладывайте.

В данном месте вообще не используются транзакции
я не меняю данные - выполняется серия select-ов.

история проблемы тут:
http://forum.wafl.ru/index.php?showtopic=5179&pid=79228&st=0entry79228

diff исправления такой:
http://code.google.com/p/flylinkdc/source/detail?r=387#

т.е. удаление "PRAGMA journal_mode=PERSIST;" решило проблему

после PERSIST тормозят такие вызовы
CFlylinkDBManager::is_old_tth(const TTHValue& p_tth)
CFlylinkDBManager::is_download_tth(const TTHValue& p_tth)


Если транзакция не стартует, то указанная прагма ничего не меняет, это можете посмотреть в исходниках эскулайта.

Как пример, пара моих тестовых скриптов (версия SQLite 3.5.9):
Вот скрипт создания базы размером 25365K:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#!/usr/bin/tclsh

package require sqlite3

sqlite3 db test.db
#db eval {PRAGMA legacy_file_format = off}
db eval {DROP TABLE IF EXISTS events}
db eval {CREATE TABLE events (id INTEGER PRIMARY KEY,value INTEGER)}
db transaction {
    for {set i  0 } {$i< 1000000 } {incr i} {
        set value [expr {$i %  500000 }]
        db eval {insert into events (value) values ($value)}
    }
}
db eval {CREATE INDEX events_value_idx ON events(value)}
db close

А вот скрипт для чтения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#!/usr/bin/tclsh

package require sqlite3

sqlite3 db test.db
db eval {PRAGMA journal_mode=PERSIST}
for {set i  0 } {$i< 1000000 } {incr i} {
    set value [expr {$i %  500000 }]
    db onecolumn {select id from events where value=$value}
}
db close

Время выполнения последнего примерно 25 секунд и при удалении обсуждаемой прагмы не меняется.

Проблема в вашем враппере. Функция is_old_tth вызывает функцию get_tth_id, в которой создается транзакция и в ней выполняются операции insert. Посмотрите, во время выполнения запросов рядом с файлом вашей базы появляется файл журнала.
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35507502
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG
Время выполнения последнего примерно 25 секунд и при удалении обсуждаемой прагмы не меняется.

Проблема в вашем враппере. Функция is_old_tth вызывает функцию get_tth_id, в которой создается транзакция и в ней выполняются операции insert. Посмотрите, во время выполнения запросов рядом с файлом вашей базы появляется файл журнала.

возможно и враппер виноват...
но транзакция создается только при условии p_create = true
Код: plaintext
1.
2.
3.
4.
	if(p_create)
	{
	 sqlite3_transaction l_trans(m_flySQLiteDB);
         ...
а is_old_tth передает false
Код: plaintext
1.
  get_tth_id(p_tth,false)
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35507511
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG
db eval {DROP TABLE IF EXISTS events}
db eval {CREATE TABLE events (id INTEGER PRIMARY KEY,value INTEGER)}
[/src]
Время выполнения последнего примерно 25 секунд и при удалении обсуждаемой прагмы не меняется.


у меня есть еще отличия тип кей-поля char(24)
скрипт создания табличек такой:
m_flySQLiteDB.executenonquery("create table IF NOT EXISTS fly_tth(\n"
"tth char(24) PRIMARY KEY NOT NULL);");
m_flySQLiteDB.executenonquery("create table IF NOT EXISTS fly_hash(\n"
"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, tth char(24) NOT NULL UNIQUE);");

и еще все это под Win32 :)
...
Рейтинг: 0 / 0
SQLite VS Gigabase
    #35508011
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
PPA

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
/*
function may work with 64-bit integers

from, to, step, table name
create table testrange(rowid);
select intrange2table (1,10,1,'testrange');
select * from testrange;
1
2
3
4
5
6
7
8
9
10

select intrange2table (10000000000,100000000000,10000000000,'testrange');
select * from testrange;
1
2
3
4
5
6
7
8
9
10
10000000000
20000000000
30000000000
40000000000
50000000000
60000000000
70000000000
80000000000
90000000000
100000000000
*/
static void intrange2table4Func(
	sqlite3_context *context,
	int argc,
	sqlite3_value **argv
) {
	u_int64_t i;
	const unsigned char *zTable;
	sqlite3 *db;
	sqlite3_stmt *pStmt;        /* A statement */
	int rc;                     /* Result code */
	char *zSql;                 /* An SQL statement */

	if( sqlite3_value_type(argv[ 0 ]) == SQLITE_NULL || sqlite3_value_type(argv[ 1 ]) == SQLITE_NULL  || \
sqlite3_value_type(argv[ 2 ]) == SQLITE_NULL  || sqlite3_value_type(argv[ 3 ]) == SQLITE_NULL ){
		sqlite3_result_null(context);
		return;
	}
	zTable = sqlite3_value_text(argv[ 3 ]);
	db = (sqlite3*) sqlite3_context_db_handle(context);
	zSql = sqlite3_mprintf("INSERT INTO %Q (rowid) VALUES (?)", zTable);
   	rc = sqlite3_prepare(db, zSql, - 1 , &pStmt,  0 );
	sqlite3_free(zSql);
   	if( rc != SQLITE_OK ){
		sqlite3_result_error(context, sqlite3_errmsg(db), - 1 );
		return;
   	}
	for (i=sqlite3_value_int64(argv[ 0 ]);i<=sqlite3_value_int64(argv[ 1 ]);i=i+sqlite3_value_int64(argv[ 2 ])) {
		sqlite3_bind_int64(pStmt,  1 , i);
		sqlite3_step(pStmt);
		if( rc != SQLITE_OK ) {
			sqlite3_result_error(context, sqlite3_errmsg(db), - 1 );
			return;
		}
		rc = sqlite3_reset(pStmt);
	}
	sqlite3_finalize(pStmt);
	return;
}

Компилируется вот так:
Код: plaintext
gcc -fPIC -lm -shared tablefunc.c -o libsqlitetablefunc.so

Пишите набор встроенных функций под свою задачу и собираете расширение или напрямую вкомпиливаете их в эскулайт. Как видите, код простой получается. Например, полсотни функций, нужных для построения биллинга, пишутся примерно за неделю.

Под виндой есть компилятор mingw (порт gcc). Мегабайт 50 при установке занимает. Указанный выше код компилируется одной строчкой и легко переносится на любую платформу.
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite VS Gigabase
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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