Przeglądaj źródła

Add MongoDB indexes

These indexes will optimize the queries that are used in the board and card
views.

Fixes #524.
Maxime Quandalle 9 lat temu
rodzic
commit
9792193e60
3 zmienionych plików z 16 dodań i 4 usunięć
  1. 6 4
      models/activities.js
  2. 6 0
      models/cards.js
  3. 4 0
      models/lists.js

+ 6 - 4
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) => {

+ 6 - 0
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,

+ 4 - 0
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,