Concurrence BerkeleyDB

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

J'ai lu le manuel et je sais comment définir le nombre de verrous, de casiers, la taille des pages de la base de données, etc., mais j'aimerais simplement avoir des conseils de quelqu'un qui a une expérience concrète de la simultanéité BDB.

Mon application est assez simple, je vais faire des extractions et des insertions d'enregistrements d'environ 1 Ko chacun. Pas de curseurs, pas de suppression.

请先 登录 后评论

3 réponses

svrist

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

Je ferais un test simple et je l'exécuterais avec un nombre croissant de fils martelés et je verrais ce qui semble le mieux.

请先 登录 后评论
Josh

Ce que j'ai fait lorsque j'ai travaillé sur une base de données aux performances inconnues, c'est de mesurer le temps d'exécution de mes requêtes. J'ai continué à augmenter le nombre de threads jusqu'à ce que le délai d'exécution diminue, et à baisser le nombre de threads jusqu'à ce que le délai d'exécution 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 : adaptez-vous simplement à 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 êtes en cours d'exécution. Alors adaptez-vous.

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

Oh, je dois préciser : tout cela s'est produit au moment de l'exécution, pas pendant le développement.

请先 登录 后评论
yoav.aviram

Je suis tout à fait d'accord avec le point de vue de Daan : créez un programme de test et assurez-vous que la manière dont il accède aux données imite aussi fidèlement que 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 produisent un débit très différent.

En dehors de cela, voici les 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 cela compromet la persistance)

  3. Le jeu de travail tient-il dans le cache ?

  4. Nombre de lectures vs. Écrit.

  5. La répartition de votre accès (rappelez-vous que BTREE dispose d'un verrouillage au niveau de la page : accéder à différentes pages avec différents fils de discussion est donc un gros avantage).

  6. Modèle d'accès – c'est-à-dire la probabilité que les threads se verrouillent les uns les autres, voire se bloquent, et quelle est votre politique de résolution des blocages (celui-ci peut être un tueur).

  7. Matériel (disque

请先 登录 后评论