# Roadmap 1. Data Storage - Storing: file, blob, json, xml, arrays, set, map, primitive types - Metafields: tags, descriptions, metadata 2. API Server (TCP) - basic functionality - async support 3. API Client (TCP) - basic functionality - async support 4. Configuration - server and client sections 5. Logging - basic logging 6. File Storage Service (HTTP) - basic functionality - async support - streaming (seeking and reading data at given position) - support for partial requests (Content-Range) - support for If-Range, If-Modified-Since, If-None-Match, Last-Modified, Etag 7. Authentification and Authorization - support for JWT - support for Fine-Grained Access Control 8. Remote collections - HashSet - HashMap - Vec - VecDeque 9. Scaling - cluster heartbeat - consistent hashing - easy scaling - support for built-in configuration service in nodes - support for auto replicating of configuration parameters in cluster nodes - support for plug & play in adding a new node into cluster and re-configurating of existing nodes - new node needs to know at least one neighbour in the cluster. The added node and other nodes would be updated after completing the re-configuration and re-building process of cluster - any change in the cluster configuration (adding new node, failing existing nodes), would be auto replicated to other nodes in the cluster (no need for master node) - clients would be notified and auto-updated after re-configuration - each client request includes a config_id parameter - server node will analyze the received config_id and may respond with updated configuration settings - clients and nodes use weighted graphs to optimize node/peer selection and other network operations 10. Caching - client-side and server-side caching support - cache evictions policies: LRU/LFU 11. File Storage Spaces - support for folders - support for path ## Notes Storage space samples: path_id1 = path1/sub-path1 path_id2 = path_id1/other_path2/item_id1 get_item_type(path_id1) => PathItem parse_path(path_id1) => [ path1 : FolderItem, subpath1 : FolderItem, ] get_item_type(path_id2) => PathItem parse_path(path_id2) => [ path_id1 : PathItem, other_path2 : FolderItem, item_id1 : FileItem ] parse_full_path(path_id2) => [ path1 : FolderItem, subpath1 : FolderItem, other_path2 : FolderItem, item_id1 : FileItem ]