Ад обратного вызова при отправке моего веб-сервиса Nodejs наasticsearch - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть потребитель NodeJ, отправляющий данные в Elasticsearch со скоростью 2 000 TPS более или менее.Мне нужно сохранять запросы по мере их получения, и, если будет какой-либо ответ, позже мне потребуется обновить информацию по запросу, добавив некоторые данные из ответа.Дело в том, что из-за высокого TPS у меня возникает много проблем, когда ответ поступает в Elasticsearch до запроса и т. Д., И это создает конфликт версий в _doc.это часть моего кода узла, которая делает upsert.Мне нужна помощь в оптимизации этого кода.Заранее большое спасибо.

 sendToElasticSearch(index, type, id, body, cb) {
    out('starting sendToElasticSearch()');
    var me = this;
    me.client.exists({
        index: index,
        type: type,
        id: id
    }, function(err, exists) {
        if (err) {
            cb(err)
        } else {
            if (exists === true) {
                out('exists. doing update.');
                // update existing document
                me.client.update({
                    index: index,
                    type: type,
                    id: id,
                    body: body

                }, function(err, resp) {
                    if (err) {
                        cb(err);
                    } else {
                        cb(null, resp);
                    }
                });
            } else {
                out('adding new document');
                // add new document
                me.client.create({
                    index: index,
                    type: type,
                    id: id,
                    body: body
                }, function(err, resp) {
                    if (err) {
                        cb(err);
                    } else {
                        cb(null, resp);
                    }
                });
            }
       }
    });
}

1 Ответ

0 голосов
/ 08 февраля 2019
sendToElasticSearch(index, type, id, body, cb) {
    var self = this;

    function onDone (err, exists) {
        if (err) 
            return cb(err); 

        var do = exists ? 'update' : 'create';
        self[do]({index, type, id, body}, cb);  
    }

    self.client.exists({index, type, id}, onDone);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...