MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決できます。しかし、何億ものデータを扱う場合、インデックスはあまり使いやすくありません。 データ テーブル (ログ) は次のようになります。
データ全体を処理する必要はなかったため、需要側と協議の上、1か月分の約3億5千万行のデータをサンプリングするなど、期間ごとにデータの一部をサンプリングしました。 1) テーブルエンジンとして Innodb を選択します。データは月ごとにパーティション化されているため、月ごとのパーティションのデータを個別にコピーします。ソース テーブルは MyISAM エンジンです。一部のデータをフィルターする必要がある場合があり、フィルターに関係するフィールドにはインデックスがないため、MyISAM エンジンを使用してインデックスを追加する速度は遅くなります。 テーブル `tb_name` を作成します ( `id_`、 ...、 キー `idx_1` (`create_user_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='アプリケーション ログ' 範囲によるパーティション分割(to_days(log_time_)) ( パーティション p1231 の値は (737425) 未満です。 パーティション p0101 の値は (737426) 未満です。 パーティション p0102 の値は (737427) 未満です。 パーティション p0103 の値は (737428) 未満です。 パーティション p0104 の値は (737429) 未満です。 ...... ); 3) 上記で生成したテーブルに対して日次集計などの操作を実行し、その結果を一時テーブルに保存します。ストアド プロシージャを使用してデータを処理します。処理は比較的複雑で時間がかかるため (ストアド プロシージャの実行には約 1 ~ 2 時間かかります)、ストアド プロシージャを周期的に呼び出す場合は、実行プロセス中の操作時間とパラメータを記録する必要があります。 区切り文字 $$ プロシージャ proc_name(param varchar(50)) を作成します。 始める start_date 日付を宣言します。 end_date 日付を宣言します。 start_date を '2018-12-31' に設定します。 end_date を '2019-02-01' に設定します。 トランザクションを開始します。 tmp_talbeを切り捨てます。 専念; 開始日 < 終了日の場合 @partition_name = date_format(start_date, '%m%d') を設定します。 set @start_time = now(); -- 現在のパーティション操作開始トランザクションの開始時刻を記録します。 @sqlstr = concat( を設定します。 「tmp_talbe に挿入」、 "フィールド名を選択"、 "tb_name パーティション(p", @partition_name,) t から ", 「条件」 ); -- @sqlstr を選択します。 @sqlstr から stmt を準備します。 ステートメントを実行します。 準備ステートメントの割り当てを解除します。 専念; -- ログ セットを挿入 @finish_time = now(); -- 操作終了時刻を oprerate_log に挿入 values(param、@partition_name、@start_time、@finish_time、timestampdiff(second、@start_time、@finish_time)); start_date = date_add(start_date、間隔 1 日) を設定します。 終了しながら; 終わり $$ 区切り文字 ; 4) 上記で生成された結果を並べ替えて処理します。 一般的に、処理は比較的面倒で、多くの中間テーブルが生成されます。重要なステップでは、操作プロセスのメタデータも記録する必要があり、SQL 処理に高い負荷がかかります。したがって、このタスクの処理に MySQL を使用することはお勧めしません (絶対に必要な場合を除く)。処理をビッグデータ プラットフォームに配置できれば、速度が速くなり、メタデータ管理も比較的専門的になります。 パーティションを使用して MySQL の 10 億レベルのデータ最適化を処理する方法については、これで終わりです。MySQL の 10 億レベルのデータ最適化に関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: js が CSS 属性 (値) のサポートを決定して通知する状況の分析
目次1. はじめに2. 方法の紹介3. 使用例要約する1. はじめに配列フィルターは、フロントエンド...
この記事の例では、WeChatアプレットでテキストスクロールを実装するための具体的なコードを参考まで...
1. サーブレットとは何か1.1. 正式な言葉で説明する:サーブレットは、動的な Web リソースを...
1. ファイアウォール設定ファイルを変更する # vi /etc/sysconfig/iptable...
MySQL 8.0 サービスを開始できません最近、 cmdで MySQL サービスを起動するときに遭...
ログポイントベースのレプリケーション1. マスターデータベースとスレーブデータベースに専用のレプリケ...
コンテンツ詳細タグ: <h1>~<h6>タイトルタグ<pre>テ...
設定手順Linux システム: CentOS-7.0 MySQL バージョン: 5.7.21 Lin...
MySQLのダウンロードとインストール(バージョン8.0.20)のチュートリアルは参考までに、具体的...
目次1. 魔法の拡張演算子1. 配列をコピーする2. 配列を結合する3. オブジェクトを展開する2....
カスケードとカスケードレベルHTML 要素は 3 次元の概念です。水平方向と垂直方向に加えて、「Z ...
dockerスタックによってデプロイされたイメージサービスを使用すると、イメージを入力した後、理論的...
p>「サービス」で手動で起動すると、 コンソールから起動します: 次に、...\MySQL S...
プロシージャ sp_name を削除します//これまで、MYSQL 構文の基礎知識について説明して...
問題の説明: Linux システムのネットワーク カード ファイル /etc/sysconfig/n...