Azure CosmosDB с MongoDB API: как избежать частых запросов больших ошибок - PullRequest
0 голосов
/ 28 сентября 2018

Мы используем конкретный экземпляр Azure CosmosDB с поддержкой API MongoDB.

Я использую библиотеку es6-promise-pool для ограничения параллелизма (я уменьшил его до 1).

function updateLoglineDB(outArr, brbId, context) {
    return new Promise((resolve, reject) => {
        let concurrency = 1;
        const promiseIterator = generatePromisesLoglines(outArr, brbId, context);
        let pool = new PromisePool(promiseIterator, concurrency);

        pool.start().then((done) => {
            resolve(done);
        }).catch((err) => {
            reject(err);
        });
    });
}

Вот функция generatePromisesLoglines:

const generatePromisesLoglines = function * (outArr, brbId, context) {
    for (let entry of outArr) {
        yield promiseWrite(entry, brbId, context);
    }
};

Вот функция обещания:

function promiseWrite(entry, brbId, context) {
    return new Promise((resolve, reject) => {
        let loglineColl = db.get().collection(logLinesCollection);
        loglineColl.update({ _id: entry._id }, {$set: entry}, {upsert: true}, function(err, result) {
            if (err) {
                context.log(brbId, ': ', err);
                reject(`logline write rejected with error ${err}, ${brbId}, ${entry}`);
            } else {
                resolve(`result of update: ${JSON.stringify(result)}`);
            }
        });
    });
}

Я искал функцию массовой вставки, но яНе найдено ни одной массовой вставки или массовых обновлений, согласно этой веб-странице: Поддержка API Azure Cosmos DB Mongo

Частота запросов - большая ошибка, возникает при попытке вставить ~ 15-20к документов сразу.Есть ли лучший способ, которым я мог бы написать это, или какую-то поддерживаемую массовую вставку для API MongoDB в Azure CosmosDB, которую я мог бы использовать?

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

Образец документа:

{
    "_id" : "1456026|<filename>|8842",
    "signatureGroup" : "<teamName>",
    "brbId" : "145602",
    "file" : "<filename>",
    "lineNumber" : 8842,
    "line" : "<sample logline> ~200-300 characters",
    "date" : ISODate("2018-05-14T20:15:13.771Z"),
    "matchCode" : "<sample matchCode>",
    "info" : false
}
...