2016-04-21 1 views
0

Je souhaite utiliser SQLite pour stocker certaines informations de métadonnées dans un fichier. Ce fichier est déjà mmap'd. Ce que je veux être en mesure de faire est de créer une base de données SQLite, en passant un char * pour lui indiquer où créer la base de données, au lieu de l'allouer elle-même. Cela peut-il être fait? Les documents SQLite pour les bases de données en mémoire disent simplement d'utiliser ": memory:", et que la base de données sera détruite à la fin du processus, sans indication de l'utilisation des données déjà existantes ou de leur persistance.Comment créer une base de données en mémoire SQLite à une adresse spécifique

Si non, quelles sont les solutions de contournement sur Linux? Y a-t-il un mmap "inverse", donc je peux prendre une adresse et la mapper dans un nouveau fichier? (So ​​/ foo serait une vue sur une partie de/bar?)

Répondre

1

Les bases de données en mémoire ne sont que des bases de données dont le cache de page n'est pas sauvegardé sur le disque.

Il n'existe aucun mécanisme permettant d'accéder à ces pages.

Votre seul choix serait d'implémenter votre propre VFS pour rediriger les accès aux fichiers vers la partie correcte de ce fichier.

+0

« In- les bases de données de mémoire ne sont que des bases de données dont le cache de pages n'est pas sauvegardé sur le disque. " Cela doit être en référence spécifique aux bases de données en mémoire SQLite, car ce n'est certainement pas le cas des systèmes de bases de données en mémoire en général. –

1

Je ne suis pas un expert SQLite, mais il semble que vous pouvez utiliser les informations ici pour utiliser votre propre allocateur, et contrôler l'emplacement de mémoire à laquelle SQLite crée la base de données en mémoire: https://www.sqlite.org/c3ref/mem_methods.html

+0

Mais vous ne savez pas quelle allocation est utilisée dans quel but. –

+0

Est-ce important? Si votre objectif est de contrôler ce que la mémoire SQLite utilise (c'est-à-dire connaître/contrôler l'adresse mémoire à laquelle l'IMDB est créée), il semble que ce soit le cas. Peut-être qu'il me manque quelque chose ... –

+0

Je ne m'inquiète même pas de le créer sur le disque. Mais j'ai besoin de l'ouvrir de mémoire. On dirait qu'un VFS est le chemin à parcourir. – MichaelGG