2011-10-12 2 views
2

Je cherche une bibliothèque pour C/C++/Obj-C pour maintenir le cache sur disque pour mes objets.Bibliothèque pour maintenir le cache sur disque

  • Il y a un grand nombre d'objets (des dizaines de milliers) et chaque objet est 100 + Kb taille
  • objets sont constamment accessibles/ajoutés, parfois grand groupe d'objets est remplacé

Actuellement Je stocke chaque objet dans un fichier séparé mais je ne veux pas créer autant de fichiers dans le système de fichiers. Y at-il une bibliothèque pour travailler avec un tel cache qui utilisera un ou plusieurs fichiers à la place?

+0

Une bibliothèque de compression ferait cela. Voir cette [question] [1]. [1]: http://stackoverflow.com/questions/230984/compression-api-on-the-iphone –

+0

vous pouvez créer un objet qui contiendra tous vos fichiers et en faire sérialisation pour sauver le fichier binaire, et ajouter des méthodes pour lire et écrire dans le fichier uniquement lorsque cela est nécessaire (la performance est une préoccupation pour vous) –

Répondre

2

J'ai résolu mon problème en utilisant la bibliothèque Tokyo Cabinet. Fonctionne plus vite que l'utilisation de fichiers séparés pour chaque objet.

3

Vous pouvez créer une collection (NSArray, NSSet, NSDictionary) avec tous vos objets et utiliser NSKeyedArchiver/NSKeyedUnarchiver pour la mettre dans un seul fichier.

Vous pouvez également utiliser une base de données SQLite ou CoreData, l'avantage étant que vous n'avez pas besoin de tout charger en mémoire à la fois si, vous en sortez simplement des objets si nécessaire. Surtout si vous avez (des dizaines de milliers * 100 + Kb, qui ne rentreraient jamais dans la mémoire de toute façon ...). Vous pouvez également utiliser des bibliothèques de sérialisation C++ (bien que leur utilisation avec les objets obj c soit difficile ..., plus recommandée pour les objets C++) comme boost serialization/archive (peut produire des binaires, du texte, xml), encore une fois vous pouvez utiliser des collections (std :: list, std :: map ...) pour les stocker dans un seul fichier.

+0

Je pensais à l'aide de SQLite mais je ne sais pas comment sa performance sera avec beaucoup de grandes objets. Aussi, je n'ai pas besoin de SQL, simple stockage de clé-> blob est suffisant. Je pense qu'il devrait y avoir une bibliothèque spécialisée pour la mise en cache, mais je ne peux pas le trouver. – mifki

+0

A partir du site Web SQLite: Le nombre maximal d'octets dans une chaîne ou un BLOB dans SQLite est défini par la macro du préprocesseur SQLITE_MAX_LENGTH. La valeur par défaut de cette macro est de 1 milliard (1 milliard ou 1 000 000 000). http://www.sqlite.org/limits.html – jbat100

Questions connexes