engine=MEMORY
テーブルをメモリ内engine=INNODB
に作成し、テーブルトランザクションを安全にするために使用する必要があることはわかっています。しかし、どうすれば両方の目的を達成できますか?試しengine=MEMORY, INNODB
ましたが失敗しました。私の目的は、テーブルにすばやくアクセスし、複数のスレッドがテーブルの内容を変更できるようにすることです。
3 に答える
あなたは上記の目標を述べていません。あなたは良いパフォーマンスを探していると思います。また、テーブルをトランザクション型にすることも望んでいるようです。あなたの唯一の選択肢は本当にInnoDBです。テーブル全体を保持するのに十分なメモリを使用するようにInnoDBを構成し(を使用innodb_buffer_pool_size
)、同じサーバー上の他のInnoDBテーブルからの過度のプレッシャーがない限り、データはメモリに残ります。書き込みパフォーマンスが心配な場合(そして同じシステムの他の使用を禁止する場合)、innodb_flush_log_at_trx_commit = 0
バイナリロギングを設定および無効にすることで、耐久性を減らして書き込みパフォーマンスを大幅に向上させることができます。
一時テーブルで任意の種類のトリガーを使用すると、保守が面倒になり、一時テーブルでのトランザクション性のメリットは得られません。
2つ(またはそれ以上)のエンジンでテーブルを作成する方法を求めていますが、これはmysqlでは不可能です。
ただし、innodbが必要に応じて十分に高速であるとは思わないため、メモリを使用したいと思います。innodbはかなり高速で、おそらく十分だと思いますが、本当に必要な場合は、2つのテーブルを作成してみてください。
table1memory<-ここですべてのSELECTを実行します
table2 innodb <-ここでは、UPDATE、INSERT、DELETEなどを作成し、TRIGGERを追加して、これが更新されたときにtable1が同じ変更を取得するようにします。
私が知っているように2つの方法があります
第一の方法
一時テーブルを次のように作成します(これらは小さな差分でメモリに保存され、セッションがログアウトされると削除されます)
一時テーブルsample(id int)engine =Innodb;を作成します。
2番目の方法
1つはメモリエンジンを使用し、もう1つはinnodbまたはbdbを使用して2つのテーブルを作成する必要があります
最初にすべてのデータをinnodbテーブルに挿入し、次にデータをトリガーしてメモリテーブルにコピーします
innodbテーブルのデータを空にしたい場合は、同じトリガーで実行できます
イベントを使用してこれを達成することもできます