# Overview

## Functionality

Here are the methods exposed by the `OnlineStore` interface, along with the core functionality supported by the method:
* `online_write_batch`: write feature values to the online store
* `online_read`: read feature values from the online store
* `update`: update infrastructure (e.g. tables) in the online store
* `teardown`: teardown infrastructure (e.g. tables) in the online store
* `plan`: generate a plan of infrastructure changes based on feature repo changes

There is also additional functionality not properly captured by these interface methods:
* support for on-demand transforms
* readable by Python SDK
* readable by Java
* readable by Go
* support for entityless feature views
* support for concurrent writing to the same key
* support for ttl (time to live) at retrieval
* support for deleting expired data

Finally, there are multiple data models for storing the features in the online store. For example, features could be:
* collocated by feature view
* collocated by feature service
* collocated by entity key

See this [issue](https://github.com/feast-dev/feast/issues/2254) for a discussion around the tradeoffs of each of these data models.

## Functionality Matrix

There are currently five core online store implementations: `SqliteOnlineStore`, `RedisOnlineStore`, `DynamoDBOnlineStore`, `SnowflakeOnlineStore`, and `DatastoreOnlineStore`.
There are several additional implementations contributed by the Feast community  (`PostgreSQLOnlineStore`, `HbaseOnlineStore`, and `CassandraOnlineStore`), which are not guaranteed to be stable or to match the functionality of the core implementations.
Details for each specific online store, such as how to configure it in a `feature_store.yaml`, can be found [here](README.md).

Below is a matrix indicating which online stores support what functionality.

| | Sqlite | Redis | DynamoDB | Snowflake | Datastore | Postgres | Hbase | Cassandra |
| :-------------------------------------------------------- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- |
| write feature values to the online store                  | yes | yes | yes | yes | yes | yes | yes | yes |
| read feature values from the online store                 | yes | yes | yes | yes | yes | yes | yes | yes |
| update infrastructure (e.g. tables) in the online store   | yes | yes | yes | yes | yes | yes | yes | yes |
| teardown infrastructure (e.g. tables) in the online store | yes | yes | yes | yes | yes | yes | yes | yes |
| generate a plan of infrastructure changes                 | yes | no  | no  | no  | no  | no  | no  | yes |
| support for on-demand transforms                          | yes | yes | yes | yes | yes | yes | yes | yes |
| readable by Python SDK                                    | yes | yes | yes | yes | yes | yes | yes | yes |
| readable by Java                                          | no  | yes | no  | no  | no  | no  | no  | no  |
| readable by Go                                            | yes | yes | no  | no  | no  | no  | no  | no  |
| support for entityless feature views                      | yes | yes | yes | yes | yes | yes | yes | yes |
| support for concurrent writing to the same key            | no  | yes | no  | no  | no  | no  | no  | no  |
| support for ttl (time to live) at retrieval               | no  | yes | no  | no  | no  | no  | no  | no  |
| support for deleting expired data                         | no  | yes | no  | no  | no  | no  | no  | no  |
| collocated by feature view                                | yes | no  | yes | yes | yes | yes | yes | yes |
| collocated by feature service                             | no  | no  | no  | no  | no  | no  | no  | no  |
| collocated by entity key                                  | no  | yes | no  | no  | no  | no  | no  | no  |
