feat: #7707, added sortedSetAddBulk

This commit is contained in:
Barış Soner Uşaklı
2019-06-24 17:48:13 -04:00
parent e48c7cd717
commit 3ecd703ea3
5 changed files with 106 additions and 35 deletions

View File

@@ -72,8 +72,17 @@ module.exports = function (db, module) {
bulk.find({ _key: keys[i], value: value }).upsert().updateOne({ $set: { score: parseFloat(isArrayOfScores ? scores[i] : scores) } });
}
bulk.execute(function (err) {
callback(err);
bulk.execute(err => callback(err));
};
module.sortedSetAddBulk = function (data, callback) {
if (!Array.isArray(data) || !data.length) {
return setImmediate(callback);
}
var bulk = db.collection('objects').initializeUnorderedBulkOp();
data.forEach(function (item) {
bulk.find({ _key: item[0], value: String(item[2]) }).upsert().updateOne({ $set: { score: parseFloat(item[1]) } });
});
bulk.execute(err => callback(err));
};
};

View File

@@ -125,4 +125,37 @@ INSERT INTO "legacy_zset" ("_key", "value", "score")
});
}, callback);
};
module.sortedSetAddBulk = function (data, callback) {
if (!Array.isArray(data) || !data.length) {
return setImmediate(callback);
}
const keys = [];
const values = [];
const scores = [];
data.forEach(function (item) {
keys.push(item[0]);
scores.push(item[1]);
values.push(item[2]);
});
module.transaction(function (tx, done) {
var query = tx.client.query.bind(tx.client);
async.series([
async.apply(helpers.ensureLegacyObjectsType, tx.client, keys, 'zset'),
async.apply(query, {
name: 'sortedSetAddBulk2',
text: `
INSERT INTO "legacy_zset" ("_key", "value", "score")
SELECT k, v, s
FROM UNNEST($1::TEXT[], $2::TEXT[], $3::NUMERIC[]) vs(k, v, s)
ON CONFLICT ("_key", "value")
DO UPDATE SET "score" = EXCLUDED."score"`,
values: [keys, values, scores],
}),
], function (err) {
done(err);
});
}, callback);
};
};

View File

@@ -69,4 +69,15 @@ module.exports = function (redisClient, module) {
callback(err);
});
};
module.sortedSetAddBulk = function (data, callback) {
if (!Array.isArray(data) || !data.length) {
return setImmediate(callback);
}
var batch = redisClient.batch();
data.forEach(function (item) {
batch.zadd(item[0], item[1], item[2]);
});
batch.exec(err => callback(err));
};
};