Server Data Stores
One common question when configuring Statsig is how to design your integration around handling potential points of failure. For example - in case of a Statsig API outage, can my integration continue to function?
The short answer is yes. Your server SDK will continue to operate normally, serving the most recent set of known values in response to calls like checkGate
, getConfig
, getExperiment
, and getLayer
.
Once the api is back up and operating normally, your SDK will automatically refetch the most up to date version of your project.
But what about spinning up a new server, or a new SDK instance, while Statsig is down?
This is what we built the DataAdapter
/DataStore
for.
DataAdapter (or DataStore)
DataAdapters allow you to plug in your own storage solution as a cache that the Statsig Server SDKs use to load your project configurations (ie; all experiments, configs, gates and their targeting/allocation rules). Some of the key use-cases for Data Adapter are: reducing dependency on Statsig servers for initialization, improving initialization time by loading config from a local data store, and providing customers with controls for minimizing network I/O. Data Adapters define a simple API that you have to implement: initialize
, get
, set
, and shutdown
for setup, reading, writing, and closing.
Data Adapter Logic
- When the Statsig SDK is initialized with a DataAdapter, it will rely on the DataAdapter as the source of truth for your project config. The SDK client will attempt to load config via
DataAdapter.get
and use that if the entry is available, but if entry does not exist, will fetch an updated config over network from Statsig and write that back to the data store (viaDataAdapter.set
) - Post-initialization, the SDK will continue to poll Statsig servers for updates and whenever it fetches an updated version of the config, it will save it to your data store via
DataAdapter.set
, unless you explicitly configure the DataAdapter to be used as the source of truth for polling (by implementing thesupportsPollingUpdatesFor
method on the adapter to returntrue
). - If the SDK client is initialized with
localMode=true
, this will disable fallback to fetching the config across the network from Statsig. - The cache key is
statsig.cache
for config specs,statsig.id_lists
for lookup of id lists, andstatsig.id_lists::{list_name}
for for actual id lists.
NOTE: Most DataAdapters are currently only used for the initialize
path for getting a project definition.
At the time of this writing, only Node.js
, Ruby
, Go
, Java
and .NET
support polling for updates. If you're interested in using a DataAdapter as the source of truth indefinitely, please reach out and let us know which language this would be useful for!
For information on your specific SDK language, see the language specific docs in the left hand column.