![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
affendi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.10.2011 Репутация: нет Всего: нет |
Доброго времени суток!
Следующая проблема с простейшей, вроде бы, операцией: есть таблица MySQL, в которой хранятся данные типа TEXT (размер поля = 10000, но на самом деле размер текста обычно не превышает 1000 символов) и их их идентификаторы (около 200 000 строк), а также файл со списком идентификаторов (около 100 000 строк). Скрипт по идентификатору (регулярное выражение в коде возникло как попытка справиться с пробелами, возникшими при создании таблицы) вытаскивает из бд соответствующий текст и пишет его в файл. Первые 1.5 Мб записались за пару секунд, а далее скорость упала до 1Мб\час о_О. Последний факт навел на мысль, что проблема все-таки в записи, а не в БД.
Помогите разобраться, пожалуйста, и не стреляйте в пианиста - на перле и на MySQL играю второй день.. |
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
Если использование перла не является целью и есть доступ админа к базе, то можно поступить проще -- идентификаторы загнать в базу и выбрать всё одним запросом
mysql -u user tablespace -e 'select .... со всеми условиями и regexp-aми' > имя.файла В большинстве случаев это работает быстрее, регулярки в mysql пишутся через REGEXP или RLIKE, и результат можно обработать как угодно. |
|||
|
||||
affendi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.10.2011 Репутация: нет Всего: нет |
vadiml: в этом конкретном скрипте использование перла самоцелью не является, но мне таки вскоре придется проводить запись многабукв в файл именно из перла, и хотелось бы сейчас понять, что же я делаю не так.. Впрочем, спасибо за совет, попробую.
|
|||
|
||||
dmitryk1 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.6.2008 Где: Новосибирск Репутация: 2 Всего: 2 |
Я бы предложил тебе поотлаживать и посмотреть где именно происходят тормоза.
Во первых сделай вывод не в файл, а на экран и посмотри, увеличится ли скорость. Во вторых расставь отладочные выводы на экран и посмотри, какие операции занимают много времени. Я могу предположить что у тебя тормозит регексп в запросе. Хотя может и винт дохнет ![]() |
|||
|
||||
vivu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 3.11.2009 Репутация: нет Всего: нет |
Странный у вас способ работы с БД. Всё равно что микроскопом гвозди забивать. Узкое место у вас в базе данных. Она не предназначена для полнотекстового поиска.
У вас два варианта: 1. Выгрузить данные из таблицы в файл, а дальше работать с файлами, использую Tie::File. Крайне желательно ключи держать в памяти, чтобы минимизировать обращение к файлам. 2. Загрузить данные со списком идентификаторов в базу данных. Но это только если все ключи можно чётко идентифицировать с записями из первой таблицы. |
|||
|
||||
affendi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.10.2011 Репутация: нет Всего: нет |
Спасибо за наводки, проблема решилась простой индексацией поля, содержащего идентификатор)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |