За последние 24 часа нас посетили 22836 программистов и 1234 робота. Сейчас ищут 743 программиста ...

Челлендж: парсинг огромного файла с заливкой в БД

Тема в разделе "PHP для профи", создана пользователем artoodetoo, 13 фев 2016.

  1. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Предлагаю испытание или соревнование: берём общедоступный большой текстовый файл, описываем схему БД и пытаемся как можно быстрее перегнать одно в другое. Результаты рассматриваем под лупой и берем на вооружение.

    Предлагаю взять дамп вопросов и ответов stackoverflow (XML) и согласовать структуру таблицы MySQL. Сорцы зальем на github, у каждого участника свой бранч в проекте. В мастере только описание. Сливаться ветки врядли будут, в одном репозитории просто для кучности. На чтение будет доступно всем, на изменение только команде участников.

    Как сравнивать: создаем эталонную виртуалку с Linux, git, php и mysql. Vagranfile включаем в проект. Если внезапно чье-то решение потребует установки чего-то сверх эталона, это должно быть описано как provision к вагранту.
    Естественно абсолютные цифры производительности будут зависеть от хост-машины, но зато тесты будут сравнимы и доступны каждому.

    Итого, требования к участнику: владение git+github, установленный Vagrant c VirtualBox. Кто хочет поучаствовать?

    UPDATE: файл можно качнуть через torrent, не обязательно брать всё, выделите только Posts со stackoverflow. Это около 6Гб в архиве. Распакуется в XML 29Гб.
     
  2. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Да и так известно сколько будет, - всё уже тестировали и не раз и здесь об этом писали (или в соседнем форуме).
    Максимально:
    <= Скорости диска (максимум 30-500 Мб/сек)
    <= Числу записей в БД (максимум 30000 зап/сек)
    <= Скорости парсера строк (PHP - максимум порядка 100 000 строк/сек)

    Хотя ... если скучно и мозги чешутся, то можно и поразвлекаться конечно ;)
     
  3. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    блин, я бы с удовольствием по участвовал, но могу только по наблюдать (:)
    мне кажется, это интересно сделать на PHP и сравнить время выполнения (:)
    Хотя на C++ будет ваще летать...
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ебля с парсингом xml пугает. Очевидно, что библиотеками не прокатит.
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    надо за один запрос в БД добавлять много записей, т.е. в одном запросе:
    Код (PHP):
    1. INSERT INTO `tb_name` (.......) VALUES 
    2. (.......),
    3. (.......),
    4. (.......),
    5. (.......); 
    если добавлять по одной записи то жесть будет, часов 5 если мне не изменяет память, а если по 200 - 500 за запрос, то где то за 20 минут.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    синтаксис не такой. ой.
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    может имело бы смысл сразу написать какой?

    странно у меня именно так вписывалось в sql файл и потом не было ни каких проблем.
     
  8. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    реально удивительно ((:)
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    VALUES избыточен в таком кол-ве. экономь байты.
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Я б поучаствовал, но предлагаю CSV вместо XML.
     
  11. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    да, че то я затупил, у меня всего 1 VALUES, все остальное через запятую в скобках :)
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    сорьки
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    [vs], задача не сводится к простому знанию MySQL load from file. Нет, большой XML интереснее. )))

    Ну так как, есть желающие? За это вам ничего не будет.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    не охота свой парсер писать правда. =( А с библиотечными я не работал, не знаю, умеют ли они xml кусочками кушать.
     
  15. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    +1 На CSV я съел десяток собак

    пока достигнутый результат около 20 тысяч строк в секунду падает в БД

    XML куда более сложно разбирать и складывать ( просто ввиду того, что сам файл XML, содержащий то же кол-во инфы что и CSV как минимум раза в три "тяжелее" CSV (
     
  16. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Друзья, вы не поняли. Челлендж изначально не может быть комфортным :)

    Добавлено спустя 2 минуты 26 секунд:
    Представьте: у вас есть возможность поучаствовать в ралли. Вы приходите к оргам и говорите, что вам больше нравится гонять на бмв7 по автобану. Увы!

    Добавлено спустя 3 минуты 28 секунд:
    С вашими желательными условиями задача и правда превратится в тестирование скорости диска. Похоже с выбором места я ошибся.
     
  17. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Ну, не горячись:). Может есть люди которых реально заинтересовала тема.
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    надо же никто не хочет тратить время на задачу, лишенную смысла, печаль чо.
     
  19. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Не обессудь, в контексте недавнего топика про разбор 2гб файла, показалось что именно в этом суть. Здесь надо определиться, парсить конкретный файл или парсить XML вообще. Во втором случае нужно реализовать RFC, это слишком для спортивного интереса =)
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Другая тема это другая тема, я за ней не слежу.

    Кто не хочет, тот ищет причину. Кто хочет, тот ищет возможность. :)
     
  21. Anhk

    Anhk Активный пользователь

    С нами с:
    13 дек 2015
    Сообщения:
    219
    Симпатии:
    11
    значит, никто не хочет.
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Профи обосрались ))) Окееей. Отрицательный опыт тоже важен.
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Как маленький.
     
  24. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Вы преувеличиваете.
    Выше же Вам сказали, что больше чем 30 тыс. записей/сек на поток принципиально не получится (реально - меньше). Остальное ограничение - диск.
    Ну и зачем тратить кучу времени на то, что и так известно? Лучше его потратить на что-нибуть более полезное.

    Кроме того, Вы сами не так давно участвовали в теме viewtopic.php?f=13&t=43563