Превышен предел скорости SwifType - PullRequest
0 голосов
/ 17 октября 2019

У меня сейчас есть демо-счет. Я пытаюсь создать POC, используя SwifType для моего работодателя. У нас очень большая база данных, которая indexec каждые 1 час и создает файл JSON. Я думал, что интеграция с Elastic будет очень легкой, учитывая, что отправка строки при ее генерации - это только вопрос. Я использовал PHP Curl и получил соединение с API. Код отправляет часть данных, а затем выходит из строя с ошибкой «Превышен предел скорости».

Как мне обойти эту ошибку и получить полный индекс JSON?

Мой код выглядиткак сейчас:

// SENDING DATA TO ELASTIC SEARCH
$arr = array_change_key_case($arr, CASE_LOWER); // Keys to lower case
$arrlist = array_chunk($arr,100); // Split to chunks of 100
foreach($arrlist as $key=>$arr){
    $json = json_encode($arr); // Making the JSON string from the array
    $ch = curl_init('https://host-***.api.swiftype.com/api/as/v1/engines/***/documents');                                                                      
    curl_setopt($ch, CURLOPT_POST, 1);                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);      
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);                                                                
    $headers = array();
    $headers[] = 'Content-Type: application/json';
    $headers[] = 'Authorization: Bearer private-***';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);

    echo $result."<hr>";
}

Кроме того, учитывая, что этот код будет индексироваться каждый час, если я буду отправлять одни и те же данные снова и снова, ОБНОВИТ ли он предыдущий или дублирует его? Если так, как я могу справиться с этим?

1 Ответ

0 голосов
/ 18 октября 2019

Вам нужно взглянуть на заголовок X-RateLimit-Remaining (см. Подробности здесь ), когда он достигнет 0 (или приблизится к нему) или когда вы получите ответ 429, вы sleep() и затем повторите попытку,Я бы рекомендовал использовать экспоненциальный откат , если вы получаете несколько 429 ответов подряд (удваивайте время ожидания каждый раз, когда вы получаете 429, сбрасывайте его до значения по умолчанию при успешном выполнении вашего запроса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...