anor 0.1.2

Anor In-Memory Data Storage
Documentation
# 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
    ]