-
Notifications
You must be signed in to change notification settings - Fork 5.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize Storage read/write api #4795
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Just out of interest do you have any idea on the performance benefits?
The performance is negligible on small structures or values under the size of a storage slot. The performance gain is really mostly seen in things that store many variables at the same key with offsets such as the It effectively turns reading and writing from an O(n) function to O(1) where only the minimal viable storage is read/written. |
## Description The storage api currently reads in all storage from `0` to `offset`. This has been optimized to only read the required storage slots. Closes #4789 ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [x] I have added tests that prove my fix is effective or that my feature works. - [x] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers. --------- Co-authored-by: bitzoic <[email protected]> Co-authored-by: SwayStar123 <[email protected]>
## Description Currently, `StorageVec` and `Vec` do not have any relation with one another. This PR takes advantage of the recent optimization and refactoring done to the Storage API `read()` and `write()` functions in #4795 and enables the storing of a `Vec` using the `StorageVec` type. To do this, the `StorageVec` now stores things sequentially rather than a different key for every element. Due to the optimizations done to the Storage API, this has become feasible as we can now load a single element of the sequential `StorageVec`. The storing of elements sequentially mimics the existing `Vec`, allowing us to store it as a `raw_slice` with a ***single*** read/write to storage as opposed to looping over the `Vec` and having ***n*** read/writes. It should be noted that due to #409, the storing of a `Vec` is written in the `StorageVec` file. This is the resulting syntax: ```sway let my_vec = Vec::new(); storage.storage_vec.store_vec(my_vec); // Store the Vec let other_vec = storage.storage_vec.load_vec(); // Read the Vec ``` When this issue is resolved, this should be changed to a `From` implementation changing the syntax to: ```sway let my_vec = Vec::new(); storage.storage_vec = my_vec.into(); // Store the Vec let other_vec = Vec::from(storage.storage_vec); // Read the Vec ``` Closes #2439 ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [x] I have added tests that prove my fix is effective or that my feature works. - [x] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers. --------- Co-authored-by: bitzoic <[email protected]>
Description
The storage api currently reads in all storage from
0
tooffset
. This has been optimized to only read the required storage slots.Closes #4789
Checklist
Breaking*
orNew Feature
labels where relevant.