2015-08-04 1 views
2

je travaillais avec LMDB ++ (C++ wrapper pour LMDB) et j'ai obtenu cette erreur:LMDB augmenter map_size

terminate called after throwing an instance of 'lmdb::map_full_error' what(): mdb_put: MDB_MAP_FULL: Environment mapsize limit reached

googling m'a dit que le map_size par défaut est faible en LMDB. Comment puis-je augmenter map_size?

Répondre

4

La taille de la carte LMDB par défaut est 10 MiB, ce qui est en effet trop petit pour la plupart des utilisations.

Pour définir la taille de la carte LMDB en utilisant C++ wrapper, vous devez appeler lmdb::env#set_mapsize() juste après avoir créé votre environnement LMDB et avant d'ouvrir l'environnement ou de créer votre transaction.

Voici un exemple de base qui augmente la taille de la carte à 1 Gio:

/* Create and open the LMDB environment: */ 
auto env = lmdb::env::create(); 
env.set_mapsize(1UL * 1024UL * 1024UL * 1024UL); 
env.open("./example.mdb", 0, 0664); 

Si vous calculez une grande taille de la carte comme dans l'exemple ci-dessus, prendre soin d'inclure le suffixe de type approprié (UL ou ULL) sur vos littéraux entiers, ou vous pouvez rencontrer un débordement d'entier silencieux et se demander pourquoi la taille de la carte n'a pas augmenté à ce que vous attendiez.

Voir aussi la documentation de la fonction C sous-jacente du LMDB mdb_env_set_mapsize() pour le mot faisant autorité sur le fonctionnement de la taille de la carte.