- Implement CanDB APIs running on the canister manager such that the stored data is persisted and stable through upgrades. APIs include:
- Create (Capability shown through using CanDB.update()) in the simpleDB example
- Put/Update
- Get
- Delete
- Scan (across a partition key + range/sort key combination)
- Complete unit testing for all CanDB APIs
- Implement Red-Black tree split algorithm (For halving a partition)
- Define and implement mode of inter-canister communication between the CanDB canister manager and its storage partitions (async blocking, fire-and-forget, etc.)
- Build example demonstrating the ability to apportion cycles from the Index Canister to newly created canisters
- Implement library functionality for the CanDB Index Canister, which controls multiple storage partitions, partition storage limits, and partition data splitting logic.
- Auto-Scale design and initial implementation
- Build and demo a simple application interacting directly with a CanDB instance canister manager which is controlling and has data stored in multiple storage partition canisters.
- Cultivate an passionate alpha community dedicated to building at scale and pushing the limits of what's possible on the IC
- Reduce developer adoption friction by improve CanDB documentation and quickstart tooling
- Refine existing CanDB and CanDBAdmin APIs through developer feedback
[] Receive cycle management feedback, leading to the appropriate API abstraction-> CycleOps[] Design and implement cycle management and apportioning between the CanDB canister manager and storage partition canisters. Provide API allowing the developer to query remaining cycles at the canister manager level.-> Doing in CycleOps grant #2
- Use developer input/feedback to help scope and prioritize new features.
- [x ] Measure and fine tune performance of CanDB APIs as the number of records and storage partitions increase
- Define metrics, such as:
- query/update performance
- canister memory used
- request throughput (number of concurrent query/update calls CanDB is able to process in a short burst of time)
- [] Test CanDB against these metrics as the number of records/partition and number of partitions increase, ensuring that these metrics match the expected runtime and performance - i.e. proof of CanScale ;)
- Define metrics, such as:
- [] Identify and measure performance bottlenecks, and attempt to improve upon these bottlenecks if possible
- [] Measure inter-canister query times and look into performance tradeoffs between direct canister calls and calls proxied through the canister manager to its partitions
- [] Depending on the performance of the Red-Black Tree in ordering records, implement a BTree library for underlying CanDB data structures allowing partition key and range/sort key access, as well as splitting a storage partition and spinning up "n" numbers new storage partitions based on the order of the BTree.
- [] Perform data stability testing, ensuring that data stored in CanDB is persisted through upgrades
- [] Research and test other potential "chaos" scenarios that might affect data stability.
- [] Add integration testing