#1. インターネット時代の文脈における大きなチャンス、NoSQL を使用する理由
1.1 スタンドアロン MySQL の古き良き時代
1990 年代には、 Web サイトへのアクセスは一般的にそれほど大きくないため、単一のデータベースで簡単に処理できます。 当時は静的な Web ページがほとんどで、動的なインタラクティブな Web サイトはあまりありませんでした。
DAL dal は、Data Access Layer の英語の略称で、データ アクセス層 (Data Access Layer) です。
1. データの総量が 1 台のマシンに収まらない場合
2. データ インデックス (B ツリー) が 1 台のマシンのメモリに収まらない場合
3. データの量アクセス (読み取りと書き込みの混合) は 1 つのインスタンスでは許容できません
上記の 1 つまたは 3 つが満たされる場合は、進化します...
1.2.Memcached (キャッシュ) MySQL 垂直分割
その後、アクセス数が増加するにつれて、MySQL アーキテクチャを使用するほとんどの Web サイトでデータベースのパフォーマンス上の問題が発生し始め、Web プログラムは機能だけを重視するのではなく、パフォーマンスも追求するようになりました。プログラマは、データベースへの負担を軽減し、データベースの構造とインデックスを最適化するために、キャッシュ テクノロジを広範囲に使用し始めました。当初は、データベースの負荷を軽減するためにファイル キャッシュを使用することが一般的でした。しかし、アクセス数が増加し続けると、ファイル キャッシュを通じて複数の Web マシンを共有できなくなります。また、多数の小さなファイル キャッシュにより、比較的高い IO 負荷が生じます。 .。現時点では、Memcached は当然ながら非常にファッショナブルな技術製品となっています。 これは、データベースに直接アクセスする前の dao 層と同等ですが、中間にキャッシュ層が挿入されます。データベースへの頻繁なアクセスはパフォーマンスの低下を引き起こすため、負荷を軽減するためにコンテンツの一部をキャッシュに置きます。
1.3. Mysql マスターとスレーブの読み取り/書き込みの分離
データベースに対する書き込みプレッシャーが増加しているため、Memcached はデータベースに対する読み取りプレッシャーを軽減することしかできません。データベース
。 1 つのデータベースに読み取りと書き込みが集中すると、データベースに負荷がかかります。ほとんどの Web サイトは、読み取りと書き込みの分離を実現するマスター/スレーブ レプリケーション テクノロジを使用し始め、読み取りと書き込みのパフォーマンスと読み取りデータベースのスケーラビリティを向上させています。 。 Mysql のマスター/スレーブ モード は、現時点では Web サイトの標準構成になっています。 説明: マスター データベースにレコードの更新があります。データの整合性を確保するには、データをスレーブ データベースにコピーする必要があります。読み取りと書き込みの分離: マスター/スレーバー。書き込み操作をマスター ライブラリに配置し、読み取り操作をスレーブ ライブラリに配置できます。
1.4. mysql クラスターをテーブルとデータベースに水平方向に分割します
Memcached のキャッシュ、MySQL のマスター/スレーブ レプリケーション、および読み取り/書き込み分離に基づいて、At今回は、MySQL メイン データベースの書き込み圧力がボトルネックになり始めました、データ量が急増し続けました。
MyISAM はテーブル ロックを使用するため、同時実行性が高いと深刻なロックの問題が発生します。多数の高同時実行性 MySQL アプリケーションが、MyISAM の代わりに InnoDB エンジンを使用し始めました。 同時に、 は書き込み圧力やデータ増加による拡張の問題を軽減するためにサブテーブルとサブデータベースを使用することが一般的になりました。現時点では、サブテーブルとサブデータベースは人気のあるテクノロジーになっており、面接でよく聞かれる質問であり、業界で議論されるホットな技術問題でもあります。この時点で、MySQL はまだ安定していなかったテーブル パーティションを開始しましたが、これは平均的な技術力を持つ企業にも希望をもたらしました。 MySQL は MySQL Cluster クラスターを開始しましたが、そのパフォーマンスはインターネットの要件を十分に満たすことはできませんが、高い信頼性の点で非常に大きな保証を提供するだけです。
テーブルロックと行ロック? サブライブラリとサブテーブル 1-3000 が No.1 データベースに入ります。 3001~6000は倉庫2へ。お待ちください
#1.5. MySQL のスケーラビリティのボトルネック
1.6. 今日はどのような感じですか? ?
ファイアウォール-nginx-Tomcat クラスター
1.7 NoSQL を使用する理由
今日、私たちはサードパーティのプラットフォーム (Google、Facebook など) を通じて簡単にデータにアクセスし、データを取得できるようになりました。ユーザーの個人情報、ソーシャルネットワーク、地理的位置、ユーザー生成データ、ユーザー操作ログは飛躍的に増加しています。これらのユーザー データをマイニングしたい場合、SQL データベースはこれらのアプリケーションには適していませんが、NoSQL データベースの開発により、これらの大規模なデータを非常に適切に処理できるようになります。
2.
NoSQL (NoSQL = Not Only SQL) とは、「SQL だけではない」という意味で、一般的に非リレーショナルデータベースへ。インターネット Web2.0 Web サイトの台頭により、従来のリレーショナル データベースは Web2.0 Web サイト、特に超大規模で同時実行性の高い SNS タイプの Web2.0 の純粋に動的な Web サイトに対応できなくなり、多くの克服できない問題が明らかになりました。データベースは、その独自の特性により非常に急速に発展しました。 NoSQL データベースは、大規模なデータ収集と複数のデータ型によってもたらされる課題、特に超大規模データのストレージを含むビッグ データ アプリケーションの問題を解決するために作成されました。
(たとえば、Google や Facebook は、ユーザーに関する何兆ビットものデータを毎日収集しています)。これらのタイプのデータ ストアは固定スキーマを必要とせず、冗長な操作を行わずにスケールアウトできます。
3. できること拡張が簡単
NoSQL データベースにはさまざまな種類がありますが、一般的なのは 1 つです。この機能は、リレーショナル データベースのリレーショナル特性を削除することです。データ間に関連性がないため、拡張が非常に簡単です。また、目に見えない形でアーキテクチャ レベルでのスケーラビリティ機能も実現します。
大規模なデータ ボリュームに対する高いパフォーマンスNoSQL データベースは非常に高い読み取りおよび書き込みパフォーマンスを備えており、特に大規模なデータ ボリュームでも優れたパフォーマンスを発揮します。
これは、リレーションシップがなく、データベース構造が単純であるためです。 一般的に、MySQL はクエリ キャッシュを使用します。テーブルが更新されるたびにキャッシュは無効になります。粒度の大きなキャッシュです。Web2.0 で頻繁にやり取りを行うアプリケーションでは、キャッシュのパフォーマンスは高くありません。
NoSQL のキャッシュはレコードレベルで粒度の細かいキャッシュであるため、このレベルでは NoSQL のパフォーマンスがはるかに高くなります。
NoSQL は、保存するデータのフィールドを事前に作成する必要がなく、いつでもカスタマイズしたデータ形式を保存できます。時間。
リレーショナル データベースでは、フィールドの追加と削除は非常に面倒です。非常に大量のデータを含むテーブルの場合、フィールドの追加は単なる悪夢です。RDBMS
高度に組織化された構造化データ 構造化照会言語 (SQL)
データとリレーションシップは両方とも別々に保存されますテーブル
データ操作言語、データ定義言語
厳密な一貫性
基本トランザクション
NoSQL
SQL以上のものを表現 宣言型クエリなし 言語
事前定義スキーマなし
Key-Value ストア、列ストア、ドキュメント ストア、グラフ データベース
ACID プロパティではなく結果整合性
非構造化および予測不可能なデータ:
CAP 定理
高パフォーマンス、高可用性、およびスケーラビリティ
Redis (データ型とキャッシュ、あらゆる面で優れています)
Memcached (キャッシュ) MongDB (最も類似しています)
KV## の再生方法 # キャッシュ
永続性
Redis についての理解を話してください。 KV-CACHE-PERSITENCE
3V 3 高
ビッグデータ時代の 3V: 大量のボリューム
多様な多様性 リアル-time Velocity
システム、淘宝ダブルイレブンの大量データに関するいくつかの問題の説明。 Weibo、テキストフィールド、ビデオフィールド、背景フィールドなど。多様化。 12306 には高いリアルタイム要件があります。絶対的なリアルタイムは不可能です
3 つの高いインターネット要件:
高同時実行
高パフォーマンス
システムは 12306 などの高同時実行をサポートする必要があります。スレッドを取得します。
水平方向と垂直方向の拡張性。水平方向では、1 台のマシンでは不十分な場合は、さらにマシンを追加します。
高パフォーマンス要件
関連する詳細については、
以上がNoSQL を学習する Redis の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。