Sometime ago I tried to use Adminer in Docker to administrate a sqlite database, which was not as easy as expected.
If you are a happy user of IntelliJ IDE like PHPStorm or IntelliJ Ultimate like me :) then i would nowadays recommend to use the built-in database tool of your IntelliJ IDE for Sqlite administration instead.
Even in dockerized context.
Adminer for Sqlite in Docker
Recently i wanted to use Sqlite with Adminer in Docker and it turned out to be not so easy.
I actually thought i could just declare Adminer in a docker-compose.yml file with a volume mounted, similar as i would do for adminer with mysql.
Update: Today i would rather use the IntelliJ Database Tool for Sqlite administration.
But since Adminer is a popular hacking target they introduced a feature that does not allow to run adminer without a password, out of the box.
Sqlite database usually runs without password and dang, workaround needed!
sqlite VACUUM
Mal ein kleines Zauberwort für Zwischendurch:
VACUUM;
Dieses Kommando räumt eine Sqlite Datenbank auf, killt unnötige Leerzeichen und defragmentiert den Datenbank File.
In meinem Fall war die DB nach dem löschen einer relativ großen Table immer noch auf ca 20MB, das hat mich doch stutzig gemacht und zu diesem Kommando geführt.
Nachdem ich es ausgeführt hatte, war der File dann tatsächlich auf 2MB geschrumpft!
Sollte man vielleicht nicht im laufendem Betrieb machen und als nächstes schau ich mir dann AUTO_VACUUM an.
PHP und Sqlite Transaktionen
Ich bin ja Fan von sqlite, besonders für kleinere Projekte, wo kein hohes paralelles Schreiben zu erwarten ist, also für fast alle kleineren Seiten.
Keine Datenbank Administration, einfach loslegen und schnell ist es auch noch.
Ein paar Krücken gibts aber schon, zB bei Transaktionen (die MySql im Regelfall gar nicht kann ;)).
Ich benutze die in diesem Fall für multiple Inserts, um da Performance rauszuschlagen.
Über diese bin ich letztens noch gestolpert:
1. Es ist keine gute Idee Transaktionen zu stückeln und sequentiell abzuarbeiten.(warum auch immer man auf diese Idee kommt ;))
besser ist: alle Queries zu buffern und dann in einer Transaktion auszuführen.
Denn Transaktionen locken die DB und nach meiner Erfahrung kann das PHP SQLiteDatabase Object den Datenbank Cursor nicht richtig schließen.
Das führt dann zu sowas: “cannot start a transaction within a transaction”
Continue reading “PHP und Sqlite Transaktionen”
symfony und multiple inserts
Manchmal sollte man multiple Inserts machen, ist doch performanter als in jedem Schleifendurchlauf die Database Engine zu bemühen.
Falls man sich mal fragt wie man multiple Inserts mit symfony hinkriegt, fängt man an zu googlen und stößt schnell auf dieses Snippet.
Und bevor man da rumeiert und das auf zB Sqlite umschreibt, einfach mal Propel Transaktionen anschauen: