Эта тема на forum.dklab.ru


Г.О.: sqlite — какие минусы, кроме плюсов?
Добрый день!

Решил вплотную заняться SQLite. Почитал по ней документацию и статьи в инете. И если им верить, то вещь вообще фантастическая. И поддержка SQL тут тебе лучше чем в MySQL, и настройки простые, и пользовательские функции на PHP, и транзакции, и работает это все в разы быстрее чем другие. Т.е. все о чем может мечтать средний php-проект.

Если все это послушать, то получается у MySQL вообще теперь шансов никаких в большинстве веб-приложений.
Только не верится что-то в такую неземную благодать.

Если кто-то SQLite использует, поделитесь, пожалуйста, впечатлениями. Стоит ли бросать мускул ради этого?
Дмитрий Котеров:
Про то, что sqLite быстрее MySQL - это сказки. Возможно, на каких-то запросах она показывает лучшую производительность, но когда речь заходит о серьезных выборках, тут уже будет отставание. Насколько я понимаю, главная проблема в том, что MySQL может кэшировать данные между запросами, т.к. она запущена постоянно, а sqLite - нет.

К тому же sqLite есть только в PHP5.

Но, вообще-то, для небольших проектов sqLite должна быть чертовски удобной штукой...
Г.О.:
Дмитрий Котеров, спасибо за информацию.

Я тут решил сам немного потестить:

$db = sqlite_open( 'db.db' );
sqlite_query( $db, 'create table test (one)' );
for ( $i = 0; $i < 10000; $i++ )
sqlite_query( $db, 'insert into test (one) values("qwertyuiopasdfghjkl")' );


Данный сценарий обрывается через 30 секунд по таймауту, а в базу заносится около 350 записей. Это у меня что-то не так или она везде так тормозит?
gong:
Дмитрий Котеров, спасибо за информацию.

Я тут решил сам немного потестить:

$db = sqlite_open( 'db.db' );
sqlite_query( $db, 'create table test (one)' );
for ( $i = 0; $i < 10000; $i++ )
sqlite_query( $db, 'insert into test (one) values("qwertyuiopasdfghjkl")' );


Данный сценарий обрывается через 30 секунд по таймауту, а в базу заносится около 350 записей. Это у меня что-то не так или она везде так тормозит?

Тормозит? Отнюдь. Надо просто поинтересовать природой вопроса.

http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

Совет 3.1: используйте BEGIN TRANSACTION и END TRANSACTION.

Так как у меня нет PHP5, а только PHP4 (на 64-битной платформе пятёрка косячит с моими базами), то я скачал бинарник SQLITE под Линукс (200 килобайт), развернул и отлинковал:


$ wget http://www.sqlite.org/sqlite3-3.3.5.bin.gz

$ gunzip sqlite3-3.3.5.bin.gz

$ ln -s sqlite3-3.3.5.bin sqlite



Теперь возьмём Ваш код, уберём лишек, добавим лог, который потом будем стравливать sqlite через пайп:


<?php

// $db = sqlite_open( 'db.db' );
// sqlite_query( $db, 'create table test (one)' );

echo "create table test (one);\n";

echo "BEGIN;\n";
for ( $i = 0; $i < 1000000; $i++ )
echo "insert into test (one) values(\"qwertyuiopasdfghjkl\");\n";
echo "END;\n";

?>


Миллион записей, 54000037 байт.


$ time php go.php >a.sql

real 0m9.294s
user 0m1.893s
sys 0m7.166s

$ time php go.php >a.sql

real 0m5.814s
user 0m1.290s
sys 0m4.516s

$ sync

$ time php go.php >a.sql

real 0m5.793s
user 0m1.283s
sys 0m4.486s



Вообщем, генерация нашего лога - от 6 до 9 секунд. cat a.sql /dev/null - практически мгновенно, оно у нас в кэше (real 0m0.021s).



$ time cat a.sql | sqlite db.db

real 0m27.213s
user 0m25.356s
sys 0m1.146s

$ rm db.db

$ time cat a.sql | sqlite db.db

real 0m29.519s
user 0m26.970s
sys 0m1.045s



30 секунд на вставку миллиона записей - это много или мало?

http://www.sqlite.org/cvstrac/wiki?p=SpeedComparison
Г.О.:
30 секунд на вставку миллиона записей - это много или мало?
Ну, уже лучше )

Да, матчасть надо учить...
werand:
привет, ребята.
я - Андрей.
вы тут про sqlite3 говорите.
такой вопрос. можно ли организовать запрос, что-то типа "SELECT <name> FROM <table> ORDER BY <name>", так чтобы сортировка была без учёта регистра. (с разными языками)
пробовал алгоритмическим путём - долго.

пожалуйста ответьте мне на мыло werand85@mail.ru
заранее спасибо.

С уважением
Андрей.
~AquaZ~:
Тут ещё один нюанс есть - Linux работает в среднем в ~2 раза быстрее тупой винды.

Эта тема на forum.dklab.ru