2010-08-19 19 views
0

J'ai besoin d'un conteneur d'index muti basé sur des arbres rouge-noir (quelque chose comme boost::multi_index::multi_index_container) pour le cas du stockage sur disque dur. Toutes les données doivent être stockées sur le disque dur plutôt qu'en mémoire.Existe-t-il un conteneur d'index muti pour le stockage du disque dur plutôt que de la mémoire?

Existe-t-il un conteneur open source tel que les conditions décrites soient remplies?

Remarque. J'utilise C++.

Répondre

1

Si vous disposez d'une solution en mémoire, vous pouvez utiliser un fichier mappé en mémoire et un allocateur personnalisé pour obtenir un stockage persistant.

+0

Ce n'est pas vrai. Tout d'abord, la solution en mémoire est stable par rapport à une fragmentation car il existe des pages de mémoire dans le système d'exploitation. Vous avez de nombreux problèmes avec les allocations de mémoire dynamique et les désallocations dans le stockage de fichiers. Deuxièmement, il y a une restriction de 2 Go sur les systèmes 32 bits. –

+0

@alexey Toute solution basée sur des fichiers sera sujette à la fragmentation, mais un allocateur personnalisé approprié peut minimiser cela. La limite de 2 Go peut être un problème, si vous attendez un ensemble de données plus volumineux que cela. Vous pouvez utiliser plusieurs fichiers mappés, mais cela peut devenir trop complexe pour être réalisable. La question n'a pas dit que vous avez besoin de plus de 2 Go sur un système 32 bits. Peut-être était-il impliqué par le besoin de stockage de fichiers, mais je ne l'ai pas compris de cette façon. (Pardon). –

+0

Un autre problème est comment attacher un fichier existant avec des données au conteneur multi-index. –

1

Je crains de ne pas en connaître.

Pour le stockage sur disque dur, je ne peux que recommander l'utilisation de STXXL, qui propose des conteneurs STL et des algorithmes adaptés aux données qui ne peuvent être stockées que sur disque. Ils ont mis en œuvre beaucoup de choses pour permettre une manipulation plus fluide, essentiellement en mettant en mémoire cache autant que possible et en retardant l'accès au disque lorsque cela est possible.

Maintenant, cela ne vous obtenez un index à plusieurs, mais au moins vous aurez une STL :)

Alors, si vous êtes déterminé, vous pouvez multi-index port à utiliser les installations fournies par STXXL : ils ont décorrélé l'accès/mémoire cache IO des conteneurs eux-mêmes.

Ou vous pouvez simplement écrire ce dont vous avez besoin en fonction de leurs conteneurs conformes à la norme STL.

1

Que diriez-vous de SQLite? Il peut utiliser le disque comme magasin de sauvegarde et prend en charge plusieurs index sur les données, comme le fait Boost Multi Index.