Внимание! В связи с устареванием топика эта страница была взята из кэша.
|
bog
Зарегистрирован: 07.11.02
Сообщения: 1595
|
Добавлено: 19/10/03 в 19:02
|
|
В кратце ситуация... есть файл (база) куча предложений, по одной в строке... надо сделать поиск по регексп шаблону слова в строке... на данный момент, пока база 10кб никаких проблем нет...
база хранится в простом текстовом файле, который полностью читается в память и обрабатывается с помощью РНР скрипта.
но в будущем размер файла вырастет ориентировочно до 300-500кб, вопрос, в каком формате лучше всего создавать базу данных и в чем писать скрипт для поиска чтоб достигнуть максимального быстродействия ?
|
K началу
|
|
|
Weber
Зарегистрирован: 03.10.03
Сообщения: 1276
|
Добавлено: 19/10/03 в 19:22
|
|
ИМХО текстовая база не так уж плоха, как ее порой представляют... самое простое решение для хранения инфы... Язык, который бы я использовал для обработки текстового файла - perl - он именно для такого и создавался. А вот по поводу быстродействия можешь особо не волноваться 300-500кб - не так много %) Была тут одна задача... нужно было файлик обработать... и весил он 87Мб %) Минуты две его скрипт обрабатывал.... скрипт на перле был... на си - такой же скрипт работал дольше (я специально два сделал) %)
|
K началу
|
|
|
lega_cobra
Зарегистрирован: 21.09.03
Сообщения: 229
|
Добавлено: 19/10/03 в 19:30
|
|
Weber писал: | ИМХО текстовая база не так уж плоха, как ее порой представляют... самое простое решение для хранения инфы... Язык, который бы я использовал для обработки текстового файла - perl - он именно для такого и создавался. А вот по поводу быстродействия можешь особо не волноваться 300-500кб - не так много %) Была тут одна задача... нужно было файлик обработать... и весил он 87Мб %) Минуты две его скрипт обрабатывал.... скрипт на перле был... на си - такой же скрипт работал дольше (я специально два сделал) %) |
Видимо плохо сделал
|
K началу
|
|
|
Stek
Зарегистрирован: 24.10.02
Сообщения: 719
|
Добавлено: 19/10/03 в 20:05
|
|
вообще то пхп изначально плохо работал и работает с большими объемами текстовых данных. Не его это дело файлы парсить.
|
K началу
|
|
|
DiamondRoads
Зарегистрирован: 15.10.03
Сообщения: 20
|
Добавлено: 19/10/03 в 21:28
|
|
Скорее всего скажу банальнейшую вешь, но лучше переходить на MySQL. Быстрее особо не будет, но зато снимется головная боль с блокировками файла при одновременном добавлении инфы. А если ещё разбить базу на таблицы (нормализовать) и отказаться (по возможности) от регулярных выражений, то будет и быстро и с запасом на объем данных. MySQL это не сложно и действительно стоит того, чтобы изучить.
Впрочем, если это не веб-применение и основная задача только выборка по regexp, то текст и перл действительно верный выбор.
|
K началу
|
|
|
Weber
Зарегистрирован: 03.10.03
Сообщения: 1276
|
Добавлено: 19/10/03 в 21:32
|
|
lega_cobra писал: | Weber писал: | ИМХО текстовая база не так уж плоха, как ее порой представляют... самое простое решение для хранения инфы... Язык, который бы я использовал для обработки текстового файла - perl - он именно для такого и создавался. А вот по поводу быстродействия можешь особо не волноваться 300-500кб - не так много %) Была тут одна задача... нужно было файлик обработать... и весил он 87Мб %) Минуты две его скрипт обрабатывал.... скрипт на перле был... на си - такой же скрипт работал дольше (я специально два сделал) %) |
Видимо плохо сделал  |
Посоревнуемся? Сделал - в лучших традициях алгоритмизации... даже книжки доставал %)
|
K началу
|
|
|
lega_cobra
Зарегистрирован: 21.09.03
Сообщения: 229
|
Добавлено: 19/10/03 в 21:36
|
|
Weber писал: | Посоревнуемся? Сделал - в лучших традициях алгоритмизации... даже книжки доставал %) |
Ну разве если только призы богатые победителю будут  Вообще-то сам перл на си написан
|
K началу
|
|
|
savs
Зарегистрирован: 08.12.02
Сообщения: 1321
|
Добавлено: 19/10/03 в 22:11
|
|
lega_cobra писал: | Вообще-то сам перл на си написан  |
а пхп на визуал бейсике написан, хм...
|
K началу
|
|
|
bog
Зарегистрирован: 07.11.02
Сообщения: 1595
|
Добавлено: 19/10/03 в 23:44
|
|
скорость и требования к ресурсам критичны так как планируется что к скрипту будут сотни тысяч обращений в сутки. писать в файл т.е. базу абсолютно ничего не надо.
|
K началу
|
|
|
lega_cobra
Зарегистрирован: 21.09.03
Сообщения: 229
|
Добавлено: 20/10/03 в 00:05
|
|
bog писал: | скорость и требования к ресурсам критичны так как планируется что к скрипту будут сотни тысяч обращений в сутки. писать в файл т.е. базу абсолютно ничего не надо. |
При таких размерах базы и структуре ничего лучше простого текстового файла не придумать. Сервер, я так понимаю, под юникс-лайк будет? И это при каких-то жалких сотнях тысяч обращений в сутки? Один фиг, при частом обращении он будет в кешах сидеть постоянно. Правда вот от "визуал-php" надо уходить.
|
K началу
|
|
|
Pentarh
Зарегистрирован: 05.04.03
Сообщения: 1376
|
Добавлено: 20/10/03 в 00:25
|
|
Последнее время ознакомился с INNODB. Базарят рульная вещь. Выдержка из мануала:
Цитата: | InnoDB has been designed for maximum performance when processing large data volumes. Its CPU efficiency is probably not matched by any other disk-based relational database engine.
|
HOWTO (MySQL manual)
Цитата: | expr REGEXP pat expr RLIKE pat Performs a pattern match of a string expression expr against a pattern pat. The pattern can be an extended regular expression. See section G MySQL Regular Expressions. Returns 1 if expr matches pat, otherwise returns 0. RLIKE is a synonym for REGEXP, provided for mSQL compatibility. Note: Because MySQL uses the C escape syntax in strings (for example, `\n'), you must double any `\' that you use in your REGEXP strings. As of MySQL Version 3.23.4, REGEXP is case-insensitive for normal (not binary) strings: mysql> SELECT 'Monty!' REGEXP 'm%y%%'; -> 0 mysql> SELECT 'Monty!' REGEXP '.*'; -> 1 mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line'; -> 1 mysql> SELECT "a" REGEXP "A", "a" REGEXP BINARY "A"; -> 1 0 mysql> SELECT "a" REGEXP "^[a-d]"; -> 1
REGEXP and RLIKE use the current character set (ISO-8859-1 Latin1 by default) when deciding the type of a character. expr NOT REGEXP pat expr NOT RLIKE pat Same as NOT (expr REGEXP pat).
|
|
K началу
|
|
|
Stek
Зарегистрирован: 24.10.02
Сообщения: 719
|
Добавлено: 20/10/03 в 01:41
|
|
InnoDB будет в скорости выигрывать при объемах от гига и более.
А то что от пхп уходить ... я сейчас себе "а ля тумбокрут" придумываю, так на довольно сложном алгоритме расчета 1.5Ghz комп 10к обращений за данными делает в течении 26-30 секунд.
|
K началу
|
|
|
Pentarh
Зарегистрирован: 05.04.03
Сообщения: 1376
|
Добавлено: 20/10/03 в 01:44
|
|
Ну ХАУТУ по крайней мере пригодится. Это ведь и к мускулю относится.
|
K началу
|
|
|
Dandy
Зарегистрирован: 20.10.03
Сообщения: 1
|
Добавлено: 20/10/03 в 02:08
|
|
-try varchar -read mysql->manual->optimize -hashkeys
|
K началу
|
|
|
Weber
Зарегистрирован: 03.10.03
Сообщения: 1276
|
Добавлено: 20/10/03 в 04:17
|
|
Пентарх, ИМХО ИнноДБ это для серьезных баз уже... а 300-500кб это так себе %)
Хотя... можно ведь поэксперементировать.... написать два варианта и время записывать.... будет полезно %) Научную работу напишете на эту тему...
|
K началу
|
|
|
DiamondRoads
Зарегистрирован: 15.10.03
Сообщения: 20
|
Добавлено: 20/10/03 в 08:03
|
|
bog писал: | скорость и требования к ресурсам критичны так как планируется что к скрипту будут сотни тысяч обращений в сутки. |
Я бы сделал в виде базы данных (а не одной таблицы с данными). Перебор всех данных с выборкой через regexp - самое медленное, что можно придумать. На домашнем сервере у меня запрос SELECT * FROM table WHERE field REGEXP 'q(.+)qw[a-g]+' выполняется полсекунды (в таблице 7к строк по 70байт, т.е. как раз "500кб данных"). Сотня вызовов в сутки подразумевает вызов скрипта каждую секунду. Сотни вызовов - несколько раз в секунду. Вот и думайте, загружать сервер стоимостью в $xxxx, или заплатить программисту $xx-$2xx, чтобы переделать структуру данных.
Раз уж пошел эксперимент, перебор данных без регулярных выражений SELECT * FROM table WHERE field LIKE '%q%qw%' уже 0.15с Соответственно, при успешной реорганизации данных будет поиск чисел в индексных полях и доли секунды (десятые или сотые) по времени.
Кстати, какой тип таблицы выбрать - InnoDB или родной MyISAM - это уже дело завершающего эксперимента. Переключение между типами таблиц происходит одной команой.
|
K началу
|
|
|
Pentarh
Зарегистрирован: 05.04.03
Сообщения: 1376
|
Добавлено: 20/10/03 в 16:15
|
|
Значит ... Перл!
|
K началу
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
Внимание! В связи с устареванием топика эта страница была взята из кэша.
|