dataloader - set maxBatch to 200 and wait to 2 milliseconds

This commit is contained in:
Dawid Wysokiński 2021-05-10 23:15:55 +02:00
parent 9516140c0f
commit 44c90d0efc
13 changed files with 51 additions and 51 deletions

View File

@ -1,4 +1,4 @@
package dataloaders
package dataloader
import (
"context"
@ -12,10 +12,11 @@ import (
)
const (
wait = 4 * time.Millisecond
wait = 2 * time.Millisecond
maxBatch = 200
)
type DataLoaders struct {
type DataLoader struct {
VersionByCode *VersionLoader
}
@ -26,11 +27,11 @@ type Config struct {
VersionRepo version.Repository
}
func NewDataLoaders(cfg Config) *DataLoaders {
return &DataLoaders{
func NewDataLoader(cfg Config) *DataLoader {
return &DataLoader{
VersionByCode: &VersionLoader{
wait: wait,
maxBatch: 0,
maxBatch: maxBatch,
fetch: func(keys []string) ([]*twmodel.Version, []error) {
var codes []twmodel.VersionCode
for _, code := range keys {

View File

@ -1,6 +1,6 @@
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package dataloaders
package dataloader
import (
"github.com/tribalwarshelp/shared/tw/twmodel"

View File

@ -1,6 +1,6 @@
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package dataloaders
package dataloader
import (
"github.com/tribalwarshelp/shared/tw/twmodel"

View File

@ -1,6 +1,6 @@
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package dataloaders
package dataloader
import (
"sync"

View File

@ -1,4 +1,4 @@
package dataloaders
package dataloader
import (
"context"
@ -9,17 +9,17 @@ import (
"github.com/tribalwarshelp/api/village"
)
type ServerDataLoaders struct {
type ServerDataLoader struct {
PlayerByID *PlayerLoader
TribeByID *TribeLoader
VillageByID *VillageLoader
}
func NewServerDataLoaders(server string, cfg Config) *ServerDataLoaders {
return &ServerDataLoaders{
func NewServerDataLoader(server string, cfg Config) *ServerDataLoader {
return &ServerDataLoader{
PlayerByID: &PlayerLoader{
wait: wait,
maxBatch: 0,
maxBatch: maxBatch,
fetch: func(ids []int) ([]*twmodel.Player, []error) {
players, _, err := cfg.PlayerRepo.Fetch(context.Background(), player.FetchConfig{
Filter: &twmodel.PlayerFilter{
@ -47,7 +47,7 @@ func NewServerDataLoaders(server string, cfg Config) *ServerDataLoaders {
},
TribeByID: &TribeLoader{
wait: wait,
maxBatch: 0,
maxBatch: maxBatch,
fetch: func(ids []int) ([]*twmodel.Tribe, []error) {
tribes, _, err := cfg.TribeRepo.Fetch(context.Background(), tribe.FetchConfig{
Server: server,
@ -75,7 +75,7 @@ func NewServerDataLoaders(server string, cfg Config) *ServerDataLoaders {
},
VillageByID: &VillageLoader{
wait: wait,
maxBatch: 0,
maxBatch: maxBatch,
fetch: func(ids []int) ([]*twmodel.Village, []error) {
villages, _, err := cfg.VillageRepo.Fetch(context.Background(), village.FetchConfig{
Server: server,

View File

@ -1,6 +1,6 @@
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package dataloaders
package dataloader
import (
"github.com/tribalwarshelp/shared/tw/twmodel"

View File

@ -1,20 +1,20 @@
package dataloaders
package dataloader
import (
"context"
"github.com/tribalwarshelp/shared/tw/twmodel"
)
type VersionDataLoaders struct {
type VersionDataLoader struct {
PlayerServersByID *PlayerServersLoader
PlayerNameChangesByID *PlayerNameChangesLoader
}
func NewVersionDataLoaders(versionCode twmodel.VersionCode, cfg Config) *VersionDataLoaders {
return &VersionDataLoaders{
func NewVersionDataLoader(versionCode twmodel.VersionCode, cfg Config) *VersionDataLoader {
return &VersionDataLoader{
PlayerServersByID: &PlayerServersLoader{
wait: wait,
maxBatch: 0,
maxBatch: maxBatch,
fetch: func(keys []int) ([][]string, []error) {
playerServersByID, err := cfg.PlayerRepo.FetchPlayerServers(context.Background(), versionCode, keys...)
if err != nil {
@ -29,7 +29,7 @@ func NewVersionDataLoaders(versionCode twmodel.VersionCode, cfg Config) *Version
},
PlayerNameChangesByID: &PlayerNameChangesLoader{
wait: wait,
maxBatch: 0,
maxBatch: maxBatch,
fetch: func(keys []int) ([][]*twmodel.PlayerNameChange, []error) {
playerNameChangesByID, err := cfg.PlayerRepo.FetchNameChanges(context.Background(), versionCode, keys...)
if err != nil {

View File

@ -1,6 +1,6 @@
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package dataloaders
package dataloader
import (
"github.com/tribalwarshelp/shared/tw/twmodel"

View File

@ -1,6 +1,6 @@
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package dataloaders
package dataloader
import (
"github.com/tribalwarshelp/shared/tw/twmodel"

View File

@ -49,7 +49,6 @@ func graphqlHandler(cfg generated.Config) gin.HandlerFunc {
srv.AddTransport(transport.GET{})
srv.AddTransport(transport.POST{})
srv.AddTransport(transport.MultipartForm{})
srv.Use(extension.Introspection{})
srv.Use(extension.AutomaticPersistedQuery{
Cache: lru.New(100),

View File

@ -12,7 +12,7 @@ import (
)
func (r *serverResolver) Version(ctx context.Context, obj *twmodel.Server) (*twmodel.Version, error) {
loaders := middleware.DataLoadersFromContext(ctx)
loaders := middleware.DataLoaderFromContext(ctx)
if loaders != nil {
lv, _ := loaders.VersionByCode.Load(obj.VersionCode.String())
return lv, nil

View File

@ -18,7 +18,7 @@ import (
httpdelivery "github.com/tribalwarshelp/api/graphql/delivery/http"
"github.com/tribalwarshelp/api/graphql/resolvers"
"github.com/tribalwarshelp/api/graphql/dataloaders"
"github.com/tribalwarshelp/api/graphql/dataloader"
dailyplayerstatsrepo "github.com/tribalwarshelp/api/dailyplayerstats/repository"
dailyplayerstatsucase "github.com/tribalwarshelp/api/dailyplayerstats/usecase"
@ -132,7 +132,7 @@ func main() {
middleware.DataLoadersToContextConfig{
ServerRepo: serverRepo,
},
dataloaders.Config{
dataloader.Config{
PlayerRepo: playerRepo,
TribeRepo: tribeRepo,
VillageRepo: villageRepo,

View File

@ -10,23 +10,23 @@ import (
"github.com/gin-gonic/gin"
"github.com/tribalwarshelp/api/graphql/dataloaders"
"github.com/tribalwarshelp/api/graphql/dataloader"
"github.com/tribalwarshelp/api/server"
)
var serverDataLoadersContextKey ContextKey = "serverDataLoaders"
var versionLoadersContextKey ContextKey = "versionLoaders"
var dataloadersContextKey ContextKey = "dataloaders"
var versionDataLoadersContextKey ContextKey = "versionLoaders"
var dataLoaderContextKey ContextKey = "dataloader"
type DataLoadersToContextConfig struct {
ServerRepo server.Repository
}
func DataLoadersToContext(dltcc DataLoadersToContextConfig, cfg dataloaders.Config) gin.HandlerFunc {
func DataLoadersToContext(dltcc DataLoadersToContextConfig, cfg dataloader.Config) gin.HandlerFunc {
return func(c *gin.Context) {
ctx := c.Request.Context()
serverDataLoaders := make(map[string]*dataloaders.ServerDataLoaders)
versionDataLoaders := make(map[twmodel.VersionCode]*dataloaders.VersionDataLoaders)
serverDataLoaders := make(map[string]*dataloader.ServerDataLoader)
versionDataLoaders := make(map[twmodel.VersionCode]*dataloader.VersionDataLoader)
servers, _, err := dltcc.ServerRepo.Fetch(c.Request.Context(), server.FetchConfig{
Columns: []string{strutil.Underscore("versionCode"), "key"},
Select: true,
@ -39,54 +39,54 @@ func DataLoadersToContext(dltcc DataLoadersToContextConfig, cfg dataloaders.Conf
return
}
for _, serv := range servers {
serverDataLoaders[serv.Key] = dataloaders.NewServerDataLoaders(serv.Key, cfg)
serverDataLoaders[serv.Key] = dataloader.NewServerDataLoader(serv.Key, cfg)
if _, ok := versionDataLoaders[serv.VersionCode]; !ok {
versionDataLoaders[serv.VersionCode] = dataloaders.NewVersionDataLoaders(serv.VersionCode, cfg)
versionDataLoaders[serv.VersionCode] = dataloader.NewVersionDataLoader(serv.VersionCode, cfg)
}
}
ctx = StoreServerDataLoadersInContext(ctx, serverDataLoaders)
ctx = StoreVersionDataLoadersInContext(ctx, versionDataLoaders)
ctx = StoreDataLoadersInContext(ctx, dataloaders.NewDataLoaders(cfg))
ctx = StoreDataLoaderInContext(ctx, dataloader.NewDataLoader(cfg))
c.Request = c.Request.WithContext(ctx)
c.Next()
}
}
func StoreServerDataLoadersInContext(ctx context.Context, loaders map[string]*dataloaders.ServerDataLoaders) context.Context {
func StoreServerDataLoadersInContext(ctx context.Context, loaders map[string]*dataloader.ServerDataLoader) context.Context {
return context.WithValue(ctx, serverDataLoadersContextKey, loaders)
}
func ServerDataLoadersFromContext(ctx context.Context) map[string]*dataloaders.ServerDataLoaders {
func ServerDataLoadersFromContext(ctx context.Context) map[string]*dataloader.ServerDataLoader {
dl := ctx.Value(serverDataLoadersContextKey)
if dl == nil {
return nil
}
return dl.(map[string]*dataloaders.ServerDataLoaders)
return dl.(map[string]*dataloader.ServerDataLoader)
}
func StoreVersionDataLoadersInContext(ctx context.Context, loaders map[twmodel.VersionCode]*dataloaders.VersionDataLoaders) context.Context {
return context.WithValue(ctx, versionLoadersContextKey, loaders)
func StoreVersionDataLoadersInContext(ctx context.Context, loaders map[twmodel.VersionCode]*dataloader.VersionDataLoader) context.Context {
return context.WithValue(ctx, versionDataLoadersContextKey, loaders)
}
func VersionDataLoadersFromContext(ctx context.Context) map[twmodel.VersionCode]*dataloaders.VersionDataLoaders {
dl := ctx.Value(versionLoadersContextKey)
func VersionDataLoadersFromContext(ctx context.Context) map[twmodel.VersionCode]*dataloader.VersionDataLoader {
dl := ctx.Value(versionDataLoadersContextKey)
if dl == nil {
return nil
}
return dl.(map[twmodel.VersionCode]*dataloaders.VersionDataLoaders)
return dl.(map[twmodel.VersionCode]*dataloader.VersionDataLoader)
}
func StoreDataLoadersInContext(ctx context.Context, loaders *dataloaders.DataLoaders) context.Context {
return context.WithValue(ctx, dataloadersContextKey, loaders)
func StoreDataLoaderInContext(ctx context.Context, loaders *dataloader.DataLoader) context.Context {
return context.WithValue(ctx, dataLoaderContextKey, loaders)
}
func DataLoadersFromContext(ctx context.Context) *dataloaders.DataLoaders {
dl := ctx.Value(dataloadersContextKey)
func DataLoaderFromContext(ctx context.Context) *dataloader.DataLoader {
dl := ctx.Value(dataLoaderContextKey)
if dl == nil {
return nil
}
return dl.(*dataloaders.DataLoaders)
return dl.(*dataloader.DataLoader)
}