これには適していますが、入力するよりも手間がかかる場合があります。BerkeleyDBは非常に一般的なキー/値ストアであるため、「キーXの場合、値Yを保存する」と言うだけです。後で「キーXの値を教えて」と言うと、Yが返されます。これが高レベルからのすべてです。重要な信頼性プロパティ(ACID、Atomicity、Consistency、Isolation、およびDurabilityと呼ばれる)を保証するための非常に堅牢な機能を備え、優れたパフォーマンスを備えていますが、プログラマーの観点からは、単純なマップ構造です。
そうです、あなたは木を保存することができます、しかしあなたはそれらのための良い表現を決める必要があるでしょう。整数キーを選択し(BDBはキーに辞書式順序を使用するため、ビッグエンディアンのバイト順序で格納されていることを確認してください)、子の整数のリストを含む値として構造体を使用できます。ただし、すべてのトラバーサルアルゴリズムを手動で作成する必要があります。ただし、階層データにどのような要件があるかを知らなければ、より具体的な提案をすることは困難です。
速度的には、Berkeley DBはおそらくそれほど速くなることはできません(つまり、特にACIDプロパティの一部を犠牲にする場合は、それほど速くなることはありません)。これにより、マップへのインターフェイスをほぼ完全に制御できるため、理論的には、特定のユースケース向けに高度に最適化された構造を構築できます。ただし、低レベルのインターフェイスを考えると、結合、複雑なフィルタークエリ、またはその上に重要なクエリ言語を実装している場合は、大きなものに対応するために非常に高速なコードとアルゴリズムを作成する必要があります。そこにリレーショナルデータベース。
データをXMLでモデル化できる場合(そうですが、好きな人もいます)、BDB XML(現在はOracleの一部であるSleepycat)と呼ばれるBDB上に構築された既存のデータベースがあります。これにより、任意のXMLドキュメントをデータベースに保存し、データベースで高速XPathおよびXQueryクエリを実行できます。これに対する公式の.NETAPIはまだないと思いますが、非公式の.NETバインディングに出くわしたことは間違いありません。
一般に、既存のソリューションで許可されていない非常に特別な要件がない限り(これはシナリオには当てはまらないようです)、独自のデータベース(BDB上に構築されている場合でも)をロールすることはお勧めしません。効率的なアルゴリズムとコードの最適化に非常に熟練していない限り。RDFトリプルを格納している場合は、そのための専用データベースがあり、リレーショナルデータベースでさえそれらに特に適していないわけではありません。BDB XMLは、そのための実行可能なソリューションでもあります。最終的にはあなたの選択ですが、私があなたなら、低レベルのデータベース操作を処理することなく、より興味深い問題に取り組むことを選択します(したがって、実際のRDFストアの既存のパッケージの上に薄いレイヤーを使用します)。