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
|
@ -24,12 +24,14 @@
|
|||
{
|
||||
version: "1.0",
|
||||
migrate: function(transaction, next) {
|
||||
console.log('migratetion 1.0');
|
||||
console.log('migration 1.0');
|
||||
var messages = transaction.db.createObjectStore("messages");
|
||||
messages.createIndex("conversation", "conversationId", { unique: false });
|
||||
messages.createIndex("conversation", ["conversationId", "received_at"], { unique: false });
|
||||
messages.createIndex("receipt", "sent_at", { unique: false });
|
||||
|
||||
var conversations = transaction.db.createObjectStore("conversations");
|
||||
conversations.createIndex("timestamp", "timestamp", { unique: false });
|
||||
conversations.createIndex("inbox", "active_at", { unique: false });
|
||||
conversations.createIndex("group", "members", { unique: false, multiEntry: true });
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue