BerkeleyDB JE 環境に、結合されたメインデータベースと (一時的および補助的な) データベースがあります。問題は次のとおりです。
- トランザクションを使用しており、原子性はメイン DB と補助 DB の両方にまたがる必要があります
- したがって、ドキュメントを理解しているので、単一の環境を使用する必要があります (トランザクションは複数の環境にまたがることはできません)。
- したがって、2 つのデータベースは 1 つのディレクトリを共有します。しかし、彼らは同じファイルも共有していますか?
- aux DB は非常に大きくなる可能性があるため、アプリケーションの開始時に消去したいと考えています。
- 私は
e.truncateDatabase(txn, name, false)
そうしていました - ただし、データベース ディレクトリは決して縮小しないようです。そのため、すべてのアプリケーション実行で aux DB がたとえば 500 MB を使用する場合、4 回の実行後、切り捨てに関係なく、ディレクトリはすでに 2 GB になります。また、メイン DB と補助 DB の個別のファイルが表示されません
ディスク領域が解放されるように、どうすればauxデータベースを完全に消去できますか? これはパフォーマンスの問題でもあります。これらの数 GB の大きなディレクトリでは、BDB の起動と終了に深刻な問題が発生するためです。特定のファイルだけを削除できるように、BDB に別のファイルを使用させることはできますか?
どういうわけか、この単一の環境が問題の根源にあるようです。たとえば、補助 DB を提供してパフォーマンスを向上させたいと考えていますsetTxnNoSync()
が、これはメイン DB にも影響します。
aux DB で使用するsetTemporary
と、実行時例外が発生します。一時データベースでトランザクションを使用することは許可されていないようです!?
java.lang.IllegalArgumentException: データベース aux を開こうとしたが、次の排他的プロパティの 2 つ以上が true である: deferredWrite、temporary、transactional