From bae7da82c0202ca344e0d1f033b28e490e26add5 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Sat, 23 Dec 2017 17:26:39 +0800 Subject: [PATCH] opt(mongo): optimization db index --- .../server/models/makers.server.model.js | 4 +++ .../announces.server.controller.js | 1 + .../server/models/collections.server.model.js | 2 ++ .../server/models/forum.server.model.js | 3 ++ .../server/models/topic.server.model.js | 2 ++ .../server/models/invitation.server.model.js | 8 ++++++ .../models/admin-message.server.model.js | 1 + .../server/models/message.server.model.js | 1 + .../controllers/torrents.server.controller.js | 2 +- .../server/models/complete.server.model.js | 3 +- .../server/models/peer.server.model.js | 7 +++-- .../server/models/torrent.server.model.js | 28 ++++++++++++------- .../server/models/trace.server.model.js | 3 ++ .../users/server/models/user.server.model.js | 22 ++++++++++++--- 14 files changed, 68 insertions(+), 19 deletions(-) diff --git a/modules/about/server/models/makers.server.model.js b/modules/about/server/models/makers.server.model.js index 8649e417..40af8907 100644 --- a/modules/about/server/models/makers.server.model.js +++ b/modules/about/server/models/makers.server.model.js @@ -75,4 +75,8 @@ var MakerSchema = new Schema({ } }, {usePushEach: true}); +MakerSchema.index({torrent_count: -1}); +MakerSchema.index({upload_access: -1}); + + mongoose.model('Maker', MakerSchema); diff --git a/modules/announce/server/controllers/announces.server.controller.js b/modules/announce/server/controllers/announces.server.controller.js index e659839c..58690a10 100644 --- a/modules/announce/server/controllers/announces.server.controller.js +++ b/modules/announce/server/controllers/announces.server.controller.js @@ -251,6 +251,7 @@ exports.announce = function (req, res) { /*--------------------------------------------------------------- getTorrentItemData torrent data include peers + and update the seeding/leeching users count number ---------------------------------------------------------------*/ function (done) { Torrent.findOne({ diff --git a/modules/collections/server/models/collections.server.model.js b/modules/collections/server/models/collections.server.model.js index 9ea224ae..2bf23aa7 100644 --- a/modules/collections/server/models/collections.server.model.js +++ b/modules/collections/server/models/collections.server.model.js @@ -56,4 +56,6 @@ var CollectionSchema = new Schema({ } }, {usePushEach: true}); +CollectionSchema.index({recommend_level: 1, ordered_at: -1, created_at: -1}); + mongoose.model('Collection', CollectionSchema); diff --git a/modules/forums/server/models/forum.server.model.js b/modules/forums/server/models/forum.server.model.js index 9611a355..65dc11bb 100644 --- a/modules/forums/server/models/forum.server.model.js +++ b/modules/forums/server/models/forum.server.model.js @@ -72,4 +72,7 @@ var ForumSchema = new Schema({ } }, {usePushEach: true}); +ForumSchema.index({order: 1, createdat: -1}); +ForumSchema.index({category: 1, order: 1, createdat: -1}); + mongoose.model('Forum', ForumSchema); diff --git a/modules/forums/server/models/topic.server.model.js b/modules/forums/server/models/topic.server.model.js index 63b8e102..7be13e4d 100644 --- a/modules/forums/server/models/topic.server.model.js +++ b/modules/forums/server/models/topic.server.model.js @@ -146,6 +146,8 @@ var TopicSchema = new Schema({ } }, {usePushEach: true}); +TopicSchema.index({forum: 1, isTop: -1, lastReplyAt: -1, createdAt: -1}); +TopicSchema.index({isGlobal: 1, forum: -1}); mongoose.model('Topic', TopicSchema); mongoose.model('Attach', AttachSchema); diff --git a/modules/invitations/server/models/invitation.server.model.js b/modules/invitations/server/models/invitation.server.model.js index 7fd6dce4..3ea9add8 100644 --- a/modules/invitations/server/models/invitation.server.model.js +++ b/modules/invitations/server/models/invitation.server.model.js @@ -53,4 +53,12 @@ var InvitationSchema = new Schema({ } }, {usePushEach: true}); +InvitationSchema.index({user: 1, status: 1, invitedat: 1}); +InvitationSchema.index({user: 1, status: 1, expiresat: 1, createdat: 1}); +InvitationSchema.index({isOfficial: 1, invitedat: -1}); +InvitationSchema.index({isOfficial: 1, status: 1, expiresat: 1}); +InvitationSchema.index({to_email: 1}); +InvitationSchema.index({token: 1}); +InvitationSchema.index({token: 1, status: 1, expiresat: 1}); + mongoose.model('Invitation', InvitationSchema); diff --git a/modules/messages/server/models/admin-message.server.model.js b/modules/messages/server/models/admin-message.server.model.js index bc7f45b6..4251fb68 100644 --- a/modules/messages/server/models/admin-message.server.model.js +++ b/modules/messages/server/models/admin-message.server.model.js @@ -42,5 +42,6 @@ var AdminMessageSchema = new Schema({ } }, {usePushEach: true}); +AdminMessageSchema.index({type: 1, createdat: -1}); mongoose.model('AdminMessage', AdminMessageSchema); diff --git a/modules/messages/server/models/message.server.model.js b/modules/messages/server/models/message.server.model.js index c7e8f398..94c3c289 100644 --- a/modules/messages/server/models/message.server.model.js +++ b/modules/messages/server/models/message.server.model.js @@ -52,5 +52,6 @@ var MessageSchema = new Schema({ } }, {usePushEach: true}); +MessageSchema.index({type: 1, from_user: 1, to_user: 1, updatedat: -1, createdat: -1}); mongoose.model('Message', MessageSchema); diff --git a/modules/torrents/server/controllers/torrents.server.controller.js b/modules/torrents/server/controllers/torrents.server.controller.js index 57b1e19c..fa89c8e4 100644 --- a/modules/torrents/server/controllers/torrents.server.controller.js +++ b/modules/torrents/server/controllers/torrents.server.controller.js @@ -1863,7 +1863,7 @@ exports.getLeecherUsers = function (req, res) { peer_status: PEERSTATE_LEECHER, last_announce_at: {$gt: Date.now() - announceConfig.announceInterval - 60 * 1000} }) - .sort('-peer_uploaded') + .sort('-peer_downloaded') .populate('user', 'username displayName profileImageURL isVip') .skip(skip) .limit(limit) diff --git a/modules/torrents/server/models/complete.server.model.js b/modules/torrents/server/models/complete.server.model.js index 52f9602c..4cf93d5a 100644 --- a/modules/torrents/server/models/complete.server.model.js +++ b/modules/torrents/server/models/complete.server.model.js @@ -168,8 +168,9 @@ CompleteSchema.methods.removeHnRWarning = function (u) { }; +CompleteSchema.index({torrent: 1, user: 1}); +CompleteSchema.index({user: 1, hnr_warning: 1}); CompleteSchema.index({user: -1, createdAt: -1}); CompleteSchema.index({torrent: 1, createdAt: -1}); -CompleteSchema.index({torrent: 1, user: 1}); mongoose.model('Complete', CompleteSchema); diff --git a/modules/torrents/server/models/peer.server.model.js b/modules/torrents/server/models/peer.server.model.js index 15075d94..db856f69 100644 --- a/modules/torrents/server/models/peer.server.model.js +++ b/modules/torrents/server/models/peer.server.model.js @@ -140,8 +140,9 @@ function countPercent(p) { PeerSchema.index({user: -1, startedat: -1}); PeerSchema.index({torrent: -1, startedat: -1}); -PeerSchema.index({peer_status: 1}); -PeerSchema.index({torrent: 1, peer_status: 1, last_announce_at: 1}); -PeerSchema.index({user: 1, peer_status: 1, last_announce_at: 1}); +PeerSchema.index({torrent: 1, peer_status: 1, last_announce_at: 1, peer_uploaded: 1}); +PeerSchema.index({torrent: 1, peer_status: 1, last_announce_at: 1, peer_downloaded: 1}); +PeerSchema.index({user: 1, peer_status: 1, last_announce_at: 1, peer_uploaded: 1}); +PeerSchema.index({user: 1, peer_status: 1, last_announce_at: 1, peer_downloaded: 1}); mongoose.model('Peer', PeerSchema); diff --git a/modules/torrents/server/models/torrent.server.model.js b/modules/torrents/server/models/torrent.server.model.js index c90b9004..c92d573e 100644 --- a/modules/torrents/server/models/torrent.server.model.js +++ b/modules/torrents/server/models/torrent.server.model.js @@ -291,21 +291,31 @@ TorrentSchema.methods.globalUpdateMethod = function (cb) { }); }; +TorrentSchema.index({info_hash: 1}); + TorrentSchema.index({user: -1, createdat: -1}); TorrentSchema.index({maker: 1, createdat: -1}); -TorrentSchema.index({info_hash: 1, createdat: -1}); TorrentSchema.index({torrent_tmdb_id: 1, createdat: -1}); -TorrentSchema.index({torrent_status: 1, createdat: -1}); -TorrentSchema.index({torrent_type: 1, createdat: -1}); -TorrentSchema.index({torrent_hnr: 1, createdat: -1}); -TorrentSchema.index({torrent_vip: 1, createdat: -1}); TorrentSchema.index({torrent_recommended: 1, createdat: -1}); TorrentSchema.index({torrent_sale_status: 1, createdat: -1}); -TorrentSchema.index({user: 1, torrent_recommended: 1, orderedat: -1, createdat: -1, '_peers.id': 1}); +TorrentSchema.index({ + torrent_sale_status: 1, + 'resource_detail_info.id': 1 +}); + +TorrentSchema.index({ + user: 1, + torrent_recommended: 1, + orderedat: -1, + createdat: -1, + '_peers.id': 1 +}); + TorrentSchema.index({ torrent_status: 1, torrent_type: 1, + torrent_hnr: 1, torrent_vip: 1, torrent_recommended: 1, orderedat: -1, @@ -314,16 +324,14 @@ TorrentSchema.index({ }); TorrentSchema.index({ - user: 1, - maker: 1, torrent_status: 1, torrent_type: 1, - torrent_hnr: 1, torrent_vip: 1, + maker: 1, + orderedat: -1, createdat: -1 }); mongoose.model('Torrent', TorrentSchema); mongoose.model('Comment', CommentSchema); -//mongoose.model('Thumb', ThumbSchema); mongoose.model('Rating', RatingSchema); diff --git a/modules/traces/server/models/trace.server.model.js b/modules/traces/server/models/trace.server.model.js index 23be2301..3327bf18 100644 --- a/modules/traces/server/models/trace.server.model.js +++ b/modules/traces/server/models/trace.server.model.js @@ -21,4 +21,7 @@ var TraceSchema = new Schema({ } }, {usePushEach: true}); +TraceSchema.index({createdat: -1}); +TraceSchema.index({'content.action': -1}); + mongoose.model('Trace', TraceSchema); diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index 32298d44..221a3182 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -543,10 +543,6 @@ UserSchema.statics.generateRandomPassphrase = function () { }); }; -UserSchema.statics.seed = seed; - -mongoose.model('User', UserSchema); - /** * Seeds the User collection with document (User) * and provided options. @@ -632,3 +628,21 @@ function seed(doc, options) { }); } + +UserSchema.statics.seed = seed; + +UserSchema.index({passkey: 1}); +UserSchema.index({email: 1}); +UserSchema.index({uptotal: 1}); +UserSchema.index({status: 1, uploaded: -1, downloaded: -1, ratio: -1, score: -1}); +UserSchema.index({status: 1, downloaded: -1, uploaded: -1, ratio: -1, score: -1}); +UserSchema.index({status: 1, score: -1, uploaded: -1, downloaded: -1, ratio: -1}); +UserSchema.index({status: 1, ratio: -1, uploaded: -1, downloaded: -1, score: -1}); +UserSchema.index({isVip: 1, username: 1, displayName: 1, email: 1, created: -1}); +UserSchema.index({roles: 1, username: 1, displayName: 1, email: 1, created: -1}); +UserSchema.index({status: 1, username: 1, displayName: 1, email: 1, created: -1}); +UserSchema.index({username: 1, email: 1}); +UserSchema.index({resetPasswordToken: 1, resetPasswordExpires: 1}); +UserSchema.index({signUpActiveToken: 1, status: 1, signUpActiveExpires: 1}); + +mongoose.model('User', UserSchema);