Quelle est « la synchronisation physique » de la base de données du Cabinet de Kyoto?

StackOverflow https://stackoverflow.com/questions/4299896

Question

La fonction begin_transaction prend un argument booléen qui indique quel type de synchronisation doit être fait; physique ou logique lorsqu'il est vrai lorsque faux.

Qu'est-ce que cela veut dire quand il se réfère à « physique » ou dur, la synchronisation?

Était-ce utile?

La solution

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

  • moyens de synchronisation logiques que les modifications DB sont écrits à partir du cache SGBD au système de fichiers. En C vous faire en utilisant fprintf / fwrite / écriture / etc.

  • synchronisation physique signifie ce qui précède, l'opération supplémentaire de demander au système d'exploitation pour pousser lesdits changements à la mémoire permanente (disque dur, SSD, peu importe) plutôt que de les maintenir dans le système de fichiers cache. Cela assure que ces changements ne sont pas perdues si quoi que ce soit untowards arrive. Sur un système Linux / POSIX qui impliquerait d'appeler l'appel 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 atteindre la sémantique véritables ACID pour une base de données, toutes les opérations doivent être synchronisés sur le support de stockage permanent. Sinon, votre demande devrait être en mesure de traiter les transactions qui ont échoué en silence - le SGBD pousserait les transactions sur le système de fichiers et revenir avec succès, mais les changements pourraient se perdre si par exemple le système puissance perdue.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top