Задать вопрос
  • Как из PHP выполнить длительный запрос к mySQL?

    @andrshpa Автор вопроса
    1. Вывод в файл осуществляется из БД напрямую. Но PHP нужен, т.к. на нем строится логика работы сайта(сервиса).
    2. То что можно запускать в консоли знаю, но мне нужно в браузере - по действию пользователя в интерфейсе.
    3. Это знаю. Но разве это правильно так делать?
    4. Из браузера так можно?
  • MariaDB(mySQL) - как быстро(!) оставить только уникальные варианты?

    @andrshpa Автор вопроса
    Exploding, идея классная, но когда ответ на запрос содержит несколько миллионов значений - то это вряд-ли будет работать корректно.
    Вообще, сейчас таблица без индексов(так посоветовали в соседнем вопросе) - но сейчас попробую добавить по одной из колонок.
  • MariaDB(mySQL) - как быстро(!) оставить только уникальные варианты?

    @andrshpa Автор вопроса
    AnneSmith, пожалуйста, если не сложно - объясните свой ответ, просто подскажите где почитать об этом/как гуглить.
    сортировать в базе

    ведь это Вы не SQL ORDER BY /GROUP BY имеет ввиду же?
  • MariaDB(mySQL) - как быстро(!) оставить только уникальные варианты?

    @andrshpa Автор вопроса
    AnneSmith, я немного новичок, и думаю что вы написали неплохой вариант, но не пойму, как это реализовать.
    сортировать в базе, дубликаты убрать кодом

    Что значит сортировать в базе?
    Дубликаты убрать кодом - отдельно смысл понятен, а тут нет. Тем более, что результат запроса сохраняется в файл при помощи INTO OUTFILE '/tempS/temp12.txt'
  • MariaDB(mySQL) - как быстро(!) оставить только уникальные варианты?

    @andrshpa Автор вопроса
    можете пожалуйста более развернуто ответить?
  • Как БЫСТРО вывести несколько млн.строк в txt из mariaDB(mySQL)?

    @andrshpa Автор вопроса
    asd111, да, без индексов работает быстрее. Честно - большая неожиданность для меня! Отвечая на свой вопрос - Внешние ключи, думаю, будут только мешать.
    Сейчас буду пробовать с объедением таблиц в одну, но это займет некоторое время.
  • Как БЫСТРО вывести несколько млн.строк в txt из mariaDB(mySQL)?

    @andrshpa Автор вопроса
    asd111, спасибо, скоро попробую.
    Что скажете про использование Внешних ключей, и про оптимизацию при помощи временных таблиц(https://rauf.ru/article/optimizaciya-join-s-pomosh... нагуглил это вчера, хочу узнать у специалиста, насколько применимо к моей ситуации.

    Также, у меня тип таблиц COMPRESSED - это может оказывать негативное влияние?

    Делать такую денормализацию не очень хочется, но похоже придется. Разбить на несколько таблиц - это уже проблема - выборка данных должна происходить по всем имеющимся данным.
    При объединении двух таблиц в одну, можно рассчитывать на адекватную производительность на больших(250 млн строк) объемах?

    Возможно, стоит использовать другую СУБД? Может быть вообще нереляционную, по типу Хранилища колонок(но не совсем понятно как делать выборки с фильтрацией)?
  • Как БЫСТРО вывести несколько млн.строк в txt из mariaDB(mySQL)?

    @andrshpa Автор вопроса
    explain ... результат
    AlvJi5E0.pngSHOW INDEXES FROM accounts
    AlvJi5E1.pngSHOW INDEXES FROM accounts_status
    AlvJi5E2.pnginnodb_buffer_pool_size стоит 24G, не думаю что если уменьшить его то сильно что то измениться.

    Я думаю что проблема не в скорости записи, а именно в "отдаче" от mariaDB/обработке выдачи из таблицы в формат для записи в файл. Криво как то объяснил.

    P.S. я конечно несколько новичок, но не до такой степени что бы не знать про эти параметры и что такое индексы. ;)
  • Как БЫСТРО вывести несколько млн.строк в txt из mariaDB(mySQL)?

    @andrshpa Автор вопроса
    Fixid,
    /usr/sbin/mysqld, Version: 10.2.8-MariaDB-log (MariaDB Server). started with:
    Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
    Time                 Id Command    Argument
    # Time: 170901 21:29:30
    # User@Host: admin[admin] @ ***мой_IP***
    # Thread_id: 10  Schema: spl_db_test  QC_hit: No
    # Query_time: 62.581469  Lock_time: 0.000150  Rows_sent: 0  Rows_examined: 2126288
    # Rows_affected: 0
    use spl_db_test;
    SET timestamp=1504294170;
    SELECT DISTINCT acc.email, acc.password <------>INTO OUTFILE '/tempS/s2.txt'
        FROM accounts acc JOIN accounts_status st ON acc.id_account=st.account_id
        WHERE st.service_id in(1,5,8,7,122,147,80,58,77,60,55,15,22,14,16,78,75)  AND st.status = 1;
    # Time: 170901 21:30:42
    # User@Host: admin[admin] @ ***мой_IP***
    # Thread_id: 11  Schema: spl_db_test  QC_hit: No
    # Query_time: 59.322831  Lock_time: 0.000163  Rows_sent: 1000000  Rows_examined: 3000798
    # Rows_affected: 1000000
    SET timestamp=1504294242;
    SELECT DISTINCT acc.email, acc.password <------>INTO OUTFILE '/tempS/s3.txt'
        FROM accounts acc JOIN accounts_status st ON acc.id_account=st.account_id
        WHERE st.service_id in(1,5,8,7,122,147,80,58,77,60,55,15,22,14,16,78,75)  AND st.status = 1 
    LIMIT 1000000;


    Вот, пожалуйста. До этого лог был отключен(знаю что так нельзя). Первый запрос - без LIMIT 1000000, я его прервал после 2х минут выполнения, а второй - с LIMIT 1000000 - выполнился примерно за минуту.

    Заранее большое спасибо за ответ, если я предоставил не ту информацию - прошу прощения, не так хорошо знаком с отладкой БД.
  • Огромная БД mySQL- что изучить?

    @andrshpa Автор вопроса
    Илья: данный ответ был написан раньше вашего последнего комментария у предыдущему посту. Решил все таки делать на mySQL, точнее на mariaDB, взял версию 10.2.7 (стабильная и актуальная на данный момент), правда там используется движок innoDB, но обещают что он сейчас имеет такую же производительность как и XtraDB. Подробнее на офф.сайте.
    Нереляционные БД все таки рассчитаны на намного более значительные объемы и несколько другие задачи - пугает то что там сложнее делать выборки по большому кол-ву параметров(в некоторых случаях - просто невозможно).
    Благодарю за советы, я обязательно отпишу как только получу хороший результат, думаю это будет уже скоро.
  • Огромная БД mySQL- что изучить?

    @andrshpa Автор вопроса
    Илья:
    //Все лагает при записи в status, или при просмотре через phpMyAdmin??))
    //Сколько запрос выполнялся?

    phpMyAdmin не пользуюсь, в db Forge Studio лагает, запрос на запись выполняется достаточно быстро, но вот запросы на получение больших выборок - неимоверно долго, точно дольше чем несколько десятков секунд. База status занимала на диске порядка 40 гб, будучи заполненной для 10 млн аккаунтов, меня это очень беспокоит.

    Тип БД - innoDB. Возможно стоит перейти на maria? Но это вроде как не самый лучший вариант.

    Думаю, завтра я настрою нормальный сервер, попробую применить ваш совет к таблице статус, и более конкретно все протестировать и проверить

    Так же надо учитывать - что 18 млн записей - даже не 10% от реальной рабочей нагрузки..
  • Огромная БД mySQL- что изучить?

    @andrshpa Автор вопроса
    Благодарю за ответ!
    Самое плохое в оф. документации - она на английском. Но этот совет я услышал, буду стараться, тем более уже сталкивался в других своих проектах с тем, что английский оф. мануал - самый лучший и результат получился только с ним.
    Вопрос - придуманная мной схема БД(привожу ниже) правильная или её нужно менять в корне?

    "БД содержит в себе таблицы
    accounts - в ней "столбцы" - ID(автоинкремент), email(varchar 255), password(varchar 255), login(varchar 255), и comment (TEXT). Для comment понимаю что нужно выносить в отдельную таблицу т.к. их будет
    немного на общем фоне и это повысит производительность.
    services - ID(автоинкремент), name (varchar 255), hard_level(tinyint), domain (varchar 255)
    status - ID(автоинкремент), account_id(int 11), service_id(int 11), value(tinyint)

    Как это все работает думаю понятно:
    В таблицу accounts вносятся аккаунты.
    В таблице services практически не меняются сервисы.
    В таблице status при появлении информации вносится связка account_id - соответствующий ID аккаунта из acccounts, service_id - соответствующий ID сервиса, и значение 0/1. Для одного аккаунта может быть кол-во записей от нескольких, до полного кол-ва сервисов(160+)"
  • Огромная БД mySQL- что изучить?

    @andrshpa Автор вопроса
    ответил ниже, пожалуйста гляньте, что бы не дублировать
  • Огромная БД mySQL- что изучить?

    @andrshpa Автор вопроса
    Сейчас читаю про noSQL - может и вправду имеет смысл делать с ними?
  • Огромная БД mySQL- что изучить?

    @andrshpa Автор вопроса
    Попытаюсь ответить - база не абстрактная, я уже пытаюсь что то сделать. Вышло не очень.

    БД содержит в себе таблицы

    accounts - в ней "столбцы" - ID(автоинкремент), email(varchar 255), password(varchar 255), login(varchar 255), и comment (TEXT). Для comment понимаю что нужно выносить в отдельную таблицу т.к. их будет
    немного на общем фоне и это повысит производительность.

    services - ID(автоинкремент), name (varchar 255), hard_level(tinyint), domain (varchar 255)

    status - ID(автоинкремент), account_id(int 11), service_id(int 11), value(tinyint)

    Как это все работает думаю понятно:
    В таблицу accounts вносятся аккаунты.
    В таблице services практически не меняются сервисы.
    В таблице status при появлении информации вносится связка account_id - соответствующий ID аккаунта из acccounts, service_id - соответствующий ID сервиса, и значение 0/1. Для одного аккаунта может быть кол-во записей от нескольких, до полного кол-ва сервисов(160+)

    Сейчас в базе есть 18млн тестовых записей в accounts, на основании которых я попробовал заполнить status. там начали получаться огромные значения ID, все лагает*. На реальном количестве аккаунтов 250млн+ - значения ID в таблице status станут просто огромными - грубо говоря что в районе 42500000000 - 12-значное число, что мне кажется соооовсем не здорово.

    Так же для получения результата будет использоваться JOIN при такой архитектуре таблицы, что тоже плохо для производительности.

    Фильтр может быть вроде: выбрать все аккаунты с +(1) на определенных сервисах(при этом на сервисы есть доп фильтр - по hard-level и domain), + еще к этому всему надо будет прикрутить фильтр по датам, упустил из виду, но в целом сути это не меняет.

    *комп i7 3770, 8gb RAM, win7, установлен отдельно Apache и mySQL(не настраивал особо пока). сервер есть примерно такой же мощности, можно ставить любую ОС и делать что угодно.
  • Огромная БД mySQL- что изучить?

    @andrshpa Автор вопроса
    Думаю что мне нужна реляционная база.
    Храниться будут записи о статусах пользователей в определенных системах. Вся информация в БД сводится к данным аккаунта(пара столбцов varchar(255)) и большому кол-ву значений 0/1(tinyint) отображающих определенные статусы.
    Обрабатывать - буду извлекать в текстовые файлы те записи, которые попадают под определенные фильтры, это основное направление. Так же при добавлении новых записей буду проверять уникальность.
  • Apache 2.4, не могу настроить name-based VirtualHost на localhost. Почему ошибка 400?

    @andrshpa Автор вопроса
    СПАСИБО ОГРОМНОЕ!
    Насколько же тупая ошибка...
    Но на XAMPP проблемы не возникало.
  • Создние прокси-сервиса. Как реализовать API?

    @andrshpa Автор вопроса
    1)Ну это и так понятно, я имел ввиду что бы оно автоматически заполнялось/обновлялось - мало ли что, вдруг из за неполадок какой то из прокси испортился.
    2)вопрос был больше в том плане, что может какой то сервер имеет удобное решение для таких задач.
    3)для моих задач - вообще не вариант. нужны именно прокси.