DB/Index Redux

This change removes the timestamp field from messages and conversations
in favor of multiple semantically named timestamp fields: sent_at,
received_at on messages; active_at on conversations. This requires/lets
us rethink and improve our indexing scheme thusly:

The inbox index on conversations will order entries by the
conversation.active_at property, which should only appear on
conversations destined for the inbox.

The receipt index will use the message.sent_at property, for effecient
lookup of outgoing messages by timestamp, for use in processing delivery
receipts.

The group index on conversation.members is multi-entry, meaning that
looking up any phone number in this index will efficiently yield all
groups the number belongs to.

The conversation index lets us scan messages in a single conversation,
in the order they were received (or the reverse order). It is a compound
index on [conversationId, received_at].
This commit is contained in:
lilia 2014-12-11 19:41:40 -08:00
parent 9c736df7d0
commit 006653ed8e
5 changed files with 58 additions and 35 deletions

View file

@ -32,11 +32,15 @@
collection : this.conversations
});
this.conversations.fetch({ reset: true }).then(function() {
this.conversations.reset(
//TODO: Add an index to support this operation at the db level
this.conversations.filter(function(c) { return c.get('active'); })
);
this.conversations.fetch({
index: {
name: 'inbox', // 'inbox' index on active_at
order: 'desc' // ORDER timestamp DESC
},
reset: true
// TODO pagination/infinite scroll
// limit: 10, offset: page*10,
}).then(function() {
if (this.conversations.length) {
this.conversations.at(0).trigger('render');
}