問題タブ [myisam]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - MySQL テーブル (myisam エンジン) の TableName.MYD.filepart ファイルとは
MySQL データベース ( myisam エンジン) で TableName.MYD.filepart を取得しました。
mysql - テーブルロックはスケーリングしますか?/ネストされたセットの場合、行ロックの方が効率的ですか?
ネストされたセットを使用して、階層データをMyISAMテーブルに格納しています。テーブルは、ユーザーごとにいくつかの階層セットで構成されています。各ユーザーはそれぞれのツリーに書き込む唯一のユーザーになりますが、他のユーザーはそれらから読み取ることができます。ノードの削除/挿入では、同じツリー内の他の行のlft値とrgt値を更新する必要があり、場合によっては数百行になります。
これを行うには、テーブルの書き込みロックを取得し、ツリー内の他のノードを更新し、行を削除/挿入して、テーブルのロックを解除する必要があります。
私が疑問に思っているのはこれです-テーブルロックは数百人の同時ユーザーに対応できますか?数千?
この場合、InnoDBの行ロックはより効率的でしょうか?(主にユーザー自身のみが使用する数百行をロックします)
行ロックを使用する場合、デッドロックエラーに対処するために明示的なロジックを追加する必要がありますか?
sql - 大きなMyISAMテーブルは、非同時の挿入/更新でも遅くなります
〜50'000'000レコード(Webクローラーのタスク)を含むMyISAMテーブルがあります。
数秒に1回、次のいずれかの操作が発生します(ただし、同時に発生することはありません)。
- INSERT ... VALUES(500行)-新しいタスクを挿入します
- UPDATE ... WHERE id IN(最大10 ids)-タスクのバッチの状態を更新します
- SELECT ... WHERE(next_random_task indexによる)-処理するタスクのバッチをロードします
私の問題は、挿入と更新が非常に遅いことです-数十秒のオーダーで、時には1分以上実行されます。ただし、選択は高速です。なぜこれが発生する可能性があり、パフォーマンスを向上させる方法は?
mysql - MySQL: innoDB ではなく MyIsam を選択する必要があるのはどのような場合ですか?
InnoDB はほぼ完全に優れているように見えますが、どのような場合に MyIsam を使用する必要がありますか?
前もって感謝します!
php - PHP と jSon を使用して MyISAM データセット全体をプリロードすることは可能ですか?
例えば
1 つのカテゴリに 1000 個の製品があるとします。そして、これらの製品をフィルタリングしたいと思います。
json を使用して製品をフィルタリングします。DB に対して個別のクエリを実行する必要があるたびに。
製品テーブルをプリロードして表示できるかどうかを知っている人がいるかどうか疑問に思っていました. プリロード バーの例: 検索の初期化 (0 - 100%)
そのため、システム全体がロード時に 1 回だけ初期化されるため、検索結果がすぐに得られることを願っています。
残念ながら、顧客のサーバーを微調整することは私たちにとって実際にはオプションではないため、ここの誰かがより良い提案をしてくれることを願っています
前もって感謝します!
mysql - myisam から innodb への移行時の参照整合性の問題
データベースの 1 つを myisam から innodb に移行したいと考えています。主な理由は、私のアプリケーションが参照整合性を尊重できるようにすることです。
これは私がしたことです
- 現在の myisam データベースをエクスポートしました
- データベースを削除しました
- innodb データベースに切り替えましたhttp://parasjain.net/2010/06/08/how-to-switch-to-innodb-database-in-mysql/
- エンジン スイッチを確認し、新しいデータベースを作成しました
参照整合性が機能するようになりました。たとえば、Parent p1 と Child c1 を作成し、c1 で p1 を参照する場合、P1 に依存する子がある限り、P1 を削除できません。
ここまでは順調ですね
しかし、エクスポートされたダンプから古いデータをインポートすると問題が発生します
問題は、新しいデータに対して参照整合性が尊重されることです。しかし、私の既存のデータでは、c2 によって参照される p2 のような関係がある場合、p2 を削除して参照整合性を壊すことができます。c2 は現在孤立しています。
既存のデータにも参照整合性が適用されるように、テーブルを修復/再インデックス化する方法はありますか?
mysql - `INSERT`が特定のMyISAMテーブルに対して同時であることを確認しますか?
基本的にログを含むMyISAMテーブルがあります。マシンのクラスターはINSERT
、このテーブルで1秒あたり50の割合で単一レコードを実行しますが、同じテーブルもSELECT
Webアプリケーションから取得され、これに対応するためにインデックスが付けられます。UPDATE
ただし、 sまたはsはありませDELETE
ん。
したがって、私が収集したものから、同時挿入を使用する必要があります。(そうですか?)MyISAMは通常、追加の作業なしでこれを実行します。(これは正しいです?)
しかし、私が見つけられないのは、与えられたものが同時に処理されることを保証する方法です。グローバル変数をにINSERT
設定できることは知っていますが、これをグローバルに設定したくありません。concurrent_insert
2
だから私の質問は:
同時挿入を保証するために私が見逃している方法はありますか?
そうでない場合、テーブルが同時挿入要件を満たしているかどうかを確認するために使用できるコマンドはありますか?(テーブルに穴が開いているかどうかを知るだけで十分だと思いますか?)テーブルを監視するだけでも解決できるからです。
そして、私も興味があります。この種の負荷をより適切に処理できる他のデータベースシステムはありますか?もしそうなら、私はNoSQLソリューションで完全に大丈夫です。RubyとCから話せる限り。
mysql - MyISAM テーブルの 2^32 行という MySQL の制限を克服する
MySQL (5.0.x および 5.1.x のさまざまなバージョンを試しました) で 2^32 行を超える MyISAM テーブルを作成したいと考えています。これを実現する方法は、MySQL が 4 バイトの行ポインタではなく 8 バイトを使用するようにすることです。
以下は MySQL のマニュアルからの引用です。
--with-big-tables オプションを使用して MySQL をビルドすると、行の制限が 1.844E+19 行に増えます。セクション2.3.2「一般的な構成オプション」を参照してください。Unix および Linux のバイナリ ディストリビューションは、このオプションでビルドされます。
シンプルですね。しかし、Linux x86_64 用のさまざまなバイナリ ディストリビューションを試し、「--with-big-tables」オプションを使用してソース コードから MySQL を構築しました。いずれの場合も、2^32 の制限を超えることはできません。次のようにテーブルを作成します。
CREATE TABLE big (col int) MAX_ROWS=1099511627776
そして、テーブルのステータスを確認すると、次のように表示されます。
Create_options: max_rows=4294967295
32 ビットの煉獄を脱出するにはどうすればよいですか? InnoDB を使用すると問題が解決する可能性がありますが、実行しているクエリの種類ではパフォーマンスが大幅に低下します。
参考までに、問題を解決しなかった重要なリファレンスを次に示します。
database - トランザクションなしでOracleを使用するにはどうすればよいですか?
MySQLには、トランザクションをサポートしない特別なテーブルタイプMyISAMがあります。オラクルにはこのようなものがありますか?非常に高速で(大量のデータを格納する)、トランザクションを必要としない書き込み専用データベース(ロギング用)を作成したいと思います。
c# - MyIsam テーブルでの Entity Framework の使用
Entity Framework と MyIsam テーブルについて質問があります。
私の運用データベースは MyIsam テーブルのみで構成されています。多くの場合、UserId のようなプライマリ キーと、自動インクリメンタルなセカンダリ KeyId を使用します。
セカンダリ自動増分キーは InnoDb では許可されておらず、変換前にそれらを取り除く作業が大量にあるため、代わりに Entity Framework で MyIsam テーブルを使用することを考えています。
問題は、これをどのように設定するかです。外部キーがない場合、テーブルを EF モデルに追加するときに関係はありません。関連付けを手動で追加しようとしましたが、常にエラーが発生します。これは、セカンダリ自動インクリメント キーを使用している場合でも可能ですか?
誰かが私を助けようとしてくれたら、とても感謝しています。
ありがとう
/アンドレアス