-
Notifications
You must be signed in to change notification settings - Fork 972
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
[Feature Request]: Implement block storage partitioning for scalable volume distribution #4100
Comments
While its true that there is a limit on the amount of files per directory in the most popular ext4 FS, there is a way to bypass the limit via large_dir param. It's also true that having files in the single directory may lead to contentions in case of ext4. However, ext4 has further limitation that make it suboptimal choice for node storage. The point here is that we shouldn't discuss storage improvements without FSes and their properties, e.g. Ext4 has limited directories, while XFS and ZFS do not. Similarly, XFS shouldn't have performance issues with many files in a directory, is recognized for its robust performance in parallel random read of big files and demonstrated superior performance in random read tests. Another point, is that we can't afford optimizing for all the FSes out there and should pick the standard recommended one for our node runners that we optimize for. I believe that we should first pick one, analyze/benchmark its properties and scalability and then optimize/improve existing storage subsystem for it, until we come to making a new Celestia-optimized one. |
Hey @Wondertan I think the main concern raised here isn’t just about the file system’s ability to handle a large number of files in a single directory. The core issue is that when all block data resides on a single volume (regardless of file system), you hit practical limits like:
Partitioning the dataset into multiple directories—each potentially mapped to different volumes—acts like an internal sharding mechanism. This way, we can scale horizontally across multiple volumes and avoid the single-volume bottlenecks. By distributing the blocks over multiple storage backends, we can achieve higher aggregate storage capacity and IOPS. While it’s true that file systems like XFS or ZFS may mitigate single-directory performance issues, the proposal here specifically targets the broader limits of a single volume rather than directory-related overhead alone. We could certainly choose and optimize for one recommended file system in the future, but that still wouldn’t fully address constraints like maximum volume size on cloud providers. So, in short:
Hope this clarifies where the suggestion is coming from! Let me know what you think. |
Implementation ideas
Overview
Currently, all
*.ods
and*.q4
datasets are stored under a singleblocks/
path without filesystem partitioning. This monolithic storage approach creates scalability challenges and potential performance bottlenecks.Risks and Challenges
Storage Capacity Constraints
Performance Bottlenecks
Proposed Enhancement
Implement a partitioning strategy that would:
Partitioning Example
Existing structure (no partitioning, all files are stored on the same root path
blocks/
):Partitioning example through the use of the first 2 bytes
[00->FF]
would create a structure of256
indexes.Example of volume distribution with partitioning enabled:
How this would fix existing limitations ?
When deploying a Data Availability (DA) node on cloud infrastructure, service providers face a critical limitation: cloud platforms typically impose a hard storage limit per volume. Since DA nodes currently store all
*.ods
datasets in a single root path, this creates an absolute ceiling that cannot be bypassed.The proposed partitioning strategy provides a robust solution to these storage constraints
Volume Distribution:
Example of Storage Capacity Benefits based on a limit of
10TB
per block storage (volume):The text was updated successfully, but these errors were encountered: