cosmos / iavl

Merkleized IAVL+ Tree implementation in Go
Apache License 2.0
409 stars 256 forks source link

perf: Speedup key formatting #864

Closed ValarDragon closed 4 months ago

ValarDragon commented 6 months ago

This speeds up key formatting, which is by no means the bottleneck, but appeared to be 0.5% of the time of some Osmosis mainnet sync pprof's on IAVL v0 and v1

coderabbitai[bot] commented 6 months ago

Walkthrough

The update presents a shift to a more efficient prefixing system within a key formatting package, adjusting key generation and indexing methodologies. It also includes renaming of certain struct fields for clarity and aligns with a new versioning scheme. The changes streamline the process of key manipulation, specifically for benchmarks, and affect how nodes are referenced and stored within the database.

Changes

File(s) Summary
keyformat/prefix_formatter.go Introduced FastPrefixFormatter for efficient key prefixing in benchmarks.
node.go Renamed fields from *NodeKey to *NodeHash and added comments for version clarification.
nodedb.go Replaced NewKeyFormat with NewFastPrefixFormatter and updated related method calls.

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on X ?


Tips ### Chat with CodeRabbit Bot (`@coderabbitai`) > Note: Auto-reply has been disabled for this repository by the repository owner. The CodeRabbit bot will not respond to your comments unless it is explicitly tagged. - You can tag CodeRabbit on specific lines of code or entire files in the PR by tagging `@coderabbitai` in a comment. Examples: - _@coderabbitai generate unit tests for this file_ - _@coderabbitai modularize this function_ - You can tag `@coderabbitai` in a PR comment and ask questions about the PR and the codebase. Use quoted replies to pass the context for follow-up questions. Examples: - _@coderabbitai render interesting statistics about this repository as a table_. - _@coderabbitai show all the `console.log` statements in this repository_. - _@coderabbitai generate unit tests for the `src/utils.ts` file_. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger a review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - The JSON schema for the configuration file is available [here](https://coderabbit.ai/integrations/coderabbit-overrides.v2.json). - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json` ### CodeRabbit Discord Community Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback.