2009-03-29 7 views
4

C++で実装されている負荷分散されたWeb対応アプリケーションのバックエンドとして、GDBMキー値データベースがあります。アプリケーションによって提供されるデータは非常に大きくなっているので、管理者はGDBMファイルをWebサーバ上のローカルストレージから、NFSマウントされた大きな共有ファイルシステムに移動しています。GDBMの代替またはサクセサ

これはパフォーマンスに影響します。私たちのパフォーマンステスト(テスト環境)は、ページの読み込み時間が数百ミリ秒(ローカルディスクの場合)から数秒(NFS、ローカルネットワーク上)にジャンプし、時には30秒にもなる場合があります。問題の大部分は、アプリケーションがGDBMファイルからランダムにたくさんの読み込みを行い、NFSでの処理が遅くなることです(これは、フロントエンドとバックエンドの両方で、さらに悪化します)より多くのネットワークハードウェア)、データベースがさらに大きくなるにつれて、

これは重要なアプリケーションではありませんが、パフォーマンスを向上させ、アプリケーション開発者の時間とUnixの管理者を含むいくつかのリソースを利用したいと思います。私の主な制約は、時間はわずか数週間のリソースを持っていることです。

私はそれを見ると、私のオプションは以下のとおりです。

  1. は、チューニングパラメータによって、NFSのパフォーマンスを向上させます。私の本能はそれほど多くは得られませんが、以前は間違っていました。NFSチューニングについてはあまりよく分かりません。

  2. memcachedbまたはTokyo Cabinetなどの異なるキー値データベースに移動します。

  3. NFSを他のプロトコルに置き換えてください(iSCSIは言及されていますが、私はそれに精通していません)。

どのようにこの問題にアプローチする必要がありますか?

答えて

9

「リレーショナルリレーショナルリレーショナルリレーショナルリレーショナル」と「リレーショナルリレーショナルリレーショナルリレーショナルリレーショナルリレーショナルリレーション」の比較をあまり諦めてはいけません。この問題は無関係です。

ローカルの高速ファイルストレージ上の小さなデータベースのから、ネットワーク経由でアクセスされる大きなデータベースのまで、アプリケーションが通過した行は異なります。このラインを越えると、専用のネットワークサービスされたデータベース管理システムがより優れたサービスを提供できるようになります。管理サーバーがリレーショナルデータベースを管理するかどうかは、その側面には関係ありません。

すぐに起動して実行するためには、おそらくMySQLが最適です。もしそれが今のところどこを超えて成長しているのであれば、それはPostgreSQLに入れておけばいいから最終的にはどこにでも行く必要があります:-)

2

これはあなたが聞きたいものではないようですが、正直言って私があなただったら私はそれをmysqlテーブルに投げます。それは、GDBM-over-NFSとは違って、それが意味を持って働くのが難しいようではなく、あなたがそれに多くの利益をもたらします。

1

非リレーショナルデータベースに固執してみたいBDBまたはDJBのCDBです。私はこれまでの両方を使用していましたが、パフォーマンスが低下するとGDBMを上回ると思います。

でも、あなたのボトルネックは使用しているデータ構造(GDBM)ではなくインフラストラクチャであると思うので、ビゴースの答えを念頭に置いてください。

0

ネットワーク上のフラットファイルを使用するファイルシステム入出力はお勧めできませんが、i/o、queryなどを作成するマルチスレッドtcpサーバーを作成することを検討する必要があります。そのマシンで、結果を返します。データベース全体ではなく、小さなまとまりのデータを転送します。

私は、高可用性の問題を克服するためのキャッシュ持続メカニズムを設計しています。私はそれをPythonでコーディングします。

関連する問題