Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Berkeley BD: quand faire des sync?

4 réponses
Avatar
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

4 réponses

Avatar
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.

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

Avatar
manu
DINH Viêt Hoà wrote:

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



Avatar
DINH Viêt Hoà

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


Avatar
manu
DINH Viêt Hoà wrote:

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