Задать вопрос
  • Какой брокер сообщений выбрать под задачу - принять данные по api и записать в базу?

    @Artikul2 Автор вопроса
    Миллион? В json? Передай хороший пинок архитектору...

    Не совсем понимаю, что не так. Сейчас я вставляю в mysql миллион записей за секунду,
    SET @json = CONVERT(LOAD_FILE('$LOAD_FILE') using utf8mb4);
    REPLACE INTO load_orders ......
    from json_table(@json,'$[*]' columns......

    Но вообще перешел на кликхаус, и так же за секунду записываю миллион, кроме того они сами пишут, что лучше писать реже, но большими данными, хоть миллион, хоть два за раз.
    Но все это я инициирую на php и в рамках теста - как все устроено.
    Моя задача получать данные, записывать, но делать это гарантированно и выдавать ответы отправителю, и конечно же выполнять больше вставок за момент времени.

    Допустим, 20 отправителей данных прислали в течение минуты данные, я должен записать их максимально быстро, и скрипт записи не должен спотыкаться и выполняться последовательно, тормозя остальных.
    Написано
  • Как решить проблему с подключением к Clickhouse из php?

    @Artikul2 Автор вопроса
    без опечаток

    Я не вижу опечатку в ключе username, хоть убейте.
    Написано
  • Как решить проблему с подключением к Clickhouse из php?

    @Artikul2 Автор вопроса
    Ипатьев, Я исправил ошибку, к сожалению, я слишком буквально воспринял код из примера в гитхабе https://github.com/smi2/phpClickHouse
    Там написан пример:
    $config = [
        'host' => '192.168.1.1',
        'port' => '8123',
        'username' => 'default',
        'password' => '',
        'https' => true
    ];
    $db = new ClickHouseDB\Client($config);
    $db->database('default');
    $db->setTimeout(1.5);      // 1 second , support only Int value
    $db->setTimeout(10);       // 10 seconds
    $db->setConnectTimeOut(5); // 5 seconds
    $db->ping(true); // if can`t connect throw exception

    Хотя надо было так:
    require 'd:/dev/vendor/autoload.php';
    $settings = [
        'host' => '93.93.xxx.xxx',
        'port' => '8123',
        'username' => 'default',
        'password' => 'UFntdJye',
        'https' => false
    ];
    $db = new ClickHouseDB\Client($settings);
    $db->database('default');
    $db->setTimeout(2); // 2 секунды
    $db->setConnectTimeOut(10); // 10 секунд
    if (!$db->ping(true)) {
        echo 'Error connect';
    }
    print_r($db->showTables());
    Написано
  • Как решить проблему с подключением к Clickhouse из php?

    @Artikul2 Автор вопроса
    Ипатьев,
    Сама по себе ошибка - тупее не придумаешь.

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

    Если изменить 'https' => false на true, то сообщение, что пинга нет. Значит делаю вывод, что подключение устанавливается, но что с авторизацией не понятно. Я для проверки менял nginx на apache, но это не помогло.
    Написано
  • Как решить проблему с подключением к Clickhouse из php?

    @Artikul2 Автор вопроса
    Ипатьев,
    array(5) { ["host"]=> string(13) "93.93.xxx.xxx" ["port"]=> string(4) "8123" ["username"]=> string(7) "default" ["password"]=> string(8) "UFntdJye" ["https"]=> bool(false) }
    Написано
  • Как решить проблему с подключением к Clickhouse из php?

    @Artikul2 Автор вопроса
    Ипатьев, это выводит те же параметры, с типом данных, что и задаю
    Написано
  • Как мне для разных сайтов использовать свой php.ini?

    @Artikul2 Автор вопроса
    .user.ini положил в корень сайта и заработало. СПС
    Написано
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    Akina,
    select * from json_table(@json,'$[*]' columns(
    name varchar(20) path '$.name',
    city varchar(20) path '$.city',
    kurs varchar(20) path '$.kurs')) as jsontable

    Я всё сделал.
    Вам спасибо!
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    Akina, буду читать и читаю. Искал в интернете примеры, но все на зарубежных сайтах и практически одни дубли ответов, как и документация, вроде понятно, но как применить пока не разобрался.

    Сейчас накидал такой код для теста, он создает нужное кол-во строк из json, но все поля null
    SET @json = CONVERT(LOAD_FILE('/var/lib/mysql-files/myfile.json') using utf8mb4);
    REPLACE INTO test (name, city, kurs)
    SELECT   
      JSON_VALUE(@json, '$.name') as name,
      JSON_VALUE(@json, '$.city') as city,
      JSON_VALUE(@json, '$.kurs') as kurs
    FROM JSON_TABLE(@json,'$[*]' COLUMNS (data JSON PATH '$')) jsontable
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    Akina,
    <?php 
    $connection = mysqli_connect("localhost",".............","..........","...........");
          if(!$connection){ // проверка правильности подключения
             echo 'Ошибка соединения: ' . mysqli_connect_error() . '<br>';
             echo 'Код ошибки: ' . mysqli_connect_errno();
          }else{ // подключение успешно установлено
    
             // текст SQL запроса, который будет передан базе
                $query = "CREATE TABLE test (name VARCHAR(255),
                       position VARCHAR(255),
                       city VARCHAR(255),
                       postcode INT,
                       entered_at DATE,
                       income INT) DEFAULT CHARSET UTF8MB4;";
                $result = mysqli_query($connection, $query);
    
                $query = "
    
    INSERT INTO test (name, position, city, postcode, entered_at, income)
    SELECT data ->> '$[0]' name,
           data ->> '$[1]' position,
           data ->> '$[2]' city,
           data ->> '$[3]' postcode,
           STR_TO_DATE(data ->> '$[4]', '%Y\/%m\/%d') entered_at,
           REPLACE(SUBSTRING(data ->> '$[5]' FROM 2), ',', '') income
    FROM JSON_TABLE((CONVERT(LOAD_FILE('/var/lib/mysql-files/myfile.json') using utf8mb4)),
                    '$.data[*]' COLUMNS (data JSON PATH '$')) jsontable
    
    ";
                $result = mysqli_query($connection, $query);
    
    
    
                if(!$result){ // запрос завершился ошибкой
                   echo 'Ошибка запроса: ' . mysqli_error($connection) . '<br>';
                   echo 'Код ошибки: ' . mysqli_errno($connection);
                }else{ // запрос успешно выполнился
                   while($row = $result->fetch_assoc()){
                      // обрабатываем полученные данные
                   }
                }
             // закрываем соединение с базой
                mysqli_close($connection);
          }
    ?>

    625afc028b332755577172.png
    Я сделал так, и у меня кажется получилось.
    Теперь буду думать как обработать json как у меня (без data вложения)
    [{"name":"ivan","date":"2022-04-14T10:19:43","kurs":"1"},{"name":"lena","date":"2022-04-10T10:22:41","kurs":"5"},{"name":"misha","date":"2022-04-11T10:11:22","kurs":"3"}]
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    Akina,
    <?php 
          $connection = mysqli_connect("localhost",".............","..........","...........");
    
          if(!$connection){ // проверка правильности подключения
             echo 'Ошибка соединения: ' . mysqli_connect_error() . '<br>';
             echo 'Код ошибки: ' . mysqli_connect_errno();
          }else{ // подключение успешно установлено
    
             // текст SQL запроса, который будет передан базе
                $query = "CREATE TABLE test (name VARCHAR(255),
                       position VARCHAR(255),
                       city VARCHAR(255),
                       postcode INT,
                       entered_at DATE,
                       income INT);";
                $result = mysqli_query($connection, $query);
    
    
                $query = "create table jsontable( data json )";
                $result = mysqli_query($connection, $query);
    
                $query = "LOAD DATA INFILE '/var/lib/mysql-files/myfile.json' INTO TABLE jsontable";
                $result = mysqli_query($connection, $query);
    
                if(!$result){ // запрос завершился ошибкой
                   echo 'Ошибка запроса: ' . mysqli_error($connection) . '<br>';
                   echo 'Код ошибки: ' . mysqli_errno($connection);
                }else{ // запрос успешно выполнился
                   while($row = $result->fetch_assoc()){
                      // обрабатываем полученные данные
                   }
                }
             // закрываем соединение с базой
                mysqli_close($connection);
          }
    ?>

    json, который myfile.json
    {
      "data": [
        [
          "Tiger Nixon",
          "System Architect",
          "Edinburgh",
          "5421",
          "2011/04/25",
          "$320,800"
        ],
        [
          "Garrett Winters",
          "Accountant",
          "Tokyo",
          "8422",
          "2011/07/25",
          "$170,750"
        ],
        [
          "Ashton Cox",
          "Junior Technical Author",
          "San Francisco",
          "1562",
          "2009/01/12",
          "$86,000"
        ],
        [
          "Cedric Kelly",
          "Senior Javascript Developer",
          "Edinburgh",
          "6224",
          "2012/03/29",
          "$433,060"
        ],
        [
          "Airi Satou",
          "Accountant",
          "Tokyo",
          "5407",
          "2008/11/28",
          "$162,700"
        ],
        [
          "Brielle Williamson",
          "Integration Specialist",
          "New York",
          "4804",
          "2012/12/02",
          "$372,000"
        ],
        [
          "Herrod Chandler",
          "Sales Assistant",
          "San Francisco",
          "9608",
          "2012/08/06",
          "$137,500"
        ],
        [
          "Rhona Davidson",
          "Integration Specialist",
          "Tokyo",
          "6200",
          "2010/10/14",
          "$327,900"
        ],
        [
          "Colleen Hurst",
          "Javascript Developer",
          "San Francisco",
          "2360",
          "2009/09/15",
          "$205,500"
        ],
        [
          "Sonya Frost",
          "Software Engineer",
          "Edinburgh",
          "1667",
          "2008/12/13",
          "$103,600"
        ],
        [
          "Jena Gaines",
          "Office Manager",
          "London",
          "3814",
          "2008/12/19",
          "$90,560"
        ],
        [
          "Quinn Flynn",
          "Support Lead",
          "Edinburgh",
          "9497",
          "2013/03/03",
          "$342,000"
        ],
        [
          "Charde Marshall",
          "Regional Director",
          "San Francisco",
          "6741",
          "2008/10/16",
          "$470,600"
        ],
        [
          "Haley Kennedy",
          "Senior Marketing Designer",
          "London",
          "3597",
          "2012/12/18",
          "$313,500"
        ],
        [
          "Tatyana Fitzpatrick",
          "Regional Director",
          "London",
          "1965",
          "2010/03/17",
          "$385,750"
        ],
        [
          "Michael Silva",
          "Marketing Designer",
          "London",
          "1581",
          "2012/11/27",
          "$198,500"
        ],
        [
          "Paul Byrd",
          "Chief Financial Officer (CFO)",
          "New York",
          "3059",
          "2010/06/09",
          "$725,000"
        ],
        [
          "Gloria Little",
          "Systems Administrator",
          "New York",
          "1721",
          "2009/04/10",
          "$237,500"
        ],
        [
          "Bradley Greer",
          "Software Engineer",
          "London",
          "2558",
          "2012/10/13",
          "$132,000"
        ],
        [
          "Dai Rios",
          "Personnel Lead",
          "Edinburgh",
          "2290",
          "2012/09/26",
          "$217,500"
        ],
        [
          "Jenette Caldwell",
          "Development Lead",
          "New York",
          "1937",
          "2011/09/03",
          "$345,000"
        ],
        [
          "Yuri Berry",
          "Chief Marketing Officer (CMO)",
          "New York",
          "6154",
          "2009/06/25",
          "$675,000"
        ],
        [
          "Caesar Vance",
          "Pre-Sales Support",
          "New York",
          "8330",
          "2011/12/12",
          "$106,450"
        ],
        [
          "Doris Wilder",
          "Sales Assistant",
          "Sydney",
          "3023",
          "2010/09/20",
          "$85,600"
        ],
        [
          "Angelica Ramos",
          "Chief Executive Officer (CEO)",
          "London",
          "5797",
          "2009/10/09",
          "$1,200,000"
        ],
        [
          "Gavin Joyce",
          "Developer",
          "Edinburgh",
          "8822",
          "2010/12/22",
          "$92,575"
        ],
        [
          "Jennifer Chang",
          "Regional Director",
          "Singapore",
          "9239",
          "2010/11/14",
          "$357,650"
        ],
        [
          "Brenden Wagner",
          "Software Engineer",
          "San Francisco",
          "1314",
          "2011/06/07",
          "$206,850"
        ],
        [
          "Fiona Green",
          "Chief Operating Officer (COO)",
          "San Francisco",
          "2947",
          "2010/03/11",
          "$850,000"
        ],
        [
          "Shou Itou",
          "Regional Marketing",
          "Tokyo",
          "8899",
          "2011/08/14",
          "$163,000"
        ],
        [
          "Michelle House",
          "Integration Specialist",
          "Sydney",
          "2769",
          "2011/06/02",
          "$95,400"
        ],
        [
          "Suki Burks",
          "Developer",
          "London",
          "6832",
          "2009/10/22",
          "$114,500"
        ],
        [
          "Prescott Bartlett",
          "Technical Author",
          "London",
          "3606",
          "2011/05/07",
          "$145,000"
        ],
        [
          "Gavin Cortez",
          "Team Leader",
          "San Francisco",
          "2860",
          "2008/10/26",
          "$235,500"
        ],
        [
          "Martena Mccray",
          "Post-Sales support",
          "Edinburgh",
          "8240",
          "2011/03/09",
          "$324,050"
        ],
        [
          "Unity Butler",
          "Marketing Designer",
          "San Francisco",
          "5384",
          "2009/12/09",
          "$85,675"
        ],
        [
          "Howard Hatfield",
          "Office Manager",
          "San Francisco",
          "7031",
          "2008/12/16",
          "$164,500"
        ],
        [
          "Hope Fuentes",
          "Secretary",
          "San Francisco",
          "6318",
          "2010/02/12",
          "$109,850"
        ],
        [
          "Vivian Harrell",
          "Financial Controller",
          "San Francisco",
          "9422",
          "2009/02/14",
          "$452,500"
        ],
        [
          "Timothy Mooney",
          "Office Manager",
          "London",
          "7580",
          "2008/12/11",
          "$136,200"
        ],
        [
          "Jackson Bradshaw",
          "Director",
          "New York",
          "1042",
          "2008/09/26",
          "$645,750"
        ],
        [
          "Olivia Liang",
          "Support Engineer",
          "Singapore",
          "2120",
          "2011/02/03",
          "$234,500"
        ],
        [
          "Bruno Nash",
          "Software Engineer",
          "London",
          "6222",
          "2011/05/03",
          "$163,500"
        ],
        [
          "Sakura Yamamoto",
          "Support Engineer",
          "Tokyo",
          "9383",
          "2009/08/19",
          "$139,575"
        ],
        [
          "Thor Walton",
          "Developer",
          "New York",
          "8327",
          "2013/08/11",
          "$98,540"
        ],
        [
          "Finn Camacho",
          "Support Engineer",
          "San Francisco",
          "2927",
          "2009/07/07",
          "$87,500"
        ],
        [
          "Serge Baldwin",
          "Data Coordinator",
          "Singapore",
          "8352",
          "2012/04/09",
          "$138,575"
        ],
        [
          "Zenaida Frank",
          "Software Engineer",
          "New York",
          "7439",
          "2010/01/04",
          "$125,250"
        ],
        [
          "Zorita Serrano",
          "Software Engineer",
          "San Francisco",
          "4389",
          "2012/06/01",
          "$115,000"
        ],
        [
          "Jennifer Acosta",
          "Junior Javascript Developer",
          "Edinburgh",
          "3431",
          "2013/02/01",
          "$75,650"
        ],
        [
          "Cara Stevens",
          "Sales Assistant",
          "New York",
          "3990",
          "2011/12/06",
          "$145,600"
        ],
        [
          "Hermione Butler",
          "Regional Director",
          "London",
          "1016",
          "2011/03/21",
          "$356,250"
        ],
        [
          "Lael Greer",
          "Systems Administrator",
          "London",
          "6733",
          "2009/02/27",
          "$103,500"
        ],
        [
          "Jonas Alexander",
          "Developer",
          "San Francisco",
          "8196",
          "2010/07/14",
          "$86,500"
        ],
        [
          "Shad Decker",
          "Regional Director",
          "Edinburgh",
          "6373",
          "2008/11/13",
          "$183,000"
        ],
        [
          "Michael Bruce",
          "Javascript Developer",
          "Singapore",
          "5384",
          "2011/06/27",
          "$183,000"
        ],
        [
          "Donna Snider",
          "Customer Support",
          "New York",
          "4226",
          "2011/01/25",
          "$112,000"
        ]
      ]
    }

    Ошибка запроса: Invalid JSON text: "Missing a name for object member." at position 1 in value for column 'jsontable.data'.
    Код ошибки: 3140
    Ругается на
    $query = "LOAD DATA INFILE '/var/lib/mysql-files/myfile.json' INTO TABLE jsontable";

    Хотя если запросы вставлять в консоли, а не в php, то все отрабатывает.
    Я уже весь измучился(
  • Как массово добавить контакты в Telegram канал?

    @Artikul2
    Telegram каналы не имеют ограничения в 200 человек, а как раз и созданы, чтобы вещать на огромную аудиторию.
    Ограничение в 200 человек это про группы, но и и они при достижении лимита меняются на 200.000 человек с переходом группы в супергруппу.
    Автоматизировано добавить в группу нельзя, но можно удалять из группы с помощью бота.
    Настройками приватности пользователи вообще могут запретить добавлять себя куда-либо.
    Правильно будет средствами маркетинга (например, рассылками) сделать приглашение, предварительно отсегментировав базу.
  • Какой VPN выбрать в условиях санкций?

    @Artikul2
    Открою секрет, что и с некоторыми российскими хостерами вполне открываются сайты из списка роскомнадзора.
    Ответ более, чем лучший уже написан.
    Цена вопроса 120-180 руб в месяц. Это как чашка кофе в кафе.
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    Akina
    не получилось провести тест, но я я понимаю, что это то решение, что нужно.
    Не могли бы вы уточнить по моментам, которые вызвали сложности по неопытности:

    FROM JSON_TABLE(@data, '$.data[*]' COLUMNS (data JSON PATH '$')) jsontable

    Как сюда вставить физический json?
    Сначала я тупил и хотел указать путь на хостинге, типа ...../upload/myfile.json в этой строке, но потом понял, что вы имели ввиду - загрузить как есть.
    Правильно ли я понял, что мне надо создать временную таблицу, назвать ее JSON_TABLE и создать одно поле с названием data, как то загрузить туда json, а после того как разложу по полям, очищать таблицу?

    Второй момент: в примере использовался json
    spoiler
    {
      "data": [
        [
          "Tiger Nixon",
          "System Architect",
          "Edinburgh",
          "5421",
          "2011/04/25",
          "$320,800"
        ]
    ]
    }


    На практике у меня структура такая, без data((
    spoiler
    [{"name":"ivan","date":"2022-04-14T10:19:43","kurs":"1"},{"name":"lena","date":"2022-04-10T10:22:41","kurs":"5"},{"name":"misha","date":"2022-04-11T10:11:22","kurs":"3"}]


    помогите мне - как изменится код? Я готов немного отблагодарить вас и прислать вам денег, если вы напишите мне свой номер.
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    Спасибо большое, что не обошли вопрос стороной, как я вижу - это отличное решение.
    Если так, как я вижу в примере по ссылке, то это супер.
    Я попробую и обязательно отвечу здесь еще.
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    О, это наверное то, что нужно.
    Я хочу попробовать этот способ и отпишусь по результату.
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    у тебя правильно организована транзакция, одна на все инсерты

    о, нет. Этот пример еще не реализован. В рабочем варианте так как описано в посте.
    Я хочу попробовать переделать по своему примеру, но если говорите, что правильно организовано, то хорошо.

    Я не знаю только:
    foreach($Data as $items)
    {
    $query = "INSERT INTO employee (ssn,name,phone) values ($items['ssn'],$items['name'],$items['phone'])";
    
    };

    мне кажется тут ошибка в написании кода,
    надо в одну переменную все собрать, а так она у меня переписывается?!
  • Как правильно импортировать много данных из json в mysql?

    @Artikul2 Автор вопроса
    rPman,
    на каждый запрос на внешний сервер я получаю, допустим 1000 записей, где каждая запись имеет 20 значений.
    этот json я превращаю в массив и прогоняю в цикле два запроса
    1. Проверяю есть ли такая запись (поиск в базе)
    2. Если есть, то обновляю, если нет, то добавляю
    В этом и есть корень тормозов.
    Но по сути, каждый момент можно оптимизировать, если применить правильный подход.
    На использование транзакции подтолкнул этот пост
    https://qna.habr.com/q/82104
    Но в силу того, что я не работал никогда с mysql напрямую я не знаю как применить данный метод, мне бы пример.

    Пока прикидываю такой пример:
    mysql_connect(....) ;
    mysql_select_db("mytable");
    $Data = file_get_contents("data.json");
    $object = json_decode($Data);
    
    
    /* Начало транзакции */
    $mysqli->begin_transaction();
    
    try {
    
    foreach($Data as $items)
    {
    $query = "INSERT INTO employee (ssn,name,phone) values ($items['ssn'],$items['name'],$items['phone'])";
    
    };
    
        $mysqli->commit();
    } catch (mysqli_sql_exception $exception) {
        $mysqli->rollback();
    
        throw $exception;
    }

    Т.е. использование в циклах обращений к базе и есть тормоз.