Berkeley BD: quand faire des sync?

Le
manu
Question sur Berkeley DB: faut il valider les operations par des appels
à la methode sync, ou bien faut il laisser DB se debrouiller et flusher
quand il veut?

--
Emmanuel Dreyfus
A lire: 240 pages en français sur l'administration UNIX avec BSD
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
manu@netbsd.org
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DINH Viêt Hoà
Le #456057

Question sur Berkeley DB: faut il valider les operations par des appels
à la methode sync, ou bien faut il laisser DB se debrouiller et flusher
quand il veut?


tu peux éventuellement fermer le fichier pour flusher la base, non ?

Enfin, sinon, tu as un appel ->sync(), qui en théorie, fait ce que tu
veux.

typedef struct {
DBTYPE type;
int (*close)(const DB *db);
int (*del)(const DB *db, const DBT *key, u_int flags);
int (*fd)(const DB *db);
int (*get)(const DB *db, DBT *key, DBT *data, u_int flags);
int (*put)(const DB *db, DBT *key, const DBT *data,
u_int flags);
int (*sync)(const DB *db, u_int flags);
int (*seq)(const DB *db, DBT *key, DBT *data, u_int flags);
} DB;

sync A pointer to a routine to flush any cached information to disk.
If the database is in memory only, the sync routine has no
effect and will always succeed.


--
DINH V. Hoa,

"Le monde n'attend que toi ! " -- FiLH

manu
Le #456056
DINH Viêt Hoà
Question sur Berkeley DB: faut il valider les operations par des appels
à la methode sync, ou bien faut il laisser DB se debrouiller et flusher
quand il veut?


tu peux éventuellement fermer le fichier pour flusher la base, non ?

Enfin, sinon, tu as un appel ->sync(), qui en théorie, fait ce que tu
veux.


Oui, mais la question que je me pose, c'est puis-je l'appeller à tout
bout de champ, ou bien est-ce que je casse un mecanisme d'optimisation
des I/O en le faisant?

--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3



DINH Viêt Hoà
Le #456052

tu peux éventuellement fermer le fichier pour flusher la base, non ?

Enfin, sinon, tu as un appel ->sync(), qui en théorie, fait ce que tu
veux.


Oui, mais la question que je me pose, c'est puis-je l'appeller à tout
bout de champ, ou bien est-ce que je casse un mecanisme d'optimisation
des I/O en le faisant?


s'ils ont fait ça bien, à priori, je dirai que ça ne casse pas le cache
en lecture.

Par contre, les perf en écriture, ça dépend de ce que tu appelles "à
tout bout de champ". Parce que j'imagine que Berkeley DB aurait plutôt
tendance à grouper les écritures. Si jamais tu t'amuses à appeler
->sync() un peu trop souvent, évidemment, tu perds l'optimisation en
écriture.

Pour ton application, ne serait-il pas mieux de placer des espèces de
points de reprise ? C'est-à-dire, essayer de déterminer un point dans
ton application où tu souhaites plutôt être sûr d'avoir tout sur disque,
au détriment des performances.

--
DINH V. Hoa,

"Le monde n'attend que toi ! " -- FiLH


manu
Le #462249
DINH Viêt Hoà
s'ils ont fait ça bien, à priori, je dirai que ça ne casse pas le cache
en lecture.


C'est tout le sens de a question :)

--
Emmanuel Dreyfus
A lire: 240 pages en français sur l'administration UNIX avec BSD
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3


Publicité
Poster une réponse
Anonyme