sql >> データベース >  >> RDS >> Mysql

mysqlで非常に大きなデータを処理する

    • MySQLは数十億行に対して合理的にクエリを実行できますか? --MySQLは数十億行を「処理」できます。 「合理的に」はクエリによって異なります。それらを見てみましょう。

    • InnoDB(MySQL 5.5.8)は、数十億行の正しい選択ですか? --5.7にはいくつかの改善がありますが、ほぼ6 であるにもかかわらず、5.5はかなり良いです。 8歳で、の危機に瀕している サポートされなくなりました。

    • 数十億行に最適なデータストア-「エンジン」を意味する場合は、InnoDB。

    • パフォーマンスが低下し始める前にMySQLデータベースをどれだけ大きくすることができますか-繰り返しますが、それはクエリによって異なります。メルトダウンする1K行のテーブルをお見せします。私は何十億列ものテーブルを使って仕事をしてきました。

    • 大きなテーブルでMySQLが遅くなるのはなぜですか? -範囲スキャンはI/Oにつながりますが、これは遅い部分です。

    • Mysqlは約3億レコードを保持するテーブルを処理できますか? -繰り返しますが、はい。制限は約1兆行です。

    • (私の場合はInnoDBテーブルの場合)innodb_buffer_pool_sizeを増やします(たとえば、RAMの最大80%)。また、ここPerconaブログで他のMySQLパフォーマンス調整設定を見つけました-はい

    • テーブルに適切なインデックスを設定する(クエリでEXPLAINを使用)-さて、それらを見てみましょう。このクリティカルでは多くの間違いを犯す可能性があります エリア。

    • テーブルの分割-「分割は万能薬ではありません!」 私のブログでそれをハープします

    • MySQLシャーディング-現在これはDIYです

    • MySQLクラスタリング-現在、最良の答えは、Galeraベースのオプション(PXC、MariaDB 10、DIY w / Oracle)です。オラクルの「グループレプリケーション」は実行可能な候補です。

    • パーティショニングはFOREIGN KEYをサポートしていません または「グローバル」UNIQUE

    • あなたが話している規模のUUIDは、システムの速度を低下させるだけでなく、実際にシステムを強制終了します。 タイプ1UUID 回避策になる可能性があります。

    • 挿入とインデックス作成の速度-バリエーションが多すぎるため、1つの答えを出すことはできません。暫定的なCREATE TABLEを見てみましょう とデータをどのようにフィードするつもりか。

    • 多くの結合-「正規化しますが、過度に正規化しないでください。」特に、日時やフロート、その他の「連続的な」値を正規化しないでください。

    • 要約テーブルを作成してください

    • 1日あたり230万件のトランザクション-それが230万件の場合挿入 (30 /秒)、パフォーマンスの問題はあまりありません。より複雑な場合は、RAID、SSD、バッチ処理などが必要になる場合があります。

    • このような大量のデータを処理する-ほとんどのアクティビティが「最近の」行である場合、buffer_poolはアクティビティを適切に「キャッシュ」し、それによってI/Oを回避します。アクティビティが「ランダム」の場合、MySQL(または誰でも それ以外の場合)I/Oの問題が発生します。

    • データ型を縮小すると、あなたのようなテーブルに役立ちます。 fuel_typeを指定するのに4バイトが必要かどうかは疑問です 。 1バイトのアプローチは複数あります。



    1. SQL WHERE..IN句の複数の列

    2. ColdFusion-アラビア語/ペルシア文字をmysqlに挿入する

    3. MySQLデータベースで低速クエリ(低速クエリログ)のログを有効にする

    4. 色で画像を検索するためにMySQLに画像のカラーパターンを保存するデータベース設計