Code Of Conduct

#17855

Soit c’est un troll, soit c’est une critique de tous les "code of conduct" absurdes qu’on voit désormais.

J’ai du mal à voir quelqu’un capable de pondre SQLite être aussi con que ça :O

Quoi qu’il en soit, tout ça s’applique aux dév de SQLite (ceux qui font SQLite), pas ceux qui l’utilisent (ni en tant que codeurs qui utilisent SQLite dans le code, ni l’utilisateur final), donc à la limite… osef :) .

https://www.sqlite.org/codeofconduct.html

[SQLITE] Note : astuce rapide pour + de perfs

#17831

Je me mets à optimiser un peu mon lecteur RSS. Pas qu’il soit lent (il tri 70k entrées RSS en 0,22 secondes), mais je viens de trouver un truc.

Dans le lecteur, je fais une requête particulière pour compter le nombre d’éléments non lus pour chaque flux :

SELECT bt_feed, SUM(bt_statut) AS nbrun FROM rss GROUP BY bt_feed

Ensuite, en PHP, je fais une liste des flux avec le nombre d’éléments non-lus associés. Jusque là, rien d’alarmant.

Sauf que la liste des flux utilisée en PHP à ce stade est déjà recyclée. J’ai juste besoin d’une autre requête pour obtenir le nombre d’articles non lus.

Je peux optimiser un peu ma seconde requête :

SELECT bt_feed, SUM(bt_statut) AS nbrun FROM rss WHERE bt_statut = 1 GROUP BY bt_feed

Ici, le « WHERE bt_statut = 1 » signifie qu’il ne doit faire la "somme" que sur les éléments dont le statut est 1 (pas ceux où il est à 0).

Étant donnée que la BDD contient ~69 000 éléments lus (0) et seulement ~1 000 éléments non lus (1), ça revient à sommer sur seulement 1k éléments au lieu de 69k.

Ça me fait gagner environ 10~15 % du temps de la requête : je passe de 0,22 s à 0,19 s. C’est loin d’être du grappillage de micro-secondes.

https://lehollandaisvolant.net/?mode=links&id=20181014161302

35% Faster Than The Filesystem

#17726

Utiliser SQLite permet de gagner ~35 % de performances (en moyenne) pour stocker des fichiers, par rapport à un système de fichier normal.

Le gain de perfs est le plus impressionnant sur W10.

https://www.sqlite.org/fasterthanfs.html

Scaling SQLite to 4M QPS on a Single Server (EC2 vs Bare Metal) « Expensify Blog

#17158

SQLite a le petit problème qu’ils ne peut pas être écrit par deux processus à la fois.

Pourtant, en bricolant un peu et avec les bons softs et les bons réglages, et sur un (très) gros serveur, ils arrivent ici à faire environ 4 millions de requêtes par seconde sur du SQLite.

https://blog.expensify.com/2018/01/08/scaling-sqlite-to-4m-qps-on-a-single-server/

DBeaver | Free Universal SQL Client

#16152

Oh bien !
Un client SQL qui gère tout un tas de SGBD.

C'est parfait à l'heure où le petit SQLite Browser est devenu une usine à gaz qui ne gère plus tout correctement.

http://dbeaver.jkiss.org/

How do I unlock a SQLite database? - Stack Overflow

#15872

Si en SQLite il vous arrive d’avoir une erreur disant que la BDD est verouillée (« General error: 5 database is locked »), c’est que vous avez sûrement manqué de fermer un curseur quelque part.

Vérifiez les fetch() et ajoutez un closeCursor() en dessous de votre boucle.

En PHP par exemple :

$req = $handle->query("SELECT * FROM table");
$data = $req->fetch();

Ajoutez ça à la suite :

$req->closeCursor();

Logique, mais quand on le sait pas on peut toujours chercher…
Les forums sont pleins de cette question spécifique, mais la plupart ont des hacks farfelues (relancer Apache, etc.) qui ne sont pas des solutions.

http://stackoverflow.com/questions/151026/how-do-i-unlock-a-sqlite-database

Note : si vous utilisez SQLite

#14931

Pensez à faire un VACUUM de temps en temps.

Vacuum c’est la commande SQL qui permet de nettoyer la base SQLite.

Par exemple, si vous insérez 500 entrées dans la BDD, le fichier .sqlite prend plus de place. Si maintenant vous virez 499 de ces entrées, le fichier .sqlite ne diminue pas en volume. L’espace est réservé par SQLite pour une utilisation future par SQLite.

En pratique, c’est mieux : SQLite n’aura plus à demander de la place au système de fichier, mais au bout d’un moment la taille du fichier peut-être trop grand par rapport aux données réelles qui sont dans la base.

Vacuum sert justement à reconstruire la base à partir de rien. Un peu comme une défragmentation des données.

Firefox aussi utilise SQLite pour stocker des choses (historique, cookies…). Pensez à appliquer ça une à deux fois par an : http://www.commentcamarche.net/faq/11807-compacter-les-bases-sqlite-de-firefox-3

http://lehollandaisvolant.net/?mode=links&id=20160401203858

Anton Titov’s blog » “Do not use ORDER BY RAND()” or “How to get random rows from table?”

#14785

C’est censé ce qu’il dit (mais ça ne fera pas sens) :

« Let’s say you run this query on a table with 10000 rows, than the SQL server generates 10000 random numbers, scans this numbers for the smallest one and gives you this row »

En gros : n’utilisez pas ORDER BY RAND() en SQL.
SQL va associer un nombre aléatoire, généré pour l’occasion, à chaque entrée de la table, et ensuite prendre le plus petit.
Il y a donc plusieurs opérations : la génération d’autant de nombres aléatoires que d’entrées dans la base, leur tri en ordre croissant et la réponse.

C’est écrit dans l’article, mais la solution à retenir est plutôt de lister le nombre d’entrées dans la base en SQL, générer un nombre aléatoire en PHP (ou dans le langage que vous utilisez) entre 0 et le nombre d’entrées, puis repasser en SQL et sortir l’entrée correspondant à ce nombre. Oui, ça fait deux requêtes, mais c’est beaucoup plus rapide quand même.

Idem pour N entrées : listez les ID des entrées en SQL, utilisez PHP (ou autre) pour en prendre N au hasard, puis utilisez SQL pour les sortir de la base.

En revanche, si votre base fait N entrées et que vous voulez mélanger ces N entrées, je ne vois pas d’inconvénients à utiliser RAND(). Je ne suis pas sûr qu’un array_shuffle() en PHP (ou équivalent) soit plus performant. Dans le cas présent, RAND() est prévu pour ça.

(Je n’ai pas de benchmarks par contre)

http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/

phpLiteAdmin | An SQLite database management tool

#14485

Un équivalent de PhpMyAdmin pour SQLite.

Perso j’utilise le logiciel SQLiteBrowser pour ouvrir à la main mes fichiers SQLite. Il est plus rustique et semble moins puissant, mais on peut lancer des requêtes SQL dessus, ce qui me suffit.

(via)

https://www.phpliteadmin.org/

Cinq raisons d'utiliser SQLite en 2016

#14228

Le mode WAL de la version 3.7 à l’air intéressant : il permet simultanément des lectures et des écritures (alors qu’avant, une écriture était bloquante pour toute autre opération).

Pour un blog, les écritures sont moins probablement moins de 1% des accès (et pour ceux là, un bon vieux cache HTML/Json suffit dans 99% du 1% des cas), donc ça ne se verra pas forcément, mais ailleurs…

Voir aussi l’article d’origine : http://charlesleifer.com/blog/five-reasons-you-should-use-sqlite-in-2016/

http://www.developpez.com/actu/94614/Cinq-raisons-d-utiliser-SQLite-en-2016/