質問

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

これはパフォーマンスに影響を与えました。(テスト環境での) パフォーマンス テストでは、ページの読み込み時間が数百ミリ秒 (ローカル ディスクの場合) から数秒 (NFS、ローカル ネットワーク経由) に跳ね上がり、場合によっては 30 秒に達することもあります。問題の大部分は、アプリケーションが GDBM ファイルからランダムな読み取りを大量に実行し、それらが NFS 経由で低速であることであると私は考えています。これは運用環境ではさらに悪化します (フロントエンドとバックエンドが同じである場合)。それらの間のネットワーク ハードウェアが増加し、データベースがさらに大きくなります。

これは重要なアプリケーションではありませんが、パフォーマンスを向上させ、アプリケーション開発者の時間や Unix 管理者などのリソースを利用できるようにしたいと考えています。私の主な制約は、リソースが数週間しかないということです。

私の考えでは、私の選択肢は次のとおりです。

  1. パラメータを調整して NFS パフォーマンスを向上させます。私の直観としては、このことからあまり得られることはないだろうと思っていますが、私は以前にも間違っていたことがあり、NFS チューニングについてはあまり知りません。

  2. 別のキーと値のデータベースに移動します。 memcachedb または 東京内閣.

  3. NFS を他のプロトコルに置き換えます (iSCSI について言及されていますが、私はよく知りません)。

この問題にはどのように対処すればよいでしょうか?

役に立ちましたか?

解決

あまりにも比較「非リレーショナル対リレーショナル」にハングアップを取得しないでください。この問題のために無関係であるように思われる。

ネットワークの上でアクセス大規模なデータベースに、ローカルの高速なファイルストレージに小規模なデータベースからの

あなたのアプリケーションが交差しているラインは異なるものです。その線を越えることは、あなたが今より良い専用、ネットワークサービス、データベース管理システムによって提供されることを意味します。管理サーバは、リレーショナルデータベースを管理するかどうかは、その側面には関係ありません。

それを取得し、迅速に実行するため、 MariaDBする(MySQLの後継)は、おそらくあなたの最善の策です。あなたはそれが今どこを超えて大幅に成長している予見場合はそれがどこなので、あなたにも PostgreSQLのの中にそれを置くかもしれませんそれはとにかく最終的に移動する必要があります: - )

他のヒント

これは、あなたが聞きたいものではないように見えますが、私があなただったら、正直なところ、私は、MySQLのテーブルでそれを投げると思います。それはで動作するように有意義に難しいです、そしてあなたはそれで利益の多くを得るかのように、それはGDBMオーバーNFSとは異なり、少なくとも、実際に自分の状況を対象としていますリモートアクセスプロトコルではないではありません。

非リレーショナルデータベースにこだわりたい場合は、試してみてください BDB またはDJBの CDB. 。私はこれまで両方を使用しましたが、パフォーマンスに関して言えば、GDBM よりも優れていると思います。

ただし、bignose の回答を念頭に置いてください。私も、ボトルネックは使用しているデータ構造 (GDBM) ではなく、インフラストラクチャである可能性があると考えています。

ファイルシステムI /ネットワーク経由でフラットファイルは良いアイデアではありませんが、あなたはなど、I / O、問い合わせを行うマルチスレッドTCPサーバを書いて検討すべきであると、O。そのマシン上で、その後戻って結果を返します。データ全体ではなくDBファイルの小さな塊を移し..

私はPythonで、それをコードし、高可用性problem.Iを克服するために、キャッシュ永続性メカニズムを設計しています。

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