mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-29 10:06:13 +01:00
optimize getPostIndices
only use 1 set when its in a topic
This commit is contained in:
@@ -151,6 +151,14 @@ module.exports = function(db, module) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.sortedSetsRanks = function(keys, values, callback) {
|
||||||
|
throw new Error('not implemented');
|
||||||
|
};
|
||||||
|
|
||||||
|
module.sortedSetRanks = function(key, values, callback) {
|
||||||
|
throw new Error('not implemented');
|
||||||
|
};
|
||||||
|
|
||||||
module.sortedSetRevRank = function(key, value, callback) {
|
module.sortedSetRevRank = function(key, value, callback) {
|
||||||
module.getListRange(key, 0, -1, function(err, list) {
|
module.getListRange(key, 0, -1, function(err, list) {
|
||||||
for (var i = list.length - 1, ii=0; i > ii; i--) {
|
for (var i = list.length - 1, ii=0; i > ii; i--) {
|
||||||
|
|||||||
@@ -264,6 +264,21 @@ module.exports = function(db, module) {
|
|||||||
}, callback);
|
}, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.sortedSetRanks = function(key, values, callback) {
|
||||||
|
module.getSortedSetRange(key, 0, -1, function(err, sortedSet) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = values.map(function(value) {
|
||||||
|
var index = sortedSet.indexOf(value.toString());
|
||||||
|
return index !== -1 ? index : null;
|
||||||
|
});
|
||||||
|
|
||||||
|
callback(null, result);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
module.sortedSetScore = function(key, value, callback) {
|
module.sortedSetScore = function(key, value, callback) {
|
||||||
if (!key) {
|
if (!key) {
|
||||||
return callback();
|
return callback();
|
||||||
|
|||||||
@@ -129,6 +129,14 @@ module.exports = function(redisClient, module) {
|
|||||||
multi.exec(callback);
|
multi.exec(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.sortedSetRanks = function(key, values, callback) {
|
||||||
|
var multi = redisClient.multi();
|
||||||
|
for(var i=0; i<values.length; ++i) {
|
||||||
|
multi.zrank(key, values[i]);
|
||||||
|
}
|
||||||
|
multi.exec(callback);
|
||||||
|
};
|
||||||
|
|
||||||
module.sortedSetRevRank = function(key, value, callback) {
|
module.sortedSetRevRank = function(key, value, callback) {
|
||||||
redisClient.zrevrank(key, value, callback);
|
redisClient.zrevrank(key, value, callback);
|
||||||
};
|
};
|
||||||
|
|||||||
18
src/posts.js
18
src/posts.js
@@ -4,6 +4,7 @@ var async = require('async'),
|
|||||||
path = require('path'),
|
path = require('path'),
|
||||||
fs = require('fs'),
|
fs = require('fs'),
|
||||||
nconf = require('nconf'),
|
nconf = require('nconf'),
|
||||||
|
_ = require('underscore'),
|
||||||
validator = require('validator'),
|
validator = require('validator'),
|
||||||
winston = require('winston'),
|
winston = require('winston'),
|
||||||
gravatar = require('gravatar'),
|
gravatar = require('gravatar'),
|
||||||
@@ -534,24 +535,29 @@ var async = require('async'),
|
|||||||
if (!Array.isArray(posts) || !posts.length) {
|
if (!Array.isArray(posts) || !posts.length) {
|
||||||
return callback(null, []);
|
return callback(null, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
user.getSettings(uid, function(err, settings) {
|
user.getSettings(uid, function(err, settings) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
var byVotes = settings.topicPostSort === 'most_votes';
|
var byVotes = settings.topicPostSort === 'most_votes';
|
||||||
var sets = posts.map(function(post) {
|
var sets = posts.map(function(post) {
|
||||||
if (byVotes) {
|
return byVotes ? 'tid:' + post.tid + ':posts:votes' : 'tid:' + post.tid + ':posts';
|
||||||
return 'tid:' + post.tid + ':posts:votes';
|
|
||||||
} else {
|
|
||||||
return 'tid:' + post.tid + ':posts';
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var uniqueSets = _.uniq(sets);
|
||||||
|
var method = 'sortedSetsRanks';
|
||||||
|
if (uniqueSets.length === 1) {
|
||||||
|
method = 'sortedSetRanks';
|
||||||
|
sets = uniqueSets[0];
|
||||||
|
}
|
||||||
|
|
||||||
var pids = posts.map(function(post) {
|
var pids = posts.map(function(post) {
|
||||||
return post.pid;
|
return post.pid;
|
||||||
});
|
});
|
||||||
|
|
||||||
db.sortedSetsRanks(sets, pids, function(err, indices) {
|
db[method](sets, pids, function(err, indices) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user