Abstract
- Titel
- SQLite
- Abstract
- Vrijwel iedereen gebruikt het (onbewust) als eindgebruiker. Maar wanneer en hoe gebruik je het als ontwikkelaar? En wanneer niet?
ˌɛsˌkjuːˌɛlˈaɪt ?

Over Joris
Wie?
Mijn naam is Joris Zwart (1974) woonachtig te Lent
(boven Nijmegen) met mijn lieftallige gezin. Online ben ik te vinden
op
joriszwart.nl
Wat?
lastcrud.com; upcoming nocode platform, main USP: visual business rules,
scratch for grown-ups.
Hoe?
C#, SQLite, Vue/Vuetify.
Waar?
Ex-Planonner 2005 – 2009. PlanonNet Self-Service I
(nu PSS2?), PlanonTalk, reserveringen (express, outlook), SAP
support calls.
Benchmark
CREATE TABLE IF NOT EXISTS data ( id INTEGER PRIMARY KEY, content TEXT ) STRICT
.timer on>
INSERT INTO numbers (content) SELECT value FROM generate_series(1, 1000000);
explain select count(*) from numbers; explain query plan select count(*) from numbers; explain query plan select sum(*) from numbers;
INSERTs : 1.000.000 Duration : 1.357s --------------------- INSERTs : ~737.000/sMac mini M1 2022, 16 GB, SSD (the latter is important).
$ go run bench.go $ sqlite3 bench.sqlite > .timers on > select count(*) from data; > explain query plan select count(*) from data; > select * from data limit 0, 10; > select * from data limit 999990, 10;
Klopt dat?
Ja, mits... WAL-mode, indexen en transactions
Tenzij..., heavy writing.
ACID, auteurs garanderen dat het minstens tot 2050 meegaat (hoe dan? C :-))
Meest getest? Miljoenen regels testcode. Op allerlei execution points (WAT als ik NU de stroom er af haal? Gelden de ACID-principes nog steeds?) Diep onderzoek naar filesystemen en hun issues. Disks and disk controllers lie.
Oorsprong Dr. Richard Hipp. 2000. Ik kwam er zelf mee in aanraking
rond 2003. Officieel archive format US Library of Congress. Auteurs:
alternatief voor
fopen()
(C file open), maar daar doen ze zichzelf
tekort IMHO.
CLI
- open database (in memory of met file) - create table - insert - ls filesEenvoud
Vergelijk met Big Monsters:- text
- blob
- varchar(n)
- nvarchar(n), wat n?
- int(1)
- int(11)
- ...
- What me worry?
( ͡ಠ ʖ̯ ͡ಠ) column affinity, strict tables
Encoding
Standaard UTF-8, maar pragma mogelijk voor andere encodings.Details
Binary Large Objects (afbeeldingen, documenten, apps) Streaming Blob APIYep, het is een type. Don't ask, maar dit heeft te maken met column affinity.
JSON/JSONB + calculated indexen
Ugly hack
Tabel per kolom *of* verticaal gepivotteerd.True
Maar WAL-mode én foreign keys! Verder tunen (cache-size etc) kan altijd en loont ook.Details
Library, geen standalone (server)applicatie. Self-contained. In-process. Dus geen socket of netwerkoverhead.Size
500 kB – 1 MBMySQL installer: 2 MB (enkel de installer)
Betekenis
AtomicityConsistency
Isolation
Durability
Mental note
Wel even aanzetten (bij iedere connectie).Problem?!
Geen probleem!Details
Streamend schrijven en lezen van blobs. Afbeeldingen of andere binaries *in* de database is hiermee geen anti-pattern meer en zelfs aan te bevelen; referentiële integriteit op je assets.Details
Vrijwel elk taal/platform heeft bindings. C, C++, C#, Golang, Java, JavaScript (Node), Python, Haskell etc.Toepassingen
Cache (smart querying), snelle integrations tests.FTS5
Zie ook mijn artikel Full-text document indexing - part Ⅰ over het indexeren van docx, gebruik makende van het feit dat het eigenlijk gezipte XML-bestanden zijn.Belangrijk?
Data Definition Language
Waarom handig?
Omdat je niet een half gelukte migratie met de hand wilt terugdraaien.
Details
- Readers blokkeren elkaar niet en worden niet geblokkeerd door writers.
- Writers blokkeren elkaar.
Ergo: single-writer.
Je kan split reading/writing (queue) doen. Zelfs aan te raden.
Busy timeout (bij 5000 ms) is van belang, want default erg kort.
vs
Big Monsters
<spoiler>
Absoluut! in 99.214% van de gevallen. We zijn geen MANGA (Meta Amazon Netflix Google Apple)Aanbod
Ik zelf ben er zeer enthousiast over en het is mijn go-to database platform.
Wie gaat er mee experimenteren? Vingers?
Als je het serieus overweegt: ik ben er graag om je te helpen (om niets).