diff --git a/apps/emqx_durable_storage/README.md b/apps/emqx_durable_storage/README.md index f01af0c37..bc8eae2d0 100644 --- a/apps/emqx_durable_storage/README.md +++ b/apps/emqx_durable_storage/README.md @@ -1,36 +1,50 @@ # EMQX Replay -`emqx_ds` is a generic durable storage for MQTT messages within EMQX. +`emqx_ds` is an application implementing durable storage for MQTT messages within EMQX. -Concepts: +# Features +- Streams. Stream is an abstraction that encompasses topics, shards, different data layouts, etc. + The client application must only aware of the streams. +- Batching. All the API functions are batch-oriented. -> 0. App overview introduction -> 1. let people know what your project can do specifically. Is it a base -> library dependency, or what kind of functionality is provided to the user? -> 2. Provide context and add a link to any reference visitors might be -> unfamiliar with. -> 3. Design details, implementation technology architecture, Roadmap, etc. +- Iterators. Iterators can be stored durably or transferred over network. + They take relatively small space. -# [Features] - [Optional] -> A List of features your application provided. If the feature is quite simple, just -> list in the previous section. +- Support for various backends. Almost any DBMS that supports range + queries can serve as a `emqx_durable_storage` backend. + +- Builtin backend based on RocksDB. + - Changing storage layout on the fly: it's achieved by creating a + new set of tables (known as "generation") and the schema. + - Sharding based on publisher's client ID # Limitation -TBD + +- Builtin backend currently doesn't replicate data across different sites +- There is no local cache of messages, which may result in transferring the same data multiple times # Documentation links TBD # Usage -TBD + +Currently it's only used to implement persistent sessions. + +In the future it can serve as a storage for retained messages or as a generic message buffering layer for the bridges. # Configurations -TBD + +`emqx_durable_storage` doesn't have any configurable parameters. +Instead, it relies on the upper-level business applications to create +a correct configuration and pass it to `emqx_ds:open_db(DBName, Config)` +function according to its needs. # HTTP APIs +None + # Other TBD