Je fais face à des blobs jusqu'à - j'estime - environ 100 kilo-octets en taille . Les données sont déjà compressées.MySQL: Blobbing efficace?
moteur de stockage InnoDB MySQL 5.1
Frontend: PHP (Symfony Propel ORM)
Quelques questions:
je l'ai lu quelque part que ce n'est pas bon de mettre à jour blobs , parce que il conduit à la réallocation, la fragmentation, et donc mauvaises performances . Est-ce vrai? Toute référence à ce sujet? Initialement, les blobs sont construits en ajoutant des blocs de données. Chaque bloc a une taille maximale de 16 kilo octets. Est-il plus efficace d'utiliser une table de blocs séparés à la place, par exemple avec des champs comme ci-dessous?
parent_id, position, chunk
Ensuite, pour obtenir l'ensemble de blob, on pourrait faire quelque chose comme:
SELECT GROUP_CONCAT(chunk ORDER BY position) FROM chunks WHERE parent_id = 187
Le résultat serait utilisé dans un script PHP.
Y at-il une différence entre les types de blobs, à l'exception de la taille nécessaire pour les métadonnées, qui devrait être négligeable.
GROUP_CONCAT() n'est pas un bon candidat pour cela. Par défaut, il est limité à une longueur maximale de 1024 octets (bien que vous puissiez le modifier avec le group_concat_max_len). Vous devez également être très prudent lors de la construction de la requête - que se passe-t-il si les fragments sont groupés/concaténés dans le mauvais ordre? –
Je ne vois pas de problème avec la limite, car elle peut être étendue. Concernant la concaténation dans le bon ordre: C'est pourquoi je propose le champ 'position'. Cela ne devrait-il pas être suffisant? – feklee
sélectionnez simplement chaque morceau et concattez-les en PHP. ou, si vous les publiez, affichez-les sans les concaténer du tout. – araqnid