キャッシュ データ テーブルは統計データを収集するときによく使用されるため、統計データとも呼ばれます。たとえば、従業員と部門のデータ テーブルの場合、部門に何人の従業員がいるかを照会する必要がある場合があります。これを実現するには 3 つの方法があります。
Nuggets のモバイル パーソナル センターを例にとると、各ユーザーのフォロワー数、フォロワー数、Nuggets パワー値を表示するには、各クエリごとに SUM を実行することはできません。つまり、複数のテーブルの合計操作を実行する必要があり、非常に非効率的になります。また、Nuggets パワー値の計算には、より複雑な計算方法 (記事の閲覧数やいいね数に関連) が含まれます。したがって、一般的なテーブル設計を推測することができ、ユーザーの個人ホームページ情報を照会するときに、すべてのデータをこのテーブルから読み取ることができます。 t_user_summay を作成します ( id INT 主キー、 ユーザーID BIGINT(20) フォーカスされたユーザー数 INT、 followed_user_cnt INT、 ユーザー値 INT、 ユーザーレベル ENUM('Lv1'、'Lv2'、...、'Lv8')、 created_time 日付時刻、 updated_time 日付時刻、 ); リアルタイム更新は必要ですか?実際のアプリケーションでは、統計表を更新する方法は 2 つあります。1 つはリアルタイム更新、もう 1 つはデータの定期的な再構築です。どちらの方法にも長所と短所があります。リアルタイム更新ではクエリ データの即時性が保証されますが、パフォーマンスが犠牲になり、コードの埋め込みが必要になります。また、データの更新が不定期であるため、断片化が発生する可能性があります。データの定期的な再構築は、リアルタイムのパフォーマンスを犠牲にします。データのほとんどが変更されない場合、不要な統計計算につながります。ただし、データが頻繁に変更される場合は、データの定期的な再構築の方が明らかに効率的であり、ポイントが埋もれる状況を回避できます。もちろん、アプリケーションの埋め込みを回避するにはトリガーを使用することもできます。//www.jb51.net/article/213062.htm を参照してください。 マテリアライズド ビュー ツール (Flexviews)MySQL には、データベース binlog からデータを抽出してデータ統計を完成するために使用される Flexviews と呼ばれるオープン ソース ツールがあります。これはビューに似ていますが、ビューとは異なります。Flexviews によって生成されるデータ テーブルは物理テーブルであるため、マテリアライズド ビューと呼ばれます。さらに、Flexviews は増分更新と完全更新もサポートします。すべての行の統計を再構築する必要がある状況を回避するために、増分更新を使用することをお勧めします。増分更新では、更新を実行する前にどの行が変更されたかをチェックします。これにより、完全更新よりもパフォーマンスが高くなります。ただし、データの変更を検出するには、データ行の変更ログを記録するビューを導入する必要があります。 カウントテーブル実際の開発では、記事の閲覧数やいいね数などの操作をカウントする必要があることがよくあります。カウント値を同じテーブルに入れると、更新時に同時実行性の問題が発生する可能性が高くなります。別のカウント テーブルを使用すると、クエリ キャッシュの無効化の問題を回避し、より高度なテクニックを有効にできます。たとえば、記事の閲覧数といいね数をカウントするデータ テーブルは次のようになります。 テーブル t_article_counter を作成します ( article_id INT 主キー、 read_cnt INT UNSIGNED NOT NULL、 praise_cnt INT UNSIGNED NOT NULL ); 読み取りカウントを更新するときは、MySQL の組み込み増分操作を使用できます。 更新 t_article_counter SET read_cnt = read_cnt + 1 ここで、article_id = 1; この方法では、操作を単一行にして相互に排他的にすることができるため、トランザクションをシリアル化して同時実行の問題を回避できます。ただし、同時リクエストの数には影響します。同時実行性を高めるために、記事に複数のスロットを追加できます。 テーブル t_article_counter を作成します ( id INT NOT NULL 主キー、 スロット TINYINT UNSIGNED、 記事ID INT、 read_cnt INT UNSIGNED NOT NULL、 praise_cnt INT UNSIGNED NOT NULL、 INDEX(記事ID) ); このとき、データを初期化するためのスロットを 100 個作成し、更新時に次の操作を実行できます。 更新 t_article_counter SET read_cnt = read_cnt + 1 ここで、 slot = RAND() * 100 であり、 article_id = 1 です。 記事の合計読み取り数を取得するには、SUM 演算を使用する必要があります。 SUM(read_cnt) を t_article_counter から選択します ここで、article_id = 1; この方法は、実際にはスペースを時間と交換し、同時実行性を高めます。 要約するこの記事では、統計データテーブルの設計方法を紹介します。ポイントは業種にあります。更新頻度が低く、データ量が少ないテーブルの場合は、リアルタイム同期や Direct SUM を使用しても問題ありません。更新頻度の高い大規模なデータ テーブルの場合は、独立した統計テーブルを使用できます。同時に、同時実行性が高い状況では、統計テーブルは各エンティティに複数のスロットを追加して同時実行性を高めることを検討できます。データを定期的に同期する場合は、Flexviews マテリアライズド ビュー プラグインを使用することもできます。 上記は、MySQL で統計データ テーブルを設計する方法の詳細です。MySQL で統計データ テーブルを設計する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: JavaScript プロトタイプオブジェクトの this ポイント問題の詳細な説明
>>: docker compose を使用してハーバープライベートウェアハウスをインストールする詳細なチュートリアル
1. リストシンボルを設定するlist-style-type: attribute; //リストの...
需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...
目次MySQL 内部結合、左結合、右結合、外部結合、複数テーブルクエリビルド環境: 1. 内なる慈恩...
目次レムフォルクスワーゲンサードパーティのUIフレームワークに適応する結論モバイル開発における最も一...
基本イメージが以前に構成されていて、これらのイメージが他の場所でも必要な場合はどうなりますか?回答:...
序文: 「MySQL 入門」シリーズの記事は終了しました。今後も引き続き MySQL に焦点を当て、...
機能: 前のページまたは次のページにジャンプします。要素: ページングの基本要素は、前のページ + ...
1. 2つのクエリエンジン(myIsamエンジン)のクエリ速度InnoDB はテーブル内の特定の行数...
最近、Docker がコンテナの起動時に特定のプロセスを直接実行できるようにする方法を調べていたとこ...
著者: 丁易出典: https://chengxuzhixin.com/blog/post/mysq...
目次1. 読みやすいコード1. 統一コード形式2. マジックナンバーを削除する3. 単一機能原則2....
前回の記事では、Windows でタイムアウトを試してみました。この記事では、Linux で試してみ...
1. doctypeの役割、厳密モードと混合モードの違い、そしてその重要性1. 構文形式: <...
この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...
この記事では、宝くじマシンの効果を実現するためのJavaScriptの具体的なコードを参考までに共有...