Как установка параметра транзакции в ядре berkeletdb (dbapi) помогает поддерживать базу данных в среде базы данных? - PullRequest
1 голос
/ 09 июля 2011

Мы используем ядро ​​Berkeley (dbbaseapi) и уже обработали запись / ReadCDRFile с 9 отсутствием записей, теперь мы получаем разницу в производительности при использовании транзакции и без использования транзакции, которая выглядит следующим образом: -

  1. Записываем / читаем S-Max CDRFile, реализующий концепцию вторичной базы данных: -

Использование концепции вторичной базы данных (с транзакцией): -

Operation   No.of Rows  Time 
Write CDRFile   9,66,320    5.8 minutes
Read CDRFile    9,66,320    1.36 minutes

Использование концепции вторичной базы данных (без транзакции): -

Operation   No.of Rows  Time 
Write CDRFile   966320          3.27 minutes
Read CDRFile    966320          1.28 minutes

мы уже установили параметр, используемый в environmentConfig.setTransaction (true) и такой же в базе данных.

Transaction txn = databaseEnv.getDbEnv().beginTransaction(null, null);

и передано здесь: -

databaseEnv.getCdrDb().put(txn, thekey, theData);

так ответьте, как транзакция внутренне используется в базе данных и окружении

1 Ответ

0 голосов
/ 02 августа 2011

Судя по последующим вопросам, которые вы задавали, похоже, что вы вышли за рамки этого первоначального вопроса Для записи, когда она сконфигурирована для транзакций, BDB выполняет запись в журнал транзакций, чтобы обеспечить возможность восстановления в случае сбоя приложения или системы (автоматическое восстановление недоступно, когда BDB используется без транзакций).

При использовании транзакций по умолчанию BDB будет ждать, пока транзакция не будет записана полностью на диск (см. Первые два раздела Начало работы с транзакциями , чтобы получить дополнительную информацию о надежности транзакций и о том, как увеличить пропускную способность, ослабив ограничения долговечности).

В дополнение к ослаблению ограничений долговечности, как указано выше, вы также можете улучшить пропускную способность путем а) ​​включения нескольких операций (вставок) в одну транзакцию вместо вставки одной записи в отдельную транзакцию и б) с помощью Массовое размещение API через вызов API putMultiple (это уменьшит накладные расходы JNI перед вызовом)

В будущем на эти вопросы можно будет быстрее ответить на техническом форуме Berkeley DB на OTN.

Надеюсь, это поможет.

С уважением,

Dave

...