C'est une décision dont on parle beaucoup. Et à mon avis, c'est une question de goût personnel. Assez comme vim/emacs, genre de débats Windows/Linux. Pas si chauffé.
Les deux côtés ont leurs avantages et leurs inconvénients. Lorsque vous les stockez dans une base de données, vous n'avez pas besoin de vous soucier du nom de fichier et de l'emplacement. La gestion est également plus facile (vous supprimez la ou les lignes contenant les BLOB, et c'est tout). Mais les fichiers sont également plus difficiles d'accès et vous avez besoin d'écrire du code wrapper d'une manière ou d'une autre (par exemple certains de ces liens "download.php"). D'autre part, si les données binaires sont stockées dans un fichier séparé, la gestion est plus compliquée (vous devez d'abord ouvrir le fichier approprié à partir du disque en construisant le nom de fichier). Sur les grands ensembles de données, vous pouvez rencontrer des goulets d'étranglement du système de fichiers lorsque le nombre de fichiers dans un répertoire devient très important (mais cela peut être évité en créant facilement des sous-répertoires). Mais alors, si les données sont stockées en tant que fichiers, les remplacer devient tellement plus facile. D'autres personnes peuvent également y accéder sans avoir besoin de connaître les internes (imaginez par exemple un utilisateur qui s'amuse à personnaliser son interface utilisateur).
Je suis certain qu'il ya d'autres points à soulever, mais je ne veux pas écrire trop maintenant ...
Je dirais: Pensez à ce que les opérations que vous voulez faire avec le photos (et les limites des deux méthodes de stockage), et de là prendre une décision éclairée. Il n'y a pas grand-chose qui puisse mal tourner.
TX-Log et FS-Journal
sur une enquête plus approfondie que je trouve un peu plus d'informations:
- SQLite utilise un journal des transactions
- Android utilise YAFFS points de montage sur le système et VFAT sur la Carte SD. Les deux sont (au meilleur de mes connaissances) non-publiés.
Je ne sais pas l'implémentation exacte du TX-Log de SQLite, mais il est à prévoir que chaque opération INSERT
/UPDATE
effectuera deux écritures sur le disque. Je peux me tromper (cela dépend en grande partie de la mise en œuvre des transactions), mais franchement, je ne pouvais pas prendre la peine de parcourir le code source de SQLite. Il me semble que nous commençons à diviser les cheveux ici (optimisation prématurée n'importe qui?) ...
Comme les deux systèmes de fichiers (YAFFS et VFAT) ne sont pas journalisés, vous n'avez aucune opération d'écriture "cachée" supplémentaire.
Ces deux points parlent en faveur du système de fichiers.
Notez que cette information doit être prise avec un grain de sel. J'ai seulement parcouru les résultats Google de YAFFS journaling
et sqlite transaction log
. J'ai peut-être manqué quelques détails.
Notez également que la base de données sqlite est stockée en tant que fichier unique; vous pourriez rencontrer des limitations de système de fichiers (par exemple, la fameuse limite de taille de fichier de 4 Go sur FAT32). Juste quelque chose à garder à l'esprit si vous prévoyez de distribuer l'application sur thumbdrives ou quelque chose. – Piskvor