|
@@ -624,7 +624,7 @@ CDNを用いてコンテンツを配信することで以下の二つの理由
|
|
|
|
|
|
他の利点としては:
|
|
|
|
|
|
-* **SSL termination** - 入力されるリクエストを解読する、また、サーバーレスポンスを暗号化することでバックエンドのサーバーがこのコストが高くつきがちな処理を請け負わなくていいように肩代わりします。
|
|
|
+* **SSL termination** - 入力されるリクエストを解読する、また、サーバーレスポンスを暗号化することでバックエンドのサーバーがこのコストが高くつきがちな処理を請け負わなくていいように肩代わりします。
|
|
|
* [X.509 certificates](https://en.wikipedia.org/wiki/X.509) をそれぞれのサーバーにインストールする必要をなくします
|
|
|
* **セッション管理** - クッキーを取り扱うウェブアプリがセッション情報を保持していない時などに、特定のクライアントのリクエストを同じインスタンスへと流します。
|
|
|
|
|
@@ -761,12 +761,12 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通
|
|
|
<p align="center">
|
|
|
<img src="http://i.imgur.com/Xkm5CXz.png">
|
|
|
<br/>
|
|
|
- <i><a href=https://www.youtube.com/watch?v=vg5onp8TU6Q>Source: Scaling up to your first 10 million users</a></i>
|
|
|
+ <i><a href=https://www.youtube.com/watch?v=w95murBkYmU>Source: Scaling up to your first 10 million users</a></i>
|
|
|
</p>
|
|
|
|
|
|
### リレーショナルデータベースマネジメントシステム (RDBMS)
|
|
|
|
|
|
-SQLなどのリレーショナルデータベースはテーブルに整理されたデータの集合である。
|
|
|
+SQLなどのリレーショナルデータベースはテーブルに整理されたデータの集合である。
|
|
|
|
|
|
**ACID** はリレーショナルデータベースにおける[トランザクション](https://en.wikipedia.org/wiki/Database_transaction)のプロパティの集合である
|
|
|
|
|
@@ -827,10 +827,10 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
|
|
|
<p align="center">
|
|
|
<img src="http://i.imgur.com/U3qV33e.png">
|
|
|
<br/>
|
|
|
- <i><a href=https://www.youtube.com/watch?v=vg5onp8TU6Q>Source: Scaling up to your first 10 million users</a></i>
|
|
|
+ <i><a href=https://www.youtube.com/watch?v=w95murBkYmU>Source: Scaling up to your first 10 million users</a></i>
|
|
|
</p>
|
|
|
|
|
|
-フェデレーション (もしくは機能分割化とも言う) はデータベースを機能ごとに分割する。例えば、モノリシックな単一データベースの代わりに三つのデータベースを持つことができます: **フォーラム**、 **ユーザー** そして **プロダクト**です。各データベースへの書き込み読み取りのトラフィックが減ることで複製ラグも短くなります。より小さなデータベースを用いることで、メモリーに収まるデータが増えます。ローカルキャッシュに保存できる量が増えることで、キャッシュヒット率も上がります。単一の中央マスターが書き込みの処理をしなくても、並列で書き込みを処理することができ、スループットの向上が期待できます。
|
|
|
+フェデレーション (もしくは機能分割化とも言う) はデータベースを機能ごとに分割する。例えば、モノリシックな単一データベースの代わりに三つのデータベースを持つことができます: **フォーラム**、 **ユーザー** そして **プロダクト**です。各データベースへの書き込み読み取りのトラフィックが減ることで複製ラグも短くなります。より小さなデータベースを用いることで、メモリーに収まるデータが増えます。ローカルキャッシュに保存できる量が増えることで、キャッシュヒット率も上がります。単一の中央マスターが書き込みの処理をしなくても、並列で書き込みを処理することができ、スループットの向上が期待できます。
|
|
|
|
|
|
##### 欠点: federation
|
|
|
|
|
@@ -841,7 +841,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
|
|
|
|
|
|
##### その他の参考資料、ページ: federation
|
|
|
|
|
|
-* [Scaling up to your first 10 million users](https://www.youtube.com/watch?v=vg5onp8TU6Q)
|
|
|
+* [Scaling up to your first 10 million users](https://www.youtube.com/watch?v=w95murBkYmU)
|
|
|
|
|
|
#### シャーディング
|
|
|
|
|
@@ -853,7 +853,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
|
|
|
|
|
|
シャーディングでは異なるデータベースにそれぞれがデータのサブセット断片のみを持つようにデータを分割します。ユーザーデータベースを例にとると、ユーザー数が増えるにつれてクラスターにはより多くの断片が加えられることになります。
|
|
|
|
|
|
-[federation](#federation)の利点に似ていて、シャーディングでは読み書きのトラフィックを減らし、レプリケーションを減らし、キャッシュヒットを増やすことができます。インデックスサイズも減らすことができます。一般的にはインデックスサイズを減らすと、パフォーマンスが向上しクエリ速度が速くなります。なにがしかのデータを複製する機能がなければデータロスにつながりますが、もし、一つのシャードが落ちても、他のシャードが動いていることになります。フェデレーションと同じく、単一の中央マスターが書き込みの処理をしなくても、並列で書き込みを処理することができ、スループットの向上が期待できます。
|
|
|
+[federation](#federation)の利点に似ていて、シャーディングでは読み書きのトラフィックを減らし、レプリケーションを減らし、キャッシュヒットを増やすことができます。インデックスサイズも減らすことができます。一般的にはインデックスサイズを減らすと、パフォーマンスが向上しクエリ速度が速くなります。なにがしかのデータを複製する機能がなければデータロスにつながりますが、もし、一つのシャードが落ちても、他のシャードが動いていることになります。フェデレーションと同じく、単一の中央マスターが書き込みの処理をしなくても、並列で書き込みを処理することができ、スループットの向上が期待できます。
|
|
|
|
|
|
ユーザーテーブルをシャードする一般的な方法は、ユーザーのラストネームイニシャルでシャードするか、ユーザーの地理的配置でシャードするなどです。
|
|
|
|
|
@@ -905,7 +905,7 @@ SQLチューニングは広範な知識を必要とする分野で多くの [本
|
|
|
* より早い接続を得るために、連続したブロックの中のディスクにMySQLをダンプする。
|
|
|
* 長さの決まったフィールドに対しては `CHAR` よりも `VARCHAR` を使うようにしましょう。
|
|
|
* `CHAR` の方が効率的に速くランダムにデータにアクセスできます。 一方、 `VARCHAR` では次のデータに移る前にデータの末尾を検知しなければならないために速度が犠牲になります。
|
|
|
-* ブログ投稿などの大きなテキスト `TEXT` を使いましょう。 `TEXT` ではブーリアン型の検索も可能です。 `TEXT` フィールドを使うことは、テキストブロックを配置するのに用いたポインターをディスク上に保存することになります。
|
|
|
+* ブログ投稿などの大きなテキスト `TEXT` を使いましょう。 `TEXT` ではブーリアン型の検索も可能です。 `TEXT` フィールドを使うことは、テキストブロックを配置するのに用いたポインターをディスク上に保存することになります。
|
|
|
* 2の32乗や40億を超えてくる数に関しては `INT` を使いましょう
|
|
|
* 通貨に関しては小数点表示上のエラーを避けるために `DECIMAL` を使いましょう。
|
|
|
* 大きな `BLOBS` を保存するのは避けましょう。どこからそのオブジェクトを取ってくることができるかの情報を保存しましょう。
|
|
@@ -974,7 +974,7 @@ NoSQL は **key-value store**、 **document-store**、 **wide column store**、
|
|
|
|
|
|
ドキュメントストアはオブジェクトに関する全ての情報を持つドキュメント(XML、 JSON、 binaryなど)を中心に据えたシステムです。ドキュメントストアでは、ドキュメント自身の内部構造に基づいた、APIもしくはクエリ言語を提供します。 *メモ:多くのキーバリューストアでは、値のメタデータを扱う機能を含んでいますが、そのことによって二つドキュメントストアとの境界線が曖昧になってしまっています。*
|
|
|
|
|
|
-以上のことを実現するために、ドキュメントはコレクション、タグ、メタデータやディレクトリなどとして整理されています。ドキュメント同士はまとめてグループにできるものの、それぞれで全く異なるフィールドを持つ可能性があります。
|
|
|
+以上のことを実現するために、ドキュメントはコレクション、タグ、メタデータやディレクトリなどとして整理されています。ドキュメント同士はまとめてグループにできるものの、それぞれで全く異なるフィールドを持つ可能性があります。
|
|
|
|
|
|
[MongoDB](https://www.mongodb.com/mongodb-architecture) や [CouchDB](https://blog.couchdb.org/2016/08/01/couchdb-2-0-architecture/) などのドキュメントストアも、複雑なクエリを処理するためのSQLのような言語を提供しています。[DynamoDB](http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/decandia07dynamo.pdf) はキーバリューとドキュメントの両方をサポートしています。
|
|
|
|
|
@@ -1077,7 +1077,7 @@ NoSQLに適するサンプルデータ:
|
|
|
|
|
|
##### その他の参考資料、ページ: SQLもしくはNoSQL
|
|
|
|
|
|
-* [最初の1000万ユーザーにスケールアップするために](https://www.youtube.com/watch?v=vg5onp8TU6Q)
|
|
|
+* [最初の1000万ユーザーにスケールアップするために](https://www.youtube.com/watch?v=w95murBkYmU)
|
|
|
* [SQLとNoSQLの違い](https://www.sitepoint.com/sql-vs-nosql-differences/)
|
|
|
|
|
|
## キャッシュ
|