c++ - BerkeleyDB Concurrency

Translate
  • Quel est le niveau optimal de concurrence que l'implémentation C ++ de BerkeleyDB peut raisonnablement prendre en charge?
  • Combien de threads puis-je avoir martelé la base de données avant que le débit ne commence à souffrir en raison de conflits de ressources?

J'ai lu le manuel et je sais comment définir le nombre de verrous, de casiers, de taille de page de base de données, etc.

Mon application est assez simple, je vais faire des récupérations et des mises d'enregistrements d'environ 1 Ko chacun. Pas de curseurs, pas de suppression.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Cela dépend du type d'application que vous créez. Créez un scénario de test représentatif et commencez à vous lancer. Ensuite, vous connaîtrez la réponse définitive.

Outre votre cas d'utilisation, cela dépend également du processeur, de la mémoire, du bus frontal, du système d'exploitation, des paramètres de cache, etc.

Sérieusement, testez simplement votre propre scénario.

Si vous avez besoin de quelques chiffres (cela peut en fait ne rien dire dans votre scénario):

La source
Translate

Je suis tout à fait d'accord avec le point de Daan: créez un programme de test et assurez-vous que la manière dont il accède aux données reproduit le plus fidèlement possible les modèles que vous attendez de votre application. Ceci est extrêmement important avec BDB car différents modèles d'accès donnent un débit très différent.

En dehors de cela, ce sont des facteurs généraux qui, selon moi, ont un impact majeur sur le débit:

  1. Méthode d'accès (qui dans votre cas, je suppose, est BTREE).

  2. Niveau de persistance avec lequel vous avez configuré DBD (par exemple, dans mon cas, l'indicateur d'environnement 'DB_TXN_WRITE_NOSYNC' a amélioré les performances d'écriture d'un ordre de grandeur, mais il compromet la persistance)

  3. L'ensemble de travail tient-il dans le cache?

  4. Nombre de lectures vs. Écrit.

  5. Quelle est la répartition de votre accès (rappelez-vous que BTREE a un verrouillage au niveau de la page - donc accéder à différentes pages avec différents threads est un gros avantage).

  6. Modèle d'accès - signifie quelle est la probabilité que les threads se verrouillent les uns les autres, voire même les interblocages, et quelle est votre politique de résolution des blocages (celle-ci peut être un tueur).

  7. Matériel (disque et mémoire pour le cache).

Cela revient au point suivant: la mise à l'échelle d'une solution basée sur DBD afin qu'elle offre une plus grande concurrence d'accès a deux façons principales de procéder; minimisez le nombre de verrous dans votre conception ou ajoutez plus de matériel.

La source
Translate

Cela ne dépend-il pas du matériel ainsi que du nombre de threads et d'autres choses?

Je ferais un test simple et l'exécuterais avec des quantités croissantes de threads martelés et je verrais ce qui me semble le mieux.

La source
Translate

Ce que j'ai fait lorsque je travaillais sur une base de données aux performances inconnues, c'était de mesurer le temps de traitement de mes requêtes. J'ai continué à augmenter le nombre de threads jusqu'à ce que le temps de rotation diminue, et à laisser tomber le nombre de threads jusqu'à ce que le temps de rotation s'améliore (enfin, c'était des processus dans mon environnement, mais peu importe).

Il y avait des moyennes mobiles et toutes sortes de mesures impliquées, mais la leçon à retenir était: il suffit de s'adapter à la façon dont les choses fonctionnent en ce moment. Vous ne savez jamais quand les DBA amélioreront les performances ou le matériel sera mis à niveau, ou peut-être qu'un autre processus viendra charger le système pendant que vous exécutez. Alors adaptez-vous.

Oh, et autre chose: évitez les changements de processus si vous le pouvez - regroupez les choses.


Oh, je devrais être clair: tout s'est passé au moment de l'exécution, pas pendant le développement.

La source
Translate

La façon dont je comprends les choses, Samba a créétdbpour autoriser "plusieursécrivains"pour un fichier de base de données particulier. Donc, si votre charge de travail a plusieurs rédacteurs, vos performances peuvent être mauvaises (comme dans, le projet Samba a choisi d'écrire son propre système, apparemment parce qu'il n'était pas satisfait des performances de Berkeley DB dans ce cas).

D'un autre côté, si votre charge de travail comporte de nombreux lecteurs, la question est de savoir dans quelle mesure votre système d'exploitation gère plusieurs lecteurs.

La source