99 lines
3.0 KiB
Markdown
99 lines
3.0 KiB
Markdown
# Agent Shell Transcript
|
|
|
|
**Agent:** Claude Code
|
|
**Started:** 2026-03-03 15:24:13
|
|
**Working Directory:** /home/fenix/napi/
|
|
|
|
---
|
|
|
|
## User (2026-03-03 15:24:13)
|
|
|
|
how can i use SQLite on Cloudflare services ?
|
|
|
|
|
|
|
|
## Agent's Thoughts (2026-03-03 15:24:15)
|
|
|
|
The user is asking about using SQLite on Cloudflare services. This is a general knowledge question, not related to the napi project. Let me answer from what I know and search for current info.
|
|
|
|
Cloudflare has D1, which is their SQLite-based database service for Workers.
|
|
## Agent (2026-03-03 15:24:17)
|
|
|
|
Cloudflare offers **D1**, their native SQLite-at-the-edge database. Here's the quick rundown:
|
|
|
|
## Cloudflare D1
|
|
|
|
D1 is a serverless SQLite database built into the Cloudflare Workers platform. Your data lives on Cloudflare's network, and queries run close to your users.
|
|
|
|
### Key characteristics
|
|
|
|
- **Real SQLite** — standard SQL syntax, same engine
|
|
- **Serverless** — no connection pools, no provisioning
|
|
- **Integrated with Workers** — first-class binding, no external drivers
|
|
- **Read replicas at the edge** — writes go to a primary, reads are distributed
|
|
- **Free tier available** — 5M reads/day, 100K writes/day, 5GB storage
|
|
|
|
### Minimal example (Worker + D1)
|
|
|
|
```js
|
|
// wrangler.toml
|
|
// [[d1_databases]]
|
|
// binding = "DB"
|
|
// database_name = "my-db"
|
|
// database_id = "xxx-xxx-xxx"
|
|
|
|
export default {
|
|
async fetch(request, env) {
|
|
// Create table
|
|
await env.DB.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
|
|
|
|
// Insert
|
|
await env.DB.prepare("INSERT INTO users (name) VALUES (?)").bind("Fénix").run();
|
|
|
|
// Query
|
|
const { results } = await env.DB.prepare("SELECT * FROM users").all();
|
|
|
|
return Response.json(results);
|
|
}
|
|
};
|
|
```
|
|
|
|
### Setup steps
|
|
|
|
```bash
|
|
# 1. Create database
|
|
npx wrangler d1 create my-db
|
|
|
|
# 2. Add binding to wrangler.toml (output from step 1)
|
|
|
|
# 3. Run migrations
|
|
npx wrangler d1 execute my-db --local --file=./schema.sql # local dev
|
|
npx wrangler d1 execute my-db --remote --file=./schema.sql # production
|
|
|
|
# 4. Deploy
|
|
npx wrangler deploy
|
|
```
|
|
|
|
### Other SQLite-adjacent options on Cloudflare
|
|
|
|
| Option | Use case |
|
|
|:-------|:---------|
|
|
| **D1** | Primary choice — native SQLite, serverless, edge-distributed |
|
|
| **Durable Objects + SQLite** | Per-object embedded SQLite (since 2024) — good for per-user/per-room state |
|
|
| **Hyperdrive** | Not SQLite — connection pooler for external Postgres/MySQL |
|
|
|
|
### D1 limitations to know
|
|
|
|
- **Max DB size**: 10GB (free: 500MB)
|
|
- **Row size**: 1MB max
|
|
- **Single writer**: writes serialize through one primary location
|
|
- **No raw file access**: you interact via SQL bindings only, not `.sqlite` files
|
|
- Transactions supported but with some restrictions (no nested, no savepoints)
|
|
|
|
---
|
|
|
|
For your **napi** context specifically — if you ever wanted to move from flat `notas.md` files to a DB-backed approach on Cloudflare, D1 would be the natural fit. Though the current file-based architecture is perfectly fine for 40 students.
|
|
|
|
Want me to dig deeper into any specific aspect (D1 pricing, Durable Objects SQLite, migrations, etc.)?
|
|
|