diff options
author | Till Faelligen <2353100+S7evinK@users.noreply.github.com> | 2023-02-24 11:45:01 +0100 |
---|---|---|
committer | Till Faelligen <2353100+S7evinK@users.noreply.github.com> | 2023-02-24 11:45:01 +0100 |
commit | 3d31b131fc6b66e25b09c41204ea71ed4a47dcc6 (patch) | |
tree | bdb03a03036817cec08e3d034e70e898e4e65ab0 /roomserver | |
parent | ad07b169b8a58b5a843b7b19ff0a989399d0aea0 (diff) |
Cache all the things
Diffstat (limited to 'roomserver')
-rw-r--r-- | roomserver/storage/shared/storage.go | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go index 7eb4567f..aac5bc36 100644 --- a/roomserver/storage/shared/storage.go +++ b/roomserver/storage/shared/storage.go @@ -68,12 +68,25 @@ func (d *Database) eventTypeNIDs( ctx context.Context, txn *sql.Tx, eventTypes []string, ) (map[string]types.EventTypeNID, error) { result := make(map[string]types.EventTypeNID) - nids, err := d.EventTypesTable.BulkSelectEventTypeNID(ctx, txn, eventTypes) - if err != nil { - return nil, err + // first try the cache + fetchEventTypes := make([]string, 0, len(eventTypes)) + for _, eventType := range eventTypes { + eventTypeNID, ok := d.Cache.GetEventTypeKey(eventType) + if ok { + result[eventType] = eventTypeNID + continue + } + fetchEventTypes = append(fetchEventTypes, eventType) } - for eventType, nid := range nids { - result[eventType] = nid + if len(fetchEventTypes) > 0 { + nids, err := d.EventTypesTable.BulkSelectEventTypeNID(ctx, txn, fetchEventTypes) + if err != nil { + return nil, err + } + for eventType, nid := range nids { + result[eventType] = nid + d.Cache.StoreEventTypeKey(nid, eventType) + } } return result, nil } @@ -90,13 +103,15 @@ func (d *Database) EventStateKeys( fetch = append(fetch, nid) } } - fromDB, err := d.EventStateKeysTable.BulkSelectEventStateKey(ctx, nil, fetch) - if err != nil { - return nil, err - } - for nid, key := range fromDB { - result[nid] = key - d.Cache.StoreEventStateKey(nid, key) + if len(fetch) > 0 { + fromDB, err := d.EventStateKeysTable.BulkSelectEventStateKey(ctx, nil, fetch) + if err != nil { + return nil, err + } + for nid, key := range fromDB { + result[nid] = key + d.Cache.StoreEventStateKey(nid, key) + } } return result, nil } @@ -130,6 +145,7 @@ func (d *Database) eventStateKeyNIDs( } for eventStateKey, nid := range nids { result[eventStateKey] = nid + d.Cache.StoreEventStateKey(nid, eventStateKey) } } |