質問

グッドニュース!バージョン4.8以来のBerkeleyDBは、C#のインターフェースを持っています。 BerkeleyDBのが原因、それは非SQL自然だと私にとって非常に興味深いものです。私は誰かが、キー/値ペアの多くを保存したい場合、それは優れたツールであることを知っています。そして、私は「取り付け可能」のテーブルを知っています。何を私は知らないのBerkeleyDBで階層データを格納する方法です。それは一般的にはこれに適しているのですか?

私は何をしたいですか?私はdmoz.orgデータを保存したいです。今私は、MySQL DBにインポートされたすべてのthous RDFSを持っています。しかし、私は、ストアドプロシージャまたは他の複雑な機能を必要としません。私は私のオンラインRSSリーダーのためのデータストアとしてのBerkeleyDBを使用したいです。だから、( - 百万人を。私はDMOZからインポートしたカテゴリを言ったように、私はそれらの多くを持っているだけでなく、フィード)カテゴリツリーにフィードがあります。そして...私はフィード項目について、忘れてしまいました。私はBerkleyDB :-)で、あまりにもそれらを保存したいです。

これは、私はそれは大丈夫です,,,手動ですべての関係を実装するために持っているように見えるのです...しかし、私は尋ね最も重要なことはスピードです。 BerkeleyDBのと私の解決策は、MySQL(または一般に任意のRDBMS上)に基づいて、1次に速くなる(CAN)のでしょうか?

役に立ちましたか?

解決

これは、そのために適しているが、あなたに入れて喜んでいるよりも、より多くの仕事かもしれません。BerkeleyDBのはそうあなたが行うすべては「ストア値Y、キーXのために」と言っている、非常に一般的なキー/値ストアです。後で、「私のキーXの値を与える」と、それは実際にそれがハイレベルから行いすべてだY.をあなたに戻って与えると言うことができます。それは、(原子性、一貫性、分離、および耐久性のために、ACIDと呼ばれる)の重要な信頼性を保証するために非常に強力な機能を備えていて、素晴らしいパフォーマンスを持っていますが、プログラマの観点から、それは簡単なマップ構造です。

そうです、あなたは木を保存することができますが、彼らのために良い表現を決定する必要があると思います。あなたは、整数キーと単純に子供のための整数のリストを含む値として構造体を持っている(BDBはキーの辞書式順序付けを使用しているため、彼らはビッグエンディアンのバイト順序で格納していることを確認してください)のために行くことができます。あなたはまだかかわらず、手ですべてのトラバーサルアルゴリズムを記述する必要があります。あなたががあなたの階層データのために持っているものの要件を知らなくても、それはより具体的な提案を与えるのは難しいます。

Speedwise、それははるかに高速に取得することはできませんおそらくバークレーDBを何のために(すなわち、あなたはずっとそこに見つけることができませんそれはあなたがACIDプロパティの一部を犠牲にすることを喜んでいる場合は特に、高速です)。それはあなたのマップにあなたのインターフェースを介して、ほぼ完全に制御することができますので、理論的にはおそらくあなたの特定のユースケースのために、高度に最適化された構造を構築することができます。あなたが参加し、複雑なフィルタクエリ、またはそれの上に非自明なクエリ言語のいずれかの種類を実装している場合は、低レベルのインタフェース与え、あなたは大きなに追いつくためにいくつかの非常に迅速なコードやアルゴリズムを記述する必要がありますそこにリレーショナルデータベースます。

あなたのデータは(eughが、私はそれのような何人かの人々を知っている)XMLでモデル化することができる場合は、

、(またSleepycatのことで、オラクルの今一部)BDBのXMLと呼ばれるBDBの上に構築された既存のデータベースがあります。これにより、データベース内の任意のXML文書を格納するために、データベースに高速でのXPathやXQueryのクエリを実行することができます。私はこれまで公式の.NET APIはまだないと思うが、私は、私はそれに結合する非公式.NET渡って来ているかなり確信しています。

あなたは(これはあなたのシナリオの場合ではありません)そこに既存のソリューションを許可していないいくつかの非常に特定の要件がない限り、

は、一般的には、私も上に構築された独自のデータベースを(ローリングに対して助言するだろうあなたが効率的なアルゴリズムとコードの最適化に非常に熟練している場合を除き)BDBの。あなたはRDFトリプルを保存している場合は、そこにそのための専用のデータベースがあり、さらには、リレーショナルデータベースは、彼らのために特に不向きではありません。 BDB XMLは、あまりにも、まだそのための実行可能なソリューションです。それは最終的にはあなたの選択だが、私があなただったら、私は低レベルのデータベース操作に対処することなく、より多くの興味深い問題に取り組むことを選択するだろう(したがって、私の実際のRDFストアの既存のパッケージの上に薄い層を使用します)。

他のヒント

階層構造は、親または子の属性を使用して、キーと値のストアに格納することができます。

あなたは、親が1人の以上の子どもを持ちたい各レコードに親属性を使用して持っている場合は、

ルート・ノードは、ID 0または他のいくつかの意味のある値の親を持っています。

あなたは子供が1人の以上の親を持つようにしたい場合は、

、各レコードに子属性を使用します。

あなたがしたい場合のノードが複数の親を持つことができ、子どもたちは関係を保存するために別のテーブルを使用します。

あなたが特定の親または子を持つノードを照会することによって、ツリーをトラバースすることができます。

この道ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top