Categorygithub.com/leetcode-opensource/dataloader
modulepackage
4.1.0+incompatible
Repository: https://github.com/leetcode-opensource/dataloader.git
Documentation: pkg.go.dev

# README

DataLoader

GoDoc Build Status codecov

This is an implementation of Facebook's DataLoader in Golang.

Status

This project is a work in progress. Feedback is encouraged.

Install

go get -u gopkg.in/nicksrandall/dataloader.v4

Usage

// setup batch function
batchFn := func(ctx context.Context, keys []string) []*dataloader.Result {
  var results []*dataloader.Result
  // do some aync work to get data for specified keys
  // append to this list resolved values
  return results
}

// create Loader with an in-memory cache
loader := dataloader.NewBatchedLoader(batchFn)

/**
 * Use loader
 *
 * A thunk is a function returned from a function that is a
 * closure over a value (in this case an interface value and error).
 * When called, it will block until the value is resolved.
 */
thunk := loader.Load(ctx.TODO(), "key1")
result, err := thunk()
if err != nil {
  // handle data error
}

log.Printf("value: %#v", result)

Upgrade from v1 to v2

The only difference between v1 and v2 is that we added use of context.

- loader.Load(key string) Thunk
+ loader.Load(ctx context.Context, key string) Thunk
- loader.LoadMany(keys []string) ThunkMany
+ loader.LoadMany(ctx context.Context, keys []string) ThunkMany
- type BatchFunc func([]string) []*Result
+ type BatchFunc func(context.Context, []string) []*Result

Upgrade from v2 to v3

// dataloader.Interface as added context.Context to methods
- loader.Prime(key string, value interface{}) Interface
+ loader.Prime(ctx context.Context, key string, value interface{}) Interface
- loader.Clear(key string) Interface
+ loader.Clear(ctx context.Context, key string) Interface
// cache interface as added context.Context to methods
type Cache interface {
-	Get(string) (Thunk, bool)
+	Get(context.Context, string) (Thunk, bool)
-	Set(string, Thunk)
+	Set(context.Context, string, Thunk)
-	Delete(string) bool
+	Delete(context.Context, string) bool
	Clear()
}

Upgrade from v3 to v4

// dataloader.Interface as now allows interace{} as key rather than string
- loader.Load(context.Context, key string) Thunk
+ loader.Load(ctx context.Context, key interface{}) Thunk
- loader.LoadMany(context.Context, key []string) ThunkMany
+ loader.LoadMany(ctx context.Context, keys []interface{}) ThunkMany
- loader.Prime(context.Context, key string, value interface{}) Interface
+ loader.Prime(ctx context.Context, key interface{}, value interface{}) Interface
- loader.Clear(context.Context, key string) Interface
+ loader.Clear(ctx context.Context, key interface{}) Interface
// cache interface now allows interface{} as key instead of string
type Cache interface {
-	Get(context.Context, string) (Thunk, bool)
+	Get(context.Context, interface{}) (Thunk, bool)
-	Set(context.Context, string, Thunk)
+	Set(context.Context, interface{}, Thunk)
-	Delete(context.Context, string) bool
+	Delete(context.Context, interface{}) bool
	Clear()
}

Don't need/want to use context?

You're welcome to install the v1 version of this library.

Cache

This implementation contains a very basic cache that is intended only to be used for short lived DataLoaders (i.e. DataLoaders that ony exsist for the life of an http request). You may use your own implementation if you want.

it also has a NoCache type that implements the cache interface but all methods are noop. If you do not wish to cache anyting.

Examples

There are a few basic examples in the example folder.

# Packages

No description provided by the author

# Functions

NewBatchedLoader constructs a new Loader with given options.
NewCache constructs a new InMemoryCache.
WithBatchCapacity sets the batch capacity.
WithCache sets the BatchedLoader cache.
WithClearCacheOnBatch allows batching of items but no long term caching.
WithInputCapacity sets the input capacity.
WithOpenTracingTracer allows tracing of calls to Load and LoadMany.
WithTracer allows tracing of calls to Load and LoadMany.
WithWait sets the amount of time to wait before triggering a batch.

# Structs

InMemoryCache is an in memory implementation of Cache interface.
Loader implements the dataloader.Interface.
NoCache implements Cache interface where all methods are noops.
NoopTracer is the default (noop) tracer.
OpenTracing Tracer implements a tracer that can be used with the Open Tracing standard.
Result is the data structure that a BatchFunc returns.
ResultMany is used by the LoadMany method.

# Interfaces

The Cache interface.
Interface is a `DataLoader` Interface which defines a public API for loading data from a particular data back-end with unique keys such as the `id` column of a SQL table or document name in a MongoDB database, given a batch loading function.
Tracer is an interface that may be used to implement tracing.

# Type aliases

BatchFunc is a function, which when given a slice of keys (string), returns an slice of `results`.
Option allows for configuration of Loader fields.
Thunk is a function that will block until the value (*Result) it contins is resolved.
ThunkMany is much like the Thunk func type but it contains a list of results.
No description provided by the author
No description provided by the author
No description provided by the author