2012-09-06 2 views
1

Je développe une application qui utilise Berkeley Db. Il doit être conforme à ACI (mais pas ACID), et les performances sont très importantes. Performace était la raison pour laquelle j'avais choisi Berkeley Db. Mais maintenant Berkeley Db semble être un goulot d'étranglement à cause de l'exploitation forestière. Le problème est que plus les données sont stockées dans la base de données, plus les valeurs à stocker sont longues. Je faisComment utiliser les transactions Berkeley Db sans se connecter/écrire aux fichiers __db.00x?

envp->set_flags(envp, DB_TXN_NOSYNC, 1); 

puis ouvrez l'environnement avec les drapeaux:

DB_CREATE  | // Create the environment if it does not exist 
    DB_INIT_TXN | // Initialize the transactional subsystem. 
    DB_INIT_MPOOL | // Initialize the memory pool (in-memory cache) 
    DB_INIT_LOCK | // Initialize the locking subsystem 
    DB_THREAD; 

Mais il est encore l'enregistrement sur le disque, et performace devient extrêmement pauvre, comme la quantité de données augmente et les valeurs étant emmagasinés obtenir plus, je suppose, la grande majorité du temps est consacré à les enregistrer dans des fichiers journaux-- charge moyenne est

load average: 19.65, 19.12, 17.00 

Je ne nécessitent pas de journaux à la synchronisation runtime - Je n'ai besoin que d'ACI, mais pas d'ACID.

Existe-t-il un moyen d'arrêter la journalisation ou de désactiver l'écriture des journaux sur le disque? Edit: Comme personne n'a répondu, j'ai beaucoup googlé et trouvé un way pour désactiver la journalisation, mais, malheureusement, cela n'a pas aidé - l'environnement écrit encore beaucoup dans les fichiers __db.00x, et je ne sais pas Je ne sais pas pourquoi et comment le faire en mémoire.

Répondre

0

Désactiver fsync (2) est un moyen d'améliorer les performances.

Écrivez une routine de remplacement qui renvoie 0 et définissez le vecteur fsync lors de l'ouverture d'une base de données Berkeley.

Questions connexes