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:
parent
9c736df7d0
commit
006653ed8e
5 changed files with 58 additions and 35 deletions
|
@ -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');
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue