mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +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