Skip to content
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

Include go-ds-pebble as built-in plugin #10347

Open
3 of 8 tasks
lidel opened this issue Feb 20, 2024 · 1 comment · May be fixed by #10367
Open
3 of 8 tasks

Include go-ds-pebble as built-in plugin #10347

lidel opened this issue Feb 20, 2024 · 1 comment · May be fixed by #10367
Labels
effort/weeks Estimated to take multiple weeks exp/expert Having worked on the specific codebase is important help wanted Seeking public contribution on this issue kind/feature A new feature P2 Medium: Good to have, but can wait until someone steps up

Comments

@lidel
Copy link
Member

lidel commented Feb 20, 2024

Checklist

  • My issue is specific & actionable.
  • I am not suggesting a protocol enhancement.
  • I have searched on the issue tracker for my issue.

Description

Summary

Include pebble as built-in plugin.
It provides meaningful alternative to leveldb as the datastore, and may be better than badger1 as well.

Background

It is 2024, and we still only have flatfs, leveldb and necromancy-level badgerv1 (!) as datastore options.

We got positive feedback about pebble, some examples:

https://ipfscluster.io/documentation/guides/datastore/

Pebble is a high performant
backend from Cochroachdb, used by default in Cluster:

  • Proven to work well on very large pinsets.
  • Best disk-usage compared to the rest. No need to trigger GC cycles for space reclaim.
  • Performance and memory usage seems on par with Badger3, and behaves better than Badger on both counts.
  • Behaves correctly with default settings but we bump them up a bit.
  • 0-delay startup times, even with very large amounts of data.
  • Options support compression (we chose to leave it enabled by default).
  • The Pebble project is officially alive and maintained.
  • Pebble only runs on 64-bit architectures.
  • One key difference with Badger3 is that Pebble stores keys and values
    together and any lookup for a key will also read the values, while Badger3
    can store keys and values separately (i.e. keys only in the index, which can
    be loaded onto memory when small enough).

ipfs/go-ds-pebble#29:

After changing leveldb store to pebble store, the speed of GC has increased by at least dozens of times. So it's not flatfs that's to blame for slow GC, it's leveldb. I also tried leveldb and pebble as blockstore, but the CPU and memory usage is unacceptable.

Right now, to use go-ds-pebble one needs to build external plugin.

Proposed change

Include https://github.com/ipfs/go-ds-pebble in standard kubo build, just like we do with legacy badger1.

This will

  • provide meaningful alternative to leveldb and badgerd
  • allow community to use it without having to build external plugin and report back

TODO

@lidel lidel added the kind/feature A new feature label Feb 20, 2024
@lidel lidel added help wanted Seeking public contribution on this issue exp/expert Having worked on the specific codebase is important P2 Medium: Good to have, but can wait until someone steps up effort/weeks Estimated to take multiple weeks labels Feb 20, 2024
@guojidan
Copy link

guojidan commented Mar 7, 2024

hi, I want try implement this feature 😄

@guojidan guojidan linked a pull request Mar 12, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
effort/weeks Estimated to take multiple weeks exp/expert Having worked on the specific codebase is important help wanted Seeking public contribution on this issue kind/feature A new feature P2 Medium: Good to have, but can wait until someone steps up
Projects
Status: No status
Development

Successfully merging a pull request may close this issue.

2 participants