2011-11-08 8 views
6

私は、書き込み負荷が高く、ユーザ定義/構築ツリーを表す何千もの階層レコードのWebアプリケーションを構築しています。私はスレッドでフォーラムを構築しようとはしていませんが、何千もの小さな階層(最大10〜20子孫の木)を持つ膨大なデータベースを構築しようとしていません...高い書き込み負荷でMySQLに階層データを保存する

私は階層を格納するための多くのモデルを知っていますネストされたセットだが、膨大なデータと負荷を伴うパフォーマンスが問題になります。隣接リストやそれに類するものがこれを解決するかもしれないことに疑問がある。

私は超高速キー/バリューストレージであるMongoデータベースを試してきましたが、私はMySQLだけを使用できます。

私は同様の問題を抱えている他の人の経験について聞きたいと思います。

+0

少しわかりますか?これをすべて保存して階層をクエリしますか?どのようにあなたの質問をするつもりですか? –

答えて

5

MySQLプラグインをインストールできる場合は、OQGraphストレージエンジンが必要です。

+1

+1しかし、プラグインのインストールは誰にも公開されていません。だから私は@ barryhunterに賞金を贈りました – Johan

+0

OQGraphについて知っている人が増えれば、ホスティング会社のデフォルトインストールの一部としてそれが見えるかもしれません:) – Mchl

4

ネストセットの問題点は何ですか?

ノードを追加/削除するときにlft/rgtの値を再計算していますか?

慎重な計画を少しして、それを微調整することができますので、まれな再計算を行うだけで済みます。私はそれを試したことはありませんでしたが、一度システムの計画を立てたことがありました(クライアントは最後にシステムを望んでいませんでした)。

最初に1000を計算します。次に、ノードを追加する場合は、値の間に数字を挿入するだけです。その挿入の数が多い場合にのみ、数字が足りなくなります。優先度の低いバッチ処理では、ツリーを再計算して、新しい挿入のために番号を解放することができます。

削除は、番号を操作してもアーカイブできます。実際、子供のいないノードは簡単です。ナショナルの再計算はありません。子供の場合はもっと複雑になるが、できると思う。

+0

+1 Joe Celkoはすばらしい記事をいくつか持っていますこれはどこかで。私は彼の本 "ジョーCelkoのスマイリーのSQL"もそれについてのセクションを持っていると思う。確かにGoogle検索の価値がある。 –

関連する問題