From 9792193e605a8df8989c36e1e4edad25464aa442 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Mon, 18 Jul 2016 22:38:38 +0200 Subject: Add MongoDB indexes These indexes will optimize the queries that are used in the board and card views. Fixes #524. --- models/activities.js | 10 ++++++---- models/cards.js | 6 ++++++ models/lists.js | 4 ++++ 3 files changed, 16 insertions(+), 4 deletions(-) (limited to 'models') diff --git a/models/activities.js b/models/activities.js index ad920149..aa2ea3ec 100644 --- a/models/activities.js +++ b/models/activities.js @@ -41,12 +41,14 @@ Activities.before.insert((userId, doc) => { doc.createdAt = new Date(); }); -// For efficiency create an index on the date of creation. if (Meteor.isServer) { + // For efficiency create indexes on the date of creation, and on the date of + // creation in conjunction with the card or board id, as corresponding views + // are largely used in the App. See #524. Meteor.startup(() => { - Activities._collection._ensureIndex({ - createdAt: -1, - }); + Activities._collection._ensureIndex({ createdAt: -1 }); + Activities._collection._ensureIndex({ cardId: 1, createdAt: -1 }); + Activities._collection._ensureIndex({ boardId: 1, createdAt: -1 }); }); Activities.after.insert((userId, doc) => { diff --git a/models/cards.js b/models/cards.js index aa19a64a..84fbb6c2 100644 --- a/models/cards.js +++ b/models/cards.js @@ -210,6 +210,12 @@ Cards.mutations({ }); if (Meteor.isServer) { + // Cards are often fetched within a board, so we create an index to make these + // queries more efficient. + Meteor.startup(() => { + Cards._collection._ensureIndex({ boardId: 1 }); + }); + Cards.after.insert((userId, doc) => { Activities.insert({ userId, diff --git a/models/lists.js b/models/lists.js index a4938f67..9ae2e4f7 100644 --- a/models/lists.js +++ b/models/lists.js @@ -91,6 +91,10 @@ Lists.mutations({ Lists.hookOptions.after.update = { fetchPrevious: false }; if (Meteor.isServer) { + Meteor.startup(() => { + Lists._collection._ensureIndex({ boardId: 1 }); + }); + Lists.after.insert((userId, doc) => { Activities.insert({ userId, -- cgit v1.2.3-1-g7c22