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

Pds sqlite refactor #1705

Merged
merged 143 commits into from Nov 1, 2023
Merged

Pds sqlite refactor #1705

merged 143 commits into from Nov 1, 2023

Conversation

dholms
Copy link
Collaborator

@dholms dholms commented Oct 3, 2023

This refactors the PDS to use a single-tenant SQLite datastore.

Each user has their own SQLite file that stores their repo and private account state.
User databases are stored hierarchically as such: /${dbDirectory}/${sha256Hex(did).slice(0,2)}/${did}

Repo signing keys for each repo are stored alongside the SQLite file.

We also switch out the abstraction for interacting with user data to an ActorStore. The primary difference between the ActorStore and our previous "services" is that the ActorStore has different classes for reading & writing. Since SQLite does not support concurrent transactions, the ActorStore requires that you clearly "transact" with the store in order to make a write.

We also maintain an LRUCache for signing keys and databases. We allow 30k open file handles and 30k keys held in memory. When a database falls out of the cache, we ensure that we close the file handle.

We also introduce 3 separate SQLite databases for managing service state:

  • service DB for account info, invite codes, refresh tokens etc
  • did cache DB with only one table for caching DID resolutions
  • sequencer DB with only one table for sequencing repo updates across all repos on a service.

Each of these SQLite files in run in WAL mode to allow for concurrent reads and streaming replication.

We intend to ship the PDS distribution with Litestream or something similar

Copy link
Collaborator

@devinivy devinivy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a good handful of notes and comments, but seriously wow 💎 tons of great simplifications in here and things feel very tidy.

@dholms dholms changed the base branch from main to pds-v2 November 1, 2023 01:21
@dholms dholms mentioned this pull request Nov 1, 2023
@dholms dholms merged commit 8449ceb into pds-v2 Nov 1, 2023
10 checks passed
@dholms dholms deleted the pds-sqlite-refactor branch November 1, 2023 01:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants