2009-04-16 11 views
6

Je construis une application basée sur une seule table avec une colonne avec du texte. Occasionnellement, une colonne adjacente aura une image. Est-il préférable de stocker cette image en tant que BLOB dans SQLITE ou devrais-je les stocker sur le système de fichiers et de les référencer à partir de mes programmes. Merci!SQLite Blob OU système de fichiers pour les images

+0

Juste pour clarifier - c'est pour une application iPhone, correct? – AnonJr

Répondre

2

EDIT:

didnt vous vous rendez compte de l'environnement voulu dire iPhone en particulier. Dans ce cas, j'utiliserais la base de données uniquement pour la simplicité d'avoir tout le contenu au même endroit. Vous n'aurez pas à vous soucier de l'évolutivité car ce n'est pas comme si votre iphone allait être utilisé comme serveur ou quoi que ce soit.

Réponse d'origine:

Je n'ai pas de liens pour étayer cette thèse, mais je me souviens lire dans plusieurs études que la « coupure » est de 1 Mo pour l'efficacité blob. Mais cela peut aller jusqu'à 10 Mo avec une matrice de disques assez rapide. Totalement dépend du système. Donc, fondamentalement, compte tenu de votre seuil d'efficacité, toute donnée plus petite que celle-ci serait mieux servie par la base de données, quelque chose de plus grand, juste index dans la base de données et laisser dans un cache de fichiers.

+0

Il utilise iphone, donc le disque lui-même n'est pas évolutif. – Kevlar

+0

ahh, n'a pas vu cette partie. –

1

Cela dépend vraiment de votre application. Avoir les images stockées dans une base de données vous rendra la vie plus facile que vous les avez facilement accessibles dans un seul point au lieu de les avoir dans des fichiers séparés qui pourraient avoir disparu. D'un autre côté, de nombreuses images, plutôt volumineuses, pourraient s'avérer trop nombreuses pour une base de données SQLITE. Dans votre situation, je voudrais juste les référencer dans la base de données.

3

Les fichiers vous causeront moins de problèmes à long terme. J'aime vraiment ne pas servir des tonnes de fichiers de votre serveur de base de données, surtout quand vous changez de taille

+1

Les fichiers faciliteront le chargement des images de manière efficace. Si vous utilisez [UIImage imageNamed: @ "blah.png"], l'image sera chargée dans la RAM purgable et chargée/déchargée du fichier si nécessaire (c'est-à-dire quand elle ne sera plus visible et si vous avez trop de mémoire, elle sera purgée rechargé quand il est visible à nouveau) – Gabe

+0

Wow ... donc l'API est couplée au système de fichiers et pas un type abstrait? ... –

2

J'aime conserver les images dans le système de fichiers car UIImage peut mettre en cache les fichiers image & les vider automatiquement de la mémoire si nécessaire. Faites juste attention de ne pas changer ou supprimer un fichier image qui est chargé dans un UIImage ou vous obtiendrez des plantages ou d'autres bogues étranges.

3

En supposant que les images que vous allez utiliser ne sont pas extrêmement volumineux et qu'il n'y en a pas un nombre exorbitant, j'irais avec la base de données. J'utilise actuellement une base de données Sqlite sur plusieurs appareils Windows Mobile et WinCE différents avec plus de 10 000 petites images stockées sous forme de blobs et cela fonctionne très bien.

J'ai vu un logiciel similaire au nôtre fonctionnant sur le même matériel en utilisant le chargement d'image basé sur un fichier et il était significativement plus lent. Bien sûr, c'était sur WinCE et différents logiciels, donc ce n'est pas le meilleur test.

Je trouve que la base de données unique est beaucoup plus facile à utiliser que de nombreux fichiers d'image.

Questions connexes