A base set of indexes for us to use with our new indexing tool.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Mon, 27 Jun 2011 02:10:16 +0000 (21:10 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Mon, 27 Jun 2011 02:10:16 +0000 (21:10 -0500)
mediagoblin/db/indexes.py [new file with mode: 0644]

diff --git a/mediagoblin/db/indexes.py b/mediagoblin/db/indexes.py
new file mode 100644 (file)
index 0000000..4e99b8c
--- /dev/null
@@ -0,0 +1,103 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 Free Software Foundation, Inc
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Indexes for the local database.
+
+Indexes are recorded in the following format:
+
+INDEXES = {
+    'identifier': {  # key identifier used for possibly deprecating later
+       'collection': 'thiscollection',
+       'index': [index_foo_goes_here]}}
+
+... and anything else being parameters to the create_index function
+(including unique=True, etc)
+
+Current indexes must be registered in ACTIVE_INDEXES... deprecated
+indexes should be marked in DEPRECATED_INDEXES.
+
+Remember, ordering of compound indexes MATTERS.  Read below for more.
+
+REQUIRED READING:
+ - http://kylebanker.com/blog/2010/09/21/the-joy-of-mongodb-indexes/
+ - http://www.mongodb.org/display/DOCS/Indexes
+ - http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ
+"""
+
+from pymongo import ASCENDING, DESCENDING
+
+
+################
+# Active indexes
+################
+ACTIVE_INDEXES = {}
+
+# MediaEntry indexes
+# ------------------
+
+MEDIAENTRY_INDEXES = {
+    'mediaentry_uploader_slug_unique': {
+        # Matching an object to an uploader + slug.
+        # MediaEntries are unique on these two combined, eg:
+        #   /u/${myuser}/m/${myslugname}/
+        'collection': 'media_entries',
+        'index': [('uploader', ASCENDING),
+                  ('slug', ASCENDING)],
+        'unique': True},
+
+    'mediaentry_created': {
+        # A global index for all media entries created, in descending
+        # order.  This is used for the site's frontpage.
+        'collection': 'media_entries',
+        'index': [('created', DESCENDING)]},
+
+    'mediaentry_uploader_created': {
+        # Indexing on uploaders and when media entries are created.
+        # Used for showing a user gallery, etc.
+        'collection': 'media_entries',
+        'index': [('uploader', ASCENDING),
+                  ('created', DESCENDING)]}}
+
+
+ACTIVE_INDEXES.update(
+    [MEDIAENTRY_INDEXES])
+
+
+# User indexes
+# ------------
+
+USER_INDEXES = {
+    'user_username_unique': {
+        # Index usernames, and make sure they're unique.
+        # ... I guess we might need to adjust this once we're federated :)
+        'collection': 'users',
+        'index': 'username'},
+    'user_created': {
+        # All most recently created users
+        'collection': 'users',
+        'index': 'created'}}
+    
+
+ACTIVE_INDEXES.update(
+    [USER_INDEXES])
+
+
+####################
+# Deprecated indexes
+####################
+
+DEPRECATED_INDEXES = []