Skip to content

Supporting multiple online feature stores #2383

@alexjajones

Description

@alexjajones

Is your feature request related to a problem? Please describe.
We are seeing that ML feature teams want to own their feature projections and not rely on a single global online feature store with the most common reason being reduction of blast radius.

Describe the solution you'd like
A way to create projections of a subset of feature views to specific online stores.

Describe alternatives you've considered
I was pointed towards attempting to implement the requested feature using a custom provider which I managed to get working, albeit rather hacky. I've only focused on fanning out the writing of features.

class ManyOnlineStoresPassthroughConfig(RepoConfig):
    online_stores: List[dict]

class ManyOnlineStoresPassthroughProvider(PassthroughProvider):
    def online_write_batch(self, config: ManyOnlineStoresPassthroughConfig, table: FeatureView, *args, **kwargs) -> None:
        """
        Writes feature view to all subscribers
        """
        feature_view_subscribers = [store for store in config.online_stores if table.name in store["view_subscriptions"]]

        for store in feature_view_subscribers:
            print(f"{table.name} online write to subscriber {store['name']}")

            config.online_store = get_online_config_from_type(store["type"])(**store)
            self.online_store = get_online_store_from_config(config.online_store)

            return super().online_write_batch(config, table, *args, **kwargs)

With the config update of

project: aaaa
registry: gs://temp-feast-dev/dev/registry.db
provider: providers.custom_provider.ManyOnlineStoresPassthroughProvider

offline_store:
  type: bigquery
  dataset: temp_feast-dev
  project_id: abc
  location: EU

online_stores:
  - name: "lovely"
    type: redis
    redis_type: redis
    connection_string: "blah"
    view_subscriptions: ["feature_view_1"]

  - name: "lovely"
    type: redis
    redis_type: redis
    connection_string: "abc"
    view_subscriptions: ["feature_view_1", "feature_view_2"]

There's still some unknowns around retrieving the online features as we'd need a way of knowing what projection should be used.

Happy to help wherever I can!

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions