2011-09-14 5 views
1

Je dispose de 8 téraoctets de données composées de ~ 5000 rangées d'éléments de petite taille (moins de cent octets par élément). J'ai besoin de charger des sections de ces tableaux (quelques dizaines de megs à la fois) en mémoire pour les utiliser dans un algorithme le plus rapidement possible. Les fichiers mappés en mémoire sont-ils adaptés à cette utilisation, et sinon, que dois-je utiliser d'autre?Base de données mappée en mémoire

+0

L'accès sera-t-il principalement aléatoire ou séquentiel? –

+0

séquentiel. Aussi, si possible, je voudrais interroger à partir de plusieurs threads et aussi développer les tableaux à leurs extrémités. – David

+0

Vous n'avez donc pas besoin de fonctions de base de données sophistiquées telles que l'indexation et les clés de recherche, le tri, etc? C'est essentiellement un problème de fichier plat d'accès séquentiel? Et je suppose que vous pouvez coder de manière très proche des besoins de l'application et n'avez pas besoin de produire une API générique. –

Répondre

1

Compte tenu de vos exigences, je voudrais certainement aller avec des fichiers mappés en mémoire. C'est presque exactement ce pour quoi ils ont été faits. Et puisque les fichiers mappés en mémoire consomment peu de ressources physiques, vos fichiers extrêmement volumineux auront peu d'impact sur le système par rapport aux autres méthodes, d'autant plus que des vues plus petites peuvent être mappées dans l'espace adresse juste avant d'effectuer des E/S. éléments). L'autre grand avantage est qu'ils vous donnent l'environnement de travail le plus simple possible. Vous pouvez (surtout) simplement voir vos données comme un espace d'adressage mémoire important et laisser Windows s'inquiéter de l'E/S. Évidemment, vous aurez besoin de construire des mécanismes de verrouillage pour gérer plusieurs threads, mais je suis sûr que vous le savez.

Questions connexes