ホームページ バックエンド開発 PHPチュートリアル ユーザー参加記録ストレージの進化_PHPチュートリアル

ユーザー参加記録ストレージの進化_PHPチュートリアル

Jul 20, 2016 am 11:12 AM
参加する 戻る そして シーン ストレージ 仕上げる 応用 才能 操作する はい 持っている 進化 ユーザー 記録 継続的な

このようなアプリケーション シナリオがあります。ユーザーは 2 つの連続した操作 A と B を実行します。操作 A が完了する前に操作 B がトリガーされると、操作 A が完了する必要があることが表示されます。まず、操作 B を実行するには、操作 A が実行されたかどうかをクエリする必要があります。ここで生じる問題は、ユーザーの参加記録を記録し、ユーザーと操作に対するクエリ方法を提供することです。データの量が異なれば、ストレージ ソリューションも大きく異なります。データの増加に伴い、ソリューションも進化し続けます。

1. データ量が少なく、ユーザーの操作動作が固定されています:
ストレージ: MySQL
プラン: UID をキーとして使用し、1 行に 1 ユーザーを使用し、各ユーザーに含まれるユーザーを列として保存します。 、UID=100、固定ストレージはオペレーション A とオペレーション B、テーブル構造は大まかに次のとおりです:
table_operation
uid Operation_a Operation_b
100 1 1

ユーザーが A または B に参加しているかどうかをクエリしたい場合は、SQL を使用します。直接: SELECT * FROM table_operation WHERE uid=100 AND action_a=1 目標は達成できます。

問題: ユーザー操作が固定されており、拡張が困難である場合、フィールドを追加するか、テーブル ストレージを増やす必要があります。フィールドを追加する方法は、特定のデータ レベル (100 万など) 未満で実行可能です。動作時間が重要でない場合、テーブル ストレージ ソリューションを追加するパフォーマンスは非常に優れています。

2. データ量が少なく、ユーザー操作の動作が固定されていない:
シナリオ 1 と比較して、現在のシナリオでは uid 変数に加えてユーザー操作変数が追加されています。つまり、2 つの変数に注意する必要があります。 : ユーザーとユーザーの操作。
ストレージ: MySQL
オプション 1: オペレーション テーブルを追加し、オペレーション ID を生成し、uid と oid をユーザー オペレーション動作テーブルに保存します。ユーザーが新しい操作を実行すると、操作動作テーブルにレコードが挿入されます。テーブル構造はおおよそ次のとおりです。

table_operation_info
oid name
1 Operation_a
2 Operation_b

table_operation
uid oid
1 1
1 2

ユーザー 1 が操作 A を実行したかどうかをクエリする必要がある場合は、SQL を使用します。 SELECT * FROM table_operation WHERE oid=1 AND oid=1。
問題: ユーザーの操作動作が大きい場合、ユーザーの操作動作が急速に増加し、MySQL が 1 つのテーブルをロードできなくなる可能性があります。解決策については、次のシナリオで説明します。

3. 大量のデータ、ユーザーの動作の修正
ストレージ: MySQL
解決策: シナリオ 1 と比較すると、現在のシナリオはデータ量が大きく、MySQL では処理できないという点で異なります。単一のテーブルをロードします。このソリューションはこの問題を解決します。単一のテーブルが大きすぎる場合、最もコスト効率の高い方法は、別のテーブルを使用することです。現在のシーンの変数は uid なので、uid に基づいてテーブルをレベルごとに分割するだけで済みます。

4. データ量が多く、ユーザーの動作が固定されていない
ストレージ: MySQL
スキーム 1: このスキームは、ユーザーの操作動作を分類できる状況に適用されます。つまり、2 つのテーブル分割操作が追加されます。シナリオ 1 の基礎。操作に従って、行動カテゴリごとのテーブルとユーザーごとのテーブルが作成されます。現在のソリューションでは、操作動作とユーザーという 2 つの変数を扱う必要があります。 2 つのテーブル分割は、それぞれこれら 2 つの変数に対応しており、ビジネス ルールに従ってテーブル分割操作が実行され、データ量を削減するためにユーザー ID に応じてデータが水平に分割されます。

オプション 2: このソリューションは、シナリオ 2 のソリューションに基づいた完全な水平テーブル分割操作であり、ユーザー レベルに応じて分割されます。

5. データ量が非常に大きいです
ストレージ: MySQL
オプション 1: 現時点では、1 つのデータベースではニーズを満たすことができません。実際のニーズに応じて、異なるデータベースを異なるマシンに配置することを検討できます。
オプション 2: サブデータベースとサブテーブルに基づいて、それをビット単位で保存します。操作が実行されたかどうかはステータス (0、1 ステータス) であるため、1 ビットを使用して保存できます。 64 ビットには 64 個の動作動作マーカーを保存できます。

その他のストレージ
キー値データベース
実際には、単純な k-v データベースで多くのリレーショナル データベース機能を必要とせず、より少ない速度で実行できます。
メモリベースを選択するか非メモリベースを選択するかに関係なく (実際のニーズに応じて選択することも、ホットデータをメモリに保存し、サイレントデータを非メモリに保存することもできます)、それを保存するのに十分なスペースがあると仮定します。
オプション 1:
uid+oid をキーとして使用すると、値にステータスを保存したり、参加するかどうか (0 と 1) だけを保存したりできますが、特にデータ量が多すぎる場合、キーが多すぎます。 uid の数 *oid の数は、想像できないほど大きいかもしれません。
オプション 2:
一般的に、ユーザーの操作行動に関するデータの量はユーザーのサイズよりも完全に小さく、ユーザーの操作行動に関するデータは制御可能です。キーの数を減らしたい場合は、oid + ユーザー パーティション インデックス ID をキーとして使用できます。ここでのいわゆるユーザー パーティション インデックスとは、ユーザーを特定の数の領域に分割することを指し、すべてのユーザーがこの間隔で記録されます。 、10000 が間隔である場合、uid 1 ~ 9999 のユーザーは間隔 0 に分割されます。ここで、1 と 0 は、ユーザーがこの操作を実行したかどうかを格納するために使用できます。キーに対応する値は、10000 を格納するように初期化されます。 0秒。 uid=100のユーザーが操作を行うと、100番目の0が1に設定されます。
オプション 3:
オプション 2 に基づいて、10,000 個の 0 を 10,000 個の 01 ビットに変換すると、1 つのビットが 50 ビットを格納すると仮定すると、合計で 200 個だけが必要になります。
オプション 4:
ユーザーの数が非常に多い場合、ほとんどのユーザーが特定の操作に参加しない可能性があります。解決策 3 に基づいて、単純なスパース行列圧縮を追加し、保存されるときのみインデックスを各ストレージ ビットに追加します。格納された値が 0 ではない場合。
オプション 5:
まだ考えていません。共有を楽しみにしています

概要

•データ量が増加するにつれて、テーブルを分割するのが一般的な考え方です。テーブルを処理できない場合は、分割します。テーブルを分割し、ライブラリが処理できない場合はテーブルを分割し、1 台のマシンで処理できない場合はマシンを追加します。
•さまざまなストレージメディアを選択するときは、コストと需要を考慮する必要があり、すべての選択はバランスの結果です。
•スペースを節約し、ビットごとに保管します。
•時期尚早に最適化しないでください。


www.bkjia.com本当http://www.bkjia.com/PHPjc/444587.html技術記事このようなアプリケーション シナリオがあります。ユーザーは 2 つの連続した操作 A と B を持っています。操作 A が完了する前に操作 B がトリガーされた場合、操作 B は操作 A が完了した後に実行する必要があります。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Xiaohonshu アカウントを使用してユーザーを見つけるにはどうすればよいですか?私の携帯電話番号を見つけることはできますか? Xiaohonshu アカウントを使用してユーザーを見つけるにはどうすればよいですか?私の携帯電話番号を見つけることはできますか? Mar 22, 2024 am 08:40 AM

ソーシャルメディアの急速な発展に伴い、Xiaohongshuは最も人気のあるソーシャルプラットフォームの1つになりました。ユーザーは、Xiaohongshu アカウントを作成して自分の個人情報を示し、他のユーザーと通信し、対話することができます。ユーザーの小紅樹番号を見つける必要がある場合は、次の簡単な手順に従ってください。 1. Xiaohonshu アカウントを使用してユーザーを見つけるにはどうすればよいですか? 1. 小紅書アプリを開き、右下隅の「検出」ボタンをクリックして、「メモ」オプションを選択します。 2. ノート一覧で、探したいユーザーが投稿したノートを見つけます。クリックしてノートの詳細ページに入ります。 3. ノートの詳細ページで、ユーザーのアバターの下にある「フォロー」ボタンをクリックして、ユーザーの個人ホームページに入ります。 4. ユーザーの個人ホームページの右上隅にある三点ボタンをクリックし、「個人情報」を選択します。

スーパーユーザーとして Ubuntu にログインします スーパーユーザーとして Ubuntu にログインします Mar 20, 2024 am 10:55 AM

Ubuntu システムでは、通常、root ユーザーは無効になっています。 root ユーザーをアクティブにするには、passwd コマンドを使用してパスワードを設定し、su-コマンドを使用して root としてログインします。 root ユーザーは、無制限のシステム管理権限を持つユーザーです。彼は、ファイルへのアクセスと変更、ユーザー管理、ソフトウェアのインストールと削除、およびシステム構成の変更を行う権限を持っています。 root ユーザーと一般ユーザーの間には明らかな違いがあり、root ユーザーはシステム内で最高の権限とより広範な制御権限を持ちます。 root ユーザーは、一般のユーザーでは実行できない重要なシステム コマンドを実行したり、システム ファイルを編集したりできます。このガイドでは、Ubuntu の root ユーザー、root としてログインする方法、および通常のユーザーとの違いについて説明します。知らせ

自動運転シナリオにおけるロングテール問題を解決するにはどうすればよいでしょうか? 自動運転シナリオにおけるロングテール問題を解決するにはどうすればよいでしょうか? Jun 02, 2024 pm 02:44 PM

昨日の面接で、ロングテール関連の質問をしたかと聞かれたので、簡単にまとめてみようと思いました。自動運転のロングテール問題とは、自動運転車におけるエッジケース、つまり発生確率が低い考えられるシナリオを指します。認識されているロングテール問題は、現在、単一車両のインテリジェント自動運転車の運用設計領域を制限している主な理由の 1 つです。自動運転の基礎となるアーキテクチャとほとんどの技術的問題は解決されており、残りの 5% のロングテール問題が徐々に自動運転の開発を制限する鍵となってきています。これらの問題には、さまざまな断片的なシナリオ、極端な状況、予測不可能な人間の行動が含まれます。自動運転におけるエッジ シナリオの「ロング テール」とは、自動運転車 (AV) におけるエッジ ケースを指します。エッジ ケースは、発生確率が低い可能性のあるシナリオです。これらの珍しい出来事

iPhoneのホーム画面から削除を元に戻す方法 iPhoneのホーム画面から削除を元に戻す方法 Apr 17, 2024 pm 07:37 PM

ホーム画面から重要なものを削除してしまい、元に戻そうとしていますか?さまざまな方法でアプリのアイコンを画面に戻すことができます。 iPhoneでホーム画面から削除を元に戻す方法 前述したように、iPhoneでこの変更を復元する方法はいくつかあります。方法 1 – App ライブラリのアプリ アイコンを置き換える App ライブラリから直接ホーム画面にアプリ アイコンを配置できます。ステップ 1 – 横にスワイプして、アプリ ライブラリ内のすべてのアプリを見つけます。ステップ 2 – 前に削除したアプリのアイコンを見つけます。ステップ 3 – アプリのアイコンをメインライブラリからホーム画面上の正しい場所にドラッグするだけです。これが応用図です

PHP における矢印記号の役割と実際の応用 PHP における矢印記号の役割と実際の応用 Mar 22, 2024 am 11:30 AM

PHP における矢印記号の役割と実際の応用 PHP では、通常、オブジェクトのプロパティとメソッドにアクセスするために矢印記号 (->) が使用されます。オブジェクトとは、PHP におけるオブジェクト指向プログラミング (OOP) の基本概念の 1 つで、実際の開発においては、矢印記号がオブジェクトを操作する上で重要な役割を果たします。この記事では、矢印記号の役割と実際の応用例を紹介し、読者の理解を深めるために具体的なコード例を示します。 1. オブジェクトのプロパティにアクセスするための矢印シンボルの役割 矢印シンボルは、オブジェクトのプロパティにアクセスするために使用できます。ペアをインスタンス化するとき

初心者から熟練者まで: Linux tee コマンドのさまざまなアプリケーション シナリオを探索する 初心者から熟練者まで: Linux tee コマンドのさまざまなアプリケーション シナリオを探索する Mar 20, 2024 am 10:00 AM

Linuxtee コマンドは、既存の出力に影響を与えることなく、出力をファイルに書き込んだり、別のコマンドに出力を送信したりできる、非常に便利なコマンド ライン ツールです。この記事では、入門から習熟まで、Linuxtee コマンドのさまざまな応用シナリオを詳しく見ていきます。 1. 基本的な使い方 まずは、teeコマンドの基本的な使い方を見てみましょう。 tee コマンドの構文は次のとおりです。 tee[OPTION]...[FILE]...このコマンドは、標準入力からデータを読み取り、データを保存します。

Linuxシステムにおけるユーザーパスワード保存メカニズムの分析 Linuxシステムにおけるユーザーパスワード保存メカニズムの分析 Mar 20, 2024 pm 04:27 PM

Linux システムにおけるユーザー パスワードの保存メカニズムの分析 Linux システムでは、ユーザー パスワードの保存は非常に重要なセキュリティ メカニズムの 1 つです。この記事では、パスワードの暗号化された保存、パスワード検証プロセス、ユーザー パスワードを安全に管理する方法など、Linux システムにおけるユーザー パスワードの保存メカニズムを分析します。同時に、具体的なコード例を使用して、パスワード保存の実際の操作プロセスを示します。 1. パスワードの暗号化された保管 Linux システムでは、ユーザーのパスワードは平文でシステムに保管されるのではなく、暗号化されて保管されます。 L

Huawei Mate60 Proのスクリーンショット操作手順の共有 Huawei Mate60 Proのスクリーンショット操作手順の共有 Mar 23, 2024 am 11:15 AM

スマートフォンの普及に伴い、スクリーンショット機能は携帯電話を日常的に使用する上で必須のスキルの 1 つになりました。 Huaweiの主力携帯電話の1つであるHuawei Mate60Proのスクリーンショット機能は、当然のことながらユーザーの注目を集めています。今日は、誰もがより便利にスクリーンショットを撮れるように、Huawei Mate60Pro携帯電話のスクリーンショットの操作手順を共有します。まず、Huawei Mate60Pro携帯電話はさまざまなスクリーンショット方法を提供しており、個人の習慣に応じて自分に合った方法を選択できます。以下は、一般的に使用されるいくつかのインターセプトの詳細な紹介です。

See all articles