обработка и хранение больших объёмов данных

predator

web designer
есть массив данных в txt размером около 25Гб, нужно его закинуть в mysql
скрипт написан, работает и продолжает работать )
обработано около полутора гигов получено 25417296 строк в таблице

по дороге возникли следующие проблемы
запрос на постраничный вывод по http почему-то очень долго отрабатывает, хотя из шелл всё срабатывает очень быстро. Простейший селект с лимитом.
И второе ftell даёт почему-то отрицательное значение, по-крайней мере сохраняется в бд отрицательное число (UPDATE tbl SET position="'.ftell( $this->_fp ).'" WHERE file_name="'.$this->settings['file'].'" LIMIT 1). Такое вообще бывает? ))

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

был вариант делать через odbc с драйвером txt для подключения csv и др. файлов. но посчитали что долго разбираться как это реализовать под linux и сделали в лоб.
 

zerkms

TDD infected
Команда форума
Быстрее всего в mysql всасывать с load data infile.
 

predator

web designer
согласен, но это если у нас csv
в моём случае данные в строчке разбиты табами
хотя как вариант можно конвертнуть в csv
хм...
а вообще mysql с такими объёмами справится или точно известно что можно не пытаться даже?

зы
хотя нет не только csv - посмотрел там можно указать разделители, посыпаю голову пеплом
но второй вопрос остаётся в силе
 

iceman

говнокодер
predator
смотря что ты будешь выводить, какие запросы напишешь и как расставишь индексы и т.д. и т.п.
 

Aqvatarius

Новичок
25 Гб для мускула напряжно будет конечно, но тут вопрос железа и требований.

Данные я бы посоветовал обработать navicat-ом... там неплохо реализовано експорт/импорт данных... соответственно снимается нагрузка на пыхапе...
правда я експортил 6 гб csv... попробуйте, может поможет.
 

craz

Нестандартное звание
там же ограничение на 4гига базы не? гоню?
 

phprus

Moderator
Команда форума
craz
Это в Oracle 10 XE ограничение на 4 гига данных в базе.
В MySQL 3.22 было ограничение на таблицу 4 гига (с)Википедия, а после уже ограничения более близкие к бесконечности :)
 

predator

web designer
вот оптимальный путь для того чтобы закинуть в mysql данные из больших текстовиков:

PHP:
mysql: FLUSH TABLES;
shell: myisamchk --keys-used=0 -rq /data/mysql/mydb/mytbl
mysql: LOAD DATA INFILE "/path/to/file" INTO TABLE mytbl;
shell: myisamchk --quick --sort_buffer_size=1024M --tmpdir=/data/tmp -rq /data/mysql/mydb/mytbl
mysql: FLUSH TABLES;

второй myisamchk создаёт индексы в паяти и дополнительно упорядочивает их
--tmpdir - у меня так и не заработало, пришлось увеличивать swap диск
в остальном всё довольно резко сработало )
а, и надо заранее создать таблицу

после того как сделался индекс полнотекстовой
поиск шёл около 15-20 минут на запрос against match
match через sphinxQL отрабатывал на том же запросе за 0.2-0.04 секунды )
 

MiksIr

miksir@home:~$
по уникальным есть SET UNIQUE_CHECKS=0 вроде как... ну и FOREIGN_KEY_CHECKS=0
просто оно будет работать для всех движков, а не только для myisam
а так понятно, да =)
 
Сверху