diff options
author | 2023-08-10 15:08:41 +0100 | |
---|---|---|
committer | 2023-08-10 15:08:41 +0100 | |
commit | 91cbcd589e7c4ab87e5994e4d0276ea1248dc5c2 (patch) | |
tree | a6b12c30168eb5fed4267dcb6a1f385b86afdcdf /internal/cache/gts.go | |
parent | [feature] List replies policy, refactor async workers (#2087) (diff) | |
download | gotosocial-91cbcd589e7c4ab87e5994e4d0276ea1248dc5c2.tar.xz |
[performance] remove last of relational queries to instead rely on caches (#2091)
Diffstat (limited to 'internal/cache/gts.go')
-rw-r--r-- | internal/cache/gts.go | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/internal/cache/gts.go b/internal/cache/gts.go index f120bcf4e..8d7ebcd98 100644 --- a/internal/cache/gts.go +++ b/internal/cache/gts.go @@ -32,6 +32,7 @@ import ( type GTSCaches struct { account *result.Cache[*gtsmodel.Account] accountNote *result.Cache[*gtsmodel.AccountNote] + application *result.Cache[*gtsmodel.Application] block *result.Cache[*gtsmodel.Block] blockIDs *SliceCache[string] boostOfIDs *SliceCache[string] @@ -67,6 +68,7 @@ type GTSCaches struct { func (c *GTSCaches) Init() { c.initAccount() c.initAccountNote() + c.initApplication() c.initBlock() c.initBlockIDs() c.initBoostOfIDs() @@ -117,6 +119,11 @@ func (c *GTSCaches) AccountNote() *result.Cache[*gtsmodel.AccountNote] { return c.accountNote } +// Application provides access to the gtsmodel Application database cache. +func (c *GTSCaches) Application() *result.Cache[*gtsmodel.Application] { + return c.application +} + // Block provides access to the gtsmodel Block (account) database cache. func (c *GTSCaches) Block() *result.Cache[*gtsmodel.Block] { return c.block @@ -303,6 +310,26 @@ func (c *GTSCaches) initAccountNote() { c.accountNote.IgnoreErrors(ignoreErrors) } +func (c *GTSCaches) initApplication() { + // Calculate maximum cache size. + cap := calculateResultCacheMax( + sizeofApplication(), // model in-mem size. + config.GetCacheApplicationMemRatio(), + ) + log.Infof(nil, "Application cache size = %d", cap) + + c.application = result.New([]result.Lookup{ + {Name: "ID"}, + {Name: "ClientID"}, + }, func(a1 *gtsmodel.Application) *gtsmodel.Application { + a2 := new(gtsmodel.Application) + *a2 = *a1 + return a2 + }, cap) + + c.application.IgnoreErrors(ignoreErrors) +} + func (c *GTSCaches) initBlock() { // Calculate maximum cache size. cap := calculateResultCacheMax( |