diff options
author | Maxime Quandalle <mquandalle@wekan.io> | 2016-07-18 22:38:38 +0200 |
---|---|---|
committer | Maxime Quandalle <mquandalle@wekan.io> | 2016-07-18 22:38:38 +0200 |
commit | 9792193e605a8df8989c36e1e4edad25464aa442 (patch) | |
tree | 248750df6e619afc20c4fdc848da63a3d3c526a3 | |
parent | 81a35be8562cb6c28848afc2cb24ae9ec145ce47 (diff) | |
download | wekan-9792193e605a8df8989c36e1e4edad25464aa442.tar.gz wekan-9792193e605a8df8989c36e1e4edad25464aa442.tar.bz2 wekan-9792193e605a8df8989c36e1e4edad25464aa442.zip |
Add MongoDB indexes
These indexes will optimize the queries that are used in the board and card
views.
Fixes #524.
-rw-r--r-- | models/activities.js | 10 | ||||
-rw-r--r-- | models/cards.js | 6 | ||||
-rw-r--r-- | models/lists.js | 4 |
3 files changed, 16 insertions, 4 deletions
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, |