2010-11-29 14 views

Répondre

8

Je ne suis pas exactement sûr les équivalents Java, mais:

  • signifie synchronisation logique que tout changement DB sont écrits à partir du cache SGBD du système de fichiers. En C, vous le feriez en utilisant fprintf/fwrite/write/etc. La synchronisation physique signifie ce qui précède, avec l'opération supplémentaire de demander au système d'exploitation de pousser ces changements vers le stockage permanent (disque dur, SSD, peu importe) plutôt que de les conserver dans le cache du système de fichiers. Cela garantit que ces changements ne sont pas perdus si quelque chose de mal se passe. Sur un système Linux/POSIX qui impliquerait d'appeler les appels système fsync() ou fdatasync().

EDIT:

Apparemment, l'équivalent de fsync() en Java est FileDescriptor.sync():

http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileDescriptor.html#

Le fait est que, pour obtenir une véritable sémantique d'acide pendant une DB , toutes les transactions doivent être synchronisées avec le support de stockage permanent. Sinon, votre application devra être capable de traiter les transactions qui ont échoué silencieusement - le SGBD enverra les transactions au système de fichiers et retournera avec succès, mais alors les changements pourraient être perdus si par ex. le système a perdu le pouvoir.

Le problème avec la synchronisation physique est qu'elle peut avoir un impact significatif sur les performances. Les disques durs peuvent gérer un nombre limité de transactions par seconde (les SSD sont un lot plus rapide), ce qui explique pourquoi la première chose à faire pour améliorer les performances de DB consiste à regrouper des insertions dans des transactions plus importantes.

+1

Quelqu'un pourrait ajouter "kyotocabinet" à cette question s'il vous plaît? Je n'ai pas 1.500 pour créer de nouveaux tags. Merci! –