вторник, 26 января 2010 г.

Производительность SQLite FTS3

Возвращаясь к вопросу о производительности модуля полнотекстового поиска в SQLite, мы можем наблюдать весьма приятную картину:


$ ls -lh|grep test.db|awk '{print $5}'
15G

$ sqlite3 test.db
SQLite version 3.6.21

sqlite> select count(*) from file_text;
908800
sqlite> select total(length(content)) from file_text;
6552194816.0
sqlite> select count(docid) from file_text where file_text match 'претензия';
1536
CPU Time: user 0.004001 sys 0.000000
sqlite> select count(docid) from file_text where file_text match 'новости август абонент';
256
CPU Time: user 0.028002 sys 0.000000
sqlite> select count(docid) from file_text where file_text match 'новости август абонент*';
512
CPU Time: user 0.420026 sys 0.000000


Резюме: набор из почти миллиона документов общим размером 100 Гб, суммарно содержащих 6,5 миллиардов знаков, хранится в 15 Гб БД и поиск по одному слову занимает единицы миллисекунд, по нескольким словам - десятки миллисекунд, по нескольким словам с маской - сотни миллисекунд. Черт возьми, ведь это уже и есть светлое будущее.

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru