Skip to content

SQL : Recherche de texte et compression côté base de données plutôt qu'en PHP #204

@Alkarex

Description

@Alkarex

Le nombre d'articles augmentant, la recherche de texte n'a marché chez moi qu'environ 2 mois et ne marche plus maintenant car actuellement :

  • La recherche de texte libre est faite côté PHP ;
  • L'ensemble de la base de données est chargée en mémoire PHP en utilisant PDO::fetchAll, plutôt que ligne par ligne en utilisant PDO::fetch.
  • Cela dépasse largement la mémoire allouée à PHP (128M dans mon cas, 128M pour les mutualisés OVH, 128M chez Online.net, 32M chez Free pages perso).

Une problématique associée est celle de la compression du texte pour diminuer la taille de la base de données.

Enfin, la pagination lors des recherches ne sera plus un problème après #202


Une possibilité est d'utiliser PDO:fetch, qui éviterait les problèmes de mémoire, mais serait toujours lent et demanderait toujours beaucoup de ressources (transfert de toute la base de données vers PHP).

Je propose du coup de passer à une recherche de texte côté base de données.

De même, il semble que la compression du texte côté base de données soit possible à la fois pour MySQL et SQLite.


Pour MySQL, la recherche de texte est incluse.
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

La compression de texte est aussi incluse depuis longtemps MySQL 5.5.~~
Vérifier aussi ce qui est possible en mutualisé.
http://37signals.com/svn/posts/3571-scaling-your-database-via-innodb-table-compression
http://www.mysqlperformanceblog.com/2012/05/30/data-compression-in-innodb-for-text-and-blob-fields/


Pour SQLite, ce sont les modules FTS3, ou mieux FTS4, qui font cela http://www.sqlite.org/fts3.html
FTS 3 ou 4 semble communément disponible https://www.mediawiki.org/wiki/Manual:SQLite#SQLite_installation (à vérifier).

FTS4 permet entre autres la compression du texte (à vérifier).
http://www.sqlite.org/fts3.html#fts4_options

FTS4 est disponible depuis SQLite 3.7.4 (2010-12-08), qui est inclus depuis PHP 5.3.6 (2011-03-17) http://php.net/ChangeLog-5.php#5.3.6 , qui est inclus depuis Ubuntu 12.04 (2012-04, l'actuelle LTS) http://packages.ubuntu.com/precise/php5 , Debian 7.2 Wheezy (2013-05-04, l'actuelle stable) http://packages.debian.org/wheezy/php5 (et donc Raspian pour Raspberry Pi aussi) , Fedora 15 (2011-05-24).
(Vérifier si FTS4 est bien activé de base)


Il serait bien de lancer ce changement en même temps que #202 pour ne changer qu'une fois la base de données et pouvoir faire un script de conversion efficace.
Je contribue volontiers.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions