'faudrais que tu nous donne un peu plus de détails sur ta base de données.
- Elle doit être utilisée par un seul programme ou par plusieurs en même temps ?
- Ta liste d'éléments, elle est toute seule ou il y en a plusieurs, avec des relations entre elles ?
Si c'est la première réponse dans les deux cas, et qu'en plus les opérations d'insertion sont rares, alors tu as plus vite fait de mapper un fichier en mémoire avec mmap() ou mmap64(), de récupérer de le pointeur sur la zone et de le caster, genre:
typedef struct _element
{
char element [128];
unsigned long int checksum;
} Element;
Element * ptr;
ptr= mmap (LesArgumentsQuiVontBien);
Le contenu de ton fichier sera alors immédiatement utilisable comme si c'était un tableau en mémoire.Un petit « ptr[x] » pour retrouver immédiatement l'élément x. Simplicité et rapidité: C'est le système qui s'occupe du chargement/déchargement des pages et de choisir leur granularité.
Pour retrouver tous les éléments, un simple balayage de 0 à n-1 éléments. Techniquement, il n'est pas possible de faire plus rapide. Tu peux ajouter un index à tes « éléments », mais si tu dis que les insertions sont rares, tu peux te permettre de les trier en temps réel. Gain de temps à la lecture grandement amélioré !
Le seul tout petit souci que tu peux avoir apparait lorsque tu modifies la structure de Element: Il faut reconstruire le fichier. C'est exactement la même chose avec un SGBD, sauf que l'opération se fait automatiquement lorsque tu lui demande. Quoiqu'il en soit cela reste très simple: Deux définitions de structures, deux pointeurs ptr1 et ptr2, deux mmaps et une boucle qui scanne tous tes éléments, avec à chaque itération une copie de l'une des structure vers l'autre, et c'est fini.
# Et un simple fichier ?
Posté par Obsidian . En réponse au message Une base de donnée intégrée ?. Évalué à 2.
- Elle doit être utilisée par un seul programme ou par plusieurs en même temps ?
- Ta liste d'éléments, elle est toute seule ou il y en a plusieurs, avec des relations entre elles ?
Si c'est la première réponse dans les deux cas, et qu'en plus les opérations d'insertion sont rares, alors tu as plus vite fait de mapper un fichier en mémoire avec mmap() ou mmap64(), de récupérer de le pointeur sur la zone et de le caster, genre:
typedef struct _element
{
char element [128];
unsigned long int checksum;
} Element;
Element * ptr;
ptr= mmap (LesArgumentsQuiVontBien);
Le contenu de ton fichier sera alors immédiatement utilisable comme si c'était un tableau en mémoire.Un petit « ptr[x] » pour retrouver immédiatement l'élément x. Simplicité et rapidité: C'est le système qui s'occupe du chargement/déchargement des pages et de choisir leur granularité.
Pour retrouver tous les éléments, un simple balayage de 0 à n-1 éléments. Techniquement, il n'est pas possible de faire plus rapide. Tu peux ajouter un index à tes « éléments », mais si tu dis que les insertions sont rares, tu peux te permettre de les trier en temps réel. Gain de temps à la lecture grandement amélioré !
Le seul tout petit souci que tu peux avoir apparait lorsque tu modifies la structure de Element: Il faut reconstruire le fichier. C'est exactement la même chose avec un SGBD, sauf que l'opération se fait automatiquement lorsque tu lui demande. Quoiqu'il en soit cela reste très simple: Deux définitions de structures, deux pointeurs ptr1 et ptr2, deux mmaps et une boucle qui scanne tous tes éléments, avec à chaque itération une copie de l'une des structure vers l'autre, et c'est fini.
Bonne chance.