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

Optimize local database access #100

Merged
merged 1 commit into from
Sep 23, 2023
Merged

Optimize local database access #100

merged 1 commit into from
Sep 23, 2023

Conversation

penberg
Copy link
Contributor

@penberg penberg commented Sep 22, 2023

We currently open a new SQLite connection for every SQL statemenet we
execute. This is wasteful with better-sqlite3, but even more wasteful
with libsql, which sets up remote connectivity in case it needs to do
write delegation.

To fix the issue, let's reuse the connection in a client, which reduces
local query latency by up to almost 10x:

Before:

penberg@vonneumann remote-based-sync % bun run index.ts
The keycard for user Glauber is valid. Query took 3ms
The keycard for user Glauber is valid. Query took 2ms
The keycard for user Glauber is valid. Query took 965us
The keycard for user Glauber is valid. Query took 815us
The keycard for user Glauber is valid. Query took 726us
The keycard for user Glauber is valid. Query took 740us
The keycard for user Glauber is valid. Query took 720us
The keycard for user Glauber is valid. Query took 690us
The keycard for user Glauber is valid. Query took 682us
The keycard for user Glauber is valid. Query took 701us

After:

penberg@vonneumann remote-based-sync % bun run index.ts

The keycard for user Glauber is valid. Query took 1ms
The keycard for user Glauber is valid. Query took 644us
The keycard for user Glauber is valid. Query took 296us
The keycard for user Glauber is valid. Query took 197us
The keycard for user Glauber is valid. Query took 177us
The keycard for user Glauber is valid. Query took 175us
The keycard for user Glauber is valid. Query took 192us
The keycard for user Glauber is valid. Query took 150us
The keycard for user Glauber is valid. Query took 135us
The keycard for user Glauber is valid. Query took 148us

@penberg penberg force-pushed the optimize-local branch 3 times, most recently from ca0fbd3 to a18174c Compare September 23, 2023 05:33
We currently open a new SQLite connection for every SQL statemenet we
execute. This is wasteful with better-sqlite3, but even more wasteful
with libsql, which sets up remote connectivity in case it needs to do
write delegation.

To fix the issue, let's reuse the connection in a client, which reduces
local query latency by up to almost 10x:

Before:

```
penberg@vonneumann remote-based-sync % bun run index.ts
The keycard for user Glauber is valid. Query took 3ms
The keycard for user Glauber is valid. Query took 2ms
The keycard for user Glauber is valid. Query took 965us
The keycard for user Glauber is valid. Query took 815us
The keycard for user Glauber is valid. Query took 726us
The keycard for user Glauber is valid. Query took 740us
The keycard for user Glauber is valid. Query took 720us
The keycard for user Glauber is valid. Query took 690us
The keycard for user Glauber is valid. Query took 682us
The keycard for user Glauber is valid. Query took 701us
```

After:

penberg@vonneumann remote-based-sync % bun run index.ts

```
The keycard for user Glauber is valid. Query took 1ms
The keycard for user Glauber is valid. Query took 644us
The keycard for user Glauber is valid. Query took 296us
The keycard for user Glauber is valid. Query took 197us
The keycard for user Glauber is valid. Query took 177us
The keycard for user Glauber is valid. Query took 175us
The keycard for user Glauber is valid. Query took 192us
The keycard for user Glauber is valid. Query took 150us
The keycard for user Glauber is valid. Query took 135us
The keycard for user Glauber is valid. Query took 148us
```
@penberg penberg merged commit f0067e4 into main Sep 23, 2023
3 checks passed
@penberg penberg deleted the optimize-local branch September 23, 2023 05:42
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.

1 participant