3

私が開発している Web アプリケーションでは、大量のレコードを保存する必要があります。各レコードは、主キーと単一の (短い) 文字列値で構成されます。約 100 GB のストレージが利用可能であると予想し、それをすべて使用できるようにしたいと考えています。

レコードは頻繁に挿入、削除、および読み取られるため、MySQL データベースを使用する必要があります。データの整合性は重要ではありませんが、パフォーマンスは重要です。どのような問題や落とし穴に遭遇する可能性が高く、そのタスクに最適なストレージ エンジンはどれですか?

どうもありがとう、J

4

6 に答える 6

5

使用するソリューションが何であれ、データベースは書き込みが多いと言うので、テーブル全体が書き込み時にロックされないようにする必要があります。これは、一部の人が提案している MyISAM を除外します。MyISAM は、更新、削除、または挿入時にテーブルをロックします。つまり、テーブルから読み取りたいクライアントは、書き込みが完了するまで待機する必要があります。ただし、 INSERT LOW PRIORITY が何をするかはわかりませんが、おそらくテーブルロックに関するハックです:-)

単に MySQL を使用する必要がある場合は、書き込み時にロックしない InnoDB が必要になります。MySQL が VACUUM の InnoDB テーブルをどのように処理するかはわかりません (InnoDB は PostgreSQL のような MVCC であるため、クリーンアップする必要があります)...しかし、多くの更新または削除を行う場合は、それを考慮する必要があります。

于 2009-02-25T21:23:37.183 に答える
3

それはすべて、アプリケーションが生成する読み取り/書き込みパターンと、取得したい精度のレベルに依存します。たとえば、最後に挿入されたすべての行をすぐに利用できるようにする必要がない場合は、SELECT に役立つ INSERT LOW PRIORITY の使用を検討してください。テキスト サイズが比較的小さい場合は、固定の CHAR 型を使用すると、多くのインデックス作成に役立ち、SELECT の時間を短縮できます。アプリケーションが多くの更新を生成する場合は、1 行のみをロックできる InnoDB ストレージ エンジンを好むでしょう。更新中 (vs myISAM のすべてのテーブル)。一方で、より CPU を集中的に使用するため、トランザクションを使用せず、更新パターンが比較的小さい場合は、myISAM の使用を検討してください。

于 2008-12-10T16:07:21.873 に答える
1

インデックス作成を使用している場合 (使用していない場合でも)、スケーリングの問題が発生する可能性があります。これらの影響を減らすために、パーティショニングを試すことができます。

私自身のプロジェクトでは、整合性は重要ではありませんが、パフォーマンスも重要です。私たちが行ったことは、すべてのトランザクション要件を緩和し、ディスク同期要件を緩和し、バッチ挿入をコミットしたことで、書き込み速度が大幅に向上しました。

また、必ず独自のテストを行ってメモリ サイズを調整してください。MySQL には、サイズを構成できるいくつかの異なるタイプのキャッシュがあると思います。

于 2008-12-09T20:05:46.353 に答える
0

テーブルに固定長の行があるように、「短い文字列」が固定長の列にある場合は、はるかに優れています。その場合、MyISAM を使用した MySQL は非常に効率的に動作します。キー バッファーにできるだけ多くのメモリを割り当てて、メモリ内のインデックスの多くを確保します。目標は、ディスクへの 1 回のランダム アクセスで 1 行を取得することです。100 GB のデータと 8 GB のメモリを考えると、これ以上のことはできません。ディスクが実行できるランダム アクセスはこれだけなので、1 秒間に数百回以上のクエリを実行できるとは思わないでください。

私の MySQL カスタム ストレージ エンジン (ここで説明します) に興味があるかもしれません。アプリケーションのプロファイルは、私のエンジンが最適化されたものとまったく同じではありませんが、MyISAM とは異なる方法でメモリを管理します。

于 2009-03-21T13:47:51.850 に答える
0

ストレージ エンジンには必ず MyISAM を使用する必要があります。しかし、あなたは 100 GB を期待していると言い、それには短い文字列値しか含まれません。ID/主キーに 64 ビットの int を使用することは間違いありません。

しかし、私の本当の質問はです。Web サイトからのセッション情報を保存するためにこれを使用していますか? その場合は、MySQL の代わりに memcache を使用します。

于 2008-12-09T20:16:41.887 に答える
0

大規模な MySQL クエリにより、Quad Core/8GB RAM DB サーバーがクラッシュします...

解決策はPostgresSQLを使用することです(余裕があればSQL Server)

于 2008-12-09T20:20:39.133 に答える