From 3cd6ea5b1764800f9c711d27de09de7f446f8aec Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sun, 26 Jun 2011 21:10:16 -0500 Subject: [PATCH] A base set of indexes for us to use with our new indexing tool. --- mediagoblin/db/indexes.py | 103 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 mediagoblin/db/indexes.py diff --git a/mediagoblin/db/indexes.py b/mediagoblin/db/indexes.py new file mode 100644 index 00000000..4e99b8c8 --- /dev/null +++ b/mediagoblin/db/indexes.py @@ -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 . + +""" +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 = [] -- 2.25.1