2009-04-09 1 views
2

どのような種類のストレージエンジンを使用するかについて誰かが提案しているのだろうかと思っていました。プログラムは、データベースへの多くの書き込みを実行する必要がありますが、読み取りはほとんど行いません。多くの書き込みがありますが、読み込み回数はほとんどありません.MySQLストレージエンジンは何を使用するのですか?

[編集]外部キーは必要ありません。データは単純ですが、書き込みを非常に高速に実行する必要があります。 jpipesから

+0

さらに詳しい情報が参考になる場合があります。あなたはどんなサイズですか?これはどんなアプリですか?それはオンラインで埋め込まれていますか?大規模なユーザーベースを期待していますか? – bedwyr

答えて

3

のMyISAMおよび表レベルのロック

行レベル ロッキングを採用InnoDBは、異なり、MyISAMテーブルは、データがあることを確認 にはるかに 粗い粒度のロックシステムを使用

保護された方法で データファイルに書き込まれます。 表レベル・ロックは、MyISAMテーブルのロックのレベルのみ であり、これは 結合の影響があります

  • UPDATEを発行する任意の接続を、またはMyISAMテーブルに対して、削除され 要求 に排他的書き込みロックMyISAMテーブル。他のロックが( を読み取りまたは書き込み)現在 テーブルの上に置かれていない場合は、排他書き込みロックは許可され で、あらゆる種類のリクエストを発行する他のすべての接続 は(DDL、 SELECT、UPDATE、INSERTは、DELETE) 待たなければなりません 排他ロックを持つスレッドが、必要なレコードを レコードに更新してから、 が書き込みロックを解放するまで。
  • のみテーブル・レベルのロックがあるので、1つまたはレコードの 小さなセットをロックする能力(そこよう でのInnoDBである)、他の スレッドが の他の部分からテーブルデータを選択することを可能にするがありません。

ポイントは、書き込みのために、InnoDBはそれが資源の少ないをロックし、発生する多くのパラレルアクション/要求を可能にするよう勧めしています。

0

あなたは本当に私たちに考えられた提案をするのに十分な情報を与えていません - あなたは外来キーを使いたいですか?行レベルのロック?ページレベルのロック?トランザクション?

トランザクションを使用する場合は、通常、InnoDB/BerkeleyDBを使用します。あなたがしなければ、MyISAM。

0

私の経験では、MyISAMは挿入後には読み込み専用であれば高速書き込みが可能です。それは私が慣れ親しんでいる他のオプション(サポートインデックスを含む)よりも速く追加することができます。

しかし、レコードの削除やインデックスキーの更新を開始し、空の穴(テーブルやインデックス)を補充する必要があるとすぐに、ディスカッションはもっと複雑になります。

古典的なログタイプまたはジャーナルタイプのテーブルの場合は、非常に満足です。

1

"書き込みを非常に高速に実行する必要があります"というのは曖昧な要求です。あなたが何をしても、書き込みはデータベースの競合によって遅れることがあります。監査レコードをデータベースに書き込むときにアプリケーションをブロックする必要がない場合は、監査書込みを非同期にして、監査データのキューをディスクまたはメモリに保持する必要があります(メインワーカースレッド/プロセスをブロックしないようにしてください)

InnoDBは同時挿入を許可することがありますが、インデックスページなどのリソースや内部ロックの競合によってブロックされることはありません。

MyISAMテーブルには、以下の状況下で1つのインサータと、いくつかの読者(「同時挿入」)ことができます:テーブルにはない「それの穴」

  • を持っていない

    • はUPDATEをしようと何のスレッドはありませんかDELETE

    毎日再作成する(または5.1パーティショニングを使用する場合は毎日新しいパーティションを作成する)追加専用テーブルがある場合は、これを回避することができます。

    MyISAMの同時挿入は、ほとんど使用できます。

    監査レコードを作成する場合は、できる限り一度に複数回実行します。これは、使用するストレージエンジンに関係なく適用されます。監査プロセスがレコードを「バッチアップ」し、いくつかのレコードを一度に挿入するのは良い考えです。

  • 関連する問題