From 9481662a171eaa7701ed35f3704e5317bdcdede9 Mon Sep 17 00:00:00 2001 From: Donne Martin Date: Fri, 5 Jan 2018 19:25:20 -0500 Subject: [PATCH 1/8] Make some minor wording/formatting changes (#120) --- README.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 3b394d5..cca8a79 100644 --- a/README.md +++ b/README.md @@ -556,7 +556,7 @@ Services such as [CloudFlare](https://www.cloudflare.com/dns/) and [Route 53](ht ### Disadvantage(s): DNS * Accessing a DNS server introduces a slight delay, although mitigated by caching described above. -* DNS server management could be complex, although they are generally managed by [governments, ISPs, and large companies](http://superuser.com/questions/472695/who-controls-the-dns-servers/472729). +* DNS server management could be complex and is generally managed by [governments, ISPs, and large companies](http://superuser.com/questions/472695/who-controls-the-dns-servers/472729). * DNS services have recently come under [DDoS attack](http://dyn.com/blog/dyn-analysis-summary-of-friday-october-21-attack/), preventing users from accessing websites such as Twitter without knowing Twitter's IP address(es). ### Source(s) and further reading @@ -727,9 +727,7 @@ Additional benefits include: Source: Intro to architecting systems for scale

-Separating out the web layer from the application layer (also known as platform layer) allows you to scale and configure both layers independently. Adding a new API results in adding application servers without necessarily adding additional web servers. - -The **single responsibility principle** advocates for small and autonomous services that work together. Small teams with small services can plan more aggressively for rapid growth. +Separating out the web layer from the application layer (also known as platform layer) allows you to scale and configure both layers independently. Adding a new API results in adding application servers without necessarily adding additional web servers. The **single responsibility principle** advocates for small and autonomous services that work together. Small teams with small services can plan more aggressively for rapid growth. Workers in the application layer also help enable [asynchronism](#asynchronism). @@ -1259,8 +1257,8 @@ Refresh-ahead can result in reduced latency vs read-through if the cache can acc ### Disadvantage(s): cache * Need to maintain consistency between caches and the source of truth such as the database through [cache invalidation](https://en.wikipedia.org/wiki/Cache_algorithms). -* Need to make application changes such as adding Redis or memcached. * Cache invalidation is a difficult problem, there is additional complexity associated with when to update the cache. +* Need to make application changes such as adding Redis or memcached. ### Source(s) and further reading @@ -1485,12 +1483,12 @@ REST is focused on exposing data. It minimizes the coupling between client/serv | Operation | RPC | REST | |---|---|---| -| Signup | **POST** /signup | **POST** /persons | -| Resign | **POST** /resign
{
"personid": "1234"
} | **DELETE** /persons/1234 | +| Signup | **POST** /signup | **POST** /persons | +| Resign | **POST** /resign
{
"personid": "1234"
} | **DELETE** /persons/1234 | | Read a person | **GET** /readPerson?personid=1234 | **GET** /persons/1234 | | Read a person’s items list | **GET** /readUsersItemsList?personid=1234 | **GET** /persons/1234/items | | Add an item to a person’s items | **POST** /addItemToUsersItemsList
{
"personid": "1234";
"itemid": "456"
} | **POST** /persons/1234/items
{
"itemid": "456"
} | -| Update an item | **POST** /modifyItem
{
"itemid": "456";
"key": "value"
} | **PUT** /items/456
{
"key": "value"
} | +| Update an item | **POST** /modifyItem
{
"itemid": "456";
"key": "value"
} | **PUT** /items/456
{
"key": "value"
} | | Delete an item | **POST** /removeItem
{
"itemid": "456"
} | **DELETE** /items/456 |

@@ -1742,9 +1740,9 @@ Handy metrics based on numbers above: #### Source(s) and further reading -* [kilimchoi/engineering-blogs](https://github.com/kilimchoi/engineering-blogs) +Looking to add a blog? To avoid duplicating work, consider adding your company blog to the following repo: -The list of blogs here will be kept relatively small and [kilimchoi/engineering-blogs](https://github.com/kilimchoi/engineering-blogs) will contain the larger list to avoid duplicating work. Do consider adding your company blog to the engineering-blogs repo instead. +* [kilimchoi/engineering-blogs](https://github.com/kilimchoi/engineering-blogs) ## Under development From 90b1bc4eaf67042be7d15ed2fa457f31c6cb536a Mon Sep 17 00:00:00 2001 From: Chang Liu Date: Sun, 21 Jan 2018 17:54:59 +0100 Subject: [PATCH 2/8] Add Netflix in Company Architectures (#122) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cca8a79..747c5ab 100644 --- a/README.md +++ b/README.md @@ -1678,6 +1678,7 @@ Handy metrics based on numbers above: | Facebook | [Scaling memcached at Facebook](https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/key-value/fb-memcached-nsdi-2013.pdf)
[TAO: Facebook’s distributed data store for the social graph](https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/data-store/tao-facebook-distributed-datastore-atc-2013.pdf)
[Facebook’s photo storage](https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf) | | Flickr | [Flickr architecture](http://highscalability.com/flickr-architecture) | | Mailbox | [From 0 to one million users in 6 weeks](http://highscalability.com/blog/2013/6/18/scaling-mailbox-from-0-to-one-million-users-in-6-weeks-and-1.html) | +| Netflix | [Netflix: What Happens When You Press Play?](http://highscalability.com/blog/2017/12/11/netflix-what-happens-when-you-press-play.html) | | Pinterest | [From 0 To 10s of billions of page views a month](http://highscalability.com/blog/2013/4/15/scaling-pinterest-from-0-to-10s-of-billions-of-page-views-a.html)
[18 million visitors, 10x growth, 12 employees](http://highscalability.com/blog/2012/5/21/pinterest-architecture-update-18-million-visitors-10x-growth.html) | | Playfish | [50 million monthly users and growing](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) | | PlentyOfFish | [PlentyOfFish architecture](http://highscalability.com/plentyoffish-architecture) | From 017884eaf946d26e368882a7cb4a4bc9f2732484 Mon Sep 17 00:00:00 2001 From: Donne Martin Date: Tue, 23 Jan 2018 21:26:59 -0800 Subject: [PATCH 3/8] Add Vietnamese translation link (#128) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 747c5ab..a99bf1d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -*[English](README.md) ∙ [日本語](README-ja.md) ∙ [简体中文](README-zh-Hans.md) | [Brazilian Portuguese](https://github.com/donnemartin/system-design-primer/issues/40) ∙ [Italian](https://github.com/donnemartin/system-design-primer/issues/104) ∙ [Korean](https://github.com/donnemartin/system-design-primer/issues/102) ∙ [Persian](https://github.com/donnemartin/system-design-primer/issues/110) ∙ [Polish](https://github.com/donnemartin/system-design-primer/issues/68) ∙ [Russian](https://github.com/donnemartin/system-design-primer/issues/87) ∙ [Traditional Chinese](https://github.com/donnemartin/system-design-primer/issues/88) ∙ [Turkish](https://github.com/donnemartin/system-design-primer/issues/39) | [Add Translation](https://github.com/donnemartin/system-design-primer/issues/28)* +*[English](README.md) ∙ [日本語](README-ja.md) ∙ [简体中文](README-zh-Hans.md) | [Brazilian Portuguese](https://github.com/donnemartin/system-design-primer/issues/40) ∙ [Italian](https://github.com/donnemartin/system-design-primer/issues/104) ∙ [Korean](https://github.com/donnemartin/system-design-primer/issues/102) ∙ [Persian](https://github.com/donnemartin/system-design-primer/issues/110) ∙ [Polish](https://github.com/donnemartin/system-design-primer/issues/68) ∙ [Russian](https://github.com/donnemartin/system-design-primer/issues/87) ∙ [Traditional Chinese](https://github.com/donnemartin/system-design-primer/issues/88) ∙ [Turkish](https://github.com/donnemartin/system-design-primer/issues/39) ∙ [Vietnamese](https://github.com/donnemartin/system-design-primer/issues/127) | [Add Translation](https://github.com/donnemartin/system-design-primer/issues/28)* # The System Design Primer From ca674d8bb572db5344e323d4cb9c33502000c314 Mon Sep 17 00:00:00 2001 From: Chang Liu Date: Sat, 3 Feb 2018 00:08:50 +0100 Subject: [PATCH 4/8] Add Scaling Uber in Company Architecture (#123) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a99bf1d..43c44d4 100644 --- a/README.md +++ b/README.md @@ -1687,7 +1687,7 @@ Handy metrics based on numbers above: | TripAdvisor | [40M visitors, 200M dynamic page views, 30TB data](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html) | | Tumblr | [15 billion page views a month](http://highscalability.com/blog/2012/2/13/tumblr-architecture-15-billion-page-views-a-month-and-harder.html) | | Twitter | [Making Twitter 10000 percent faster](http://highscalability.com/scaling-twitter-making-twitter-10000-percent-faster)
[Storing 250 million tweets a day using MySQL](http://highscalability.com/blog/2011/12/19/how-twitter-stores-250-million-tweets-a-day-using-mysql.html)
[150M active users, 300K QPS, a 22 MB/S firehose](http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html)
[Timelines at scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
[Big and small data at Twitter](https://www.youtube.com/watch?v=5cKTP36HVgI)
[Operations at Twitter: scaling beyond 100 million users](https://www.youtube.com/watch?v=z8LU0Cj6BOU) | -| Uber | [How Uber scales their real-time market platform](http://highscalability.com/blog/2015/9/14/how-uber-scales-their-real-time-market-platform.html) | +| Uber | [How Uber scales their real-time market platform](http://highscalability.com/blog/2015/9/14/how-uber-scales-their-real-time-market-platform.html)
[Lessons Learned From Scaling Uber To 2000 Engineers, 1000 Services, And 8000 Git Repositories](http://highscalability.com/blog/2016/10/12/lessons-learned-from-scaling-uber-to-2000-engineers-1000-ser.html) | | WhatsApp | [The WhatsApp architecture Facebook bought for $19 billion](http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html) | | YouTube | [YouTube scalability](https://www.youtube.com/watch?v=w5WVu624fY8)
[YouTube architecture](http://highscalability.com/youtube-architecture) | From f6b7d3c8c07ead00388d3bb87d74811c04e2fe92 Mon Sep 17 00:00:00 2001 From: Christopher Date: Wed, 7 Feb 2018 19:57:00 -0500 Subject: [PATCH 5/8] Update master-slave section anchor (#129) --- solutions/system_design/query_cache/README.md | 2 +- solutions/system_design/scaling_aws/README.md | 2 +- solutions/system_design/social_graph/README.md | 2 +- solutions/system_design/web_crawler/README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/solutions/system_design/query_cache/README.md b/solutions/system_design/query_cache/README.md index 7e815ab..6d97ff2 100644 --- a/solutions/system_design/query_cache/README.md +++ b/solutions/system_design/query_cache/README.md @@ -247,7 +247,7 @@ To handle the heavy request load and the large amount of memory needed, we'll sc ### SQL scaling patterns -* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave) +* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave-replication) * [Federation](https://github.com/donnemartin/system-design-primer#federation) * [Sharding](https://github.com/donnemartin/system-design-primer#sharding) * [Denormalization](https://github.com/donnemartin/system-design-primer#denormalization) diff --git a/solutions/system_design/scaling_aws/README.md b/solutions/system_design/scaling_aws/README.md index ddd43dc..f82f39c 100644 --- a/solutions/system_design/scaling_aws/README.md +++ b/solutions/system_design/scaling_aws/README.md @@ -344,7 +344,7 @@ We can further separate out our [**Application Servers**](https://github.com/don ### SQL scaling patterns -* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave) +* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave-replication) * [Federation](https://github.com/donnemartin/system-design-primer#federation) * [Sharding](https://github.com/donnemartin/system-design-primer#sharding) * [Denormalization](https://github.com/donnemartin/system-design-primer#denormalization) diff --git a/solutions/system_design/social_graph/README.md b/solutions/system_design/social_graph/README.md index b6607a0..ef894fe 100644 --- a/solutions/system_design/social_graph/README.md +++ b/solutions/system_design/social_graph/README.md @@ -290,7 +290,7 @@ Below are further optimizations: ### SQL scaling patterns -* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave) +* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave-replication) * [Federation](https://github.com/donnemartin/system-design-primer#federation) * [Sharding](https://github.com/donnemartin/system-design-primer#sharding) * [Denormalization](https://github.com/donnemartin/system-design-primer#denormalization) diff --git a/solutions/system_design/web_crawler/README.md b/solutions/system_design/web_crawler/README.md index 358cb91..f5846e9 100644 --- a/solutions/system_design/web_crawler/README.md +++ b/solutions/system_design/web_crawler/README.md @@ -294,7 +294,7 @@ Below are a few other optimizations to the **Crawling Service**: ### SQL scaling patterns -* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave) +* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave-replication) * [Federation](https://github.com/donnemartin/system-design-primer#federation) * [Sharding](https://github.com/donnemartin/system-design-primer#sharding) * [Denormalization](https://github.com/donnemartin/system-design-primer#denormalization) From 8b29a8551027e8f4b70328a0f6dc5168f56a811e Mon Sep 17 00:00:00 2001 From: Chang Liu Date: Fri, 16 Feb 2018 09:37:45 +0800 Subject: [PATCH 6/8] Add Facebook Live Streams (#125) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 43c44d4..c91d0c2 100644 --- a/README.md +++ b/README.md @@ -1675,7 +1675,7 @@ Handy metrics based on numbers above: | Google | [Google architecture](http://highscalability.com/google-architecture) | | Instagram | [14 million users, terabytes of photos](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)
[What powers Instagram](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) | | Justin.tv | [Justin.Tv's live video broadcasting architecture](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) | -| Facebook | [Scaling memcached at Facebook](https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/key-value/fb-memcached-nsdi-2013.pdf)
[TAO: Facebook’s distributed data store for the social graph](https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/data-store/tao-facebook-distributed-datastore-atc-2013.pdf)
[Facebook’s photo storage](https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf) | +| Facebook | [Scaling memcached at Facebook](https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/key-value/fb-memcached-nsdi-2013.pdf)
[TAO: Facebook’s distributed data store for the social graph](https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/data-store/tao-facebook-distributed-datastore-atc-2013.pdf)
[Facebook’s photo storage](https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf)
[How Facebook Live Streams To 800,000 Simultaneous Viewers](http://highscalability.com/blog/2016/6/27/how-facebook-live-streams-to-800000-simultaneous-viewers.html) | | Flickr | [Flickr architecture](http://highscalability.com/flickr-architecture) | | Mailbox | [From 0 to one million users in 6 weeks](http://highscalability.com/blog/2013/6/18/scaling-mailbox-from-0-to-one-million-users-in-6-weeks-and-1.html) | | Netflix | [Netflix: What Happens When You Press Play?](http://highscalability.com/blog/2017/12/11/netflix-what-happens-when-you-press-play.html) | From 2e1627e0da0a8600ec0c67c9ba6861414cf1cbdf Mon Sep 17 00:00:00 2001 From: Donne Martin Date: Thu, 22 Feb 2018 22:49:17 -0500 Subject: [PATCH 7/8] Update contributing guidelines - PR squash (#135) --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7dfb1c9..eddc268 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -65,6 +65,7 @@ Translations to new languages are always welcome, especially if you can maintain * Invite friends to review if possible. If desired, feel free to invite friends to help your original translation by letting them fork your repo, then merging their PRs. * Add links to your translation at the top of every README*.md file. (For consistency, the link should be added in alphabetical order by ISO code, and the anchor text should be in the native language.) * When done, indicate on the PR that it's ready to be merged into the main repo. +* Once accepted, your PR will be squashed into a single commit into the `master` branch. ### Translation template credits From f952d6addc44e0bb7edb2cdee84245d41d7de882 Mon Sep 17 00:00:00 2001 From: George Javakhidze Date: Tue, 27 Feb 2018 04:28:04 +0200 Subject: [PATCH 8/8] Update re:Invent url (#137) --- README-ja.md | 20 ++++++++++---------- README-zh-Hans.md | 8 ++++---- README.md | 8 ++++---- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/README-ja.md b/README-ja.md index 4f59a98..86bf344 100644 --- a/README-ja.md +++ b/README-ja.md @@ -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 ロードバランサーは [アプリケーションレイヤー](#通


- Source: Scaling up to your first 10 million users + Source: Scaling up to your first 10 million users

### リレーショナルデータベースマネジメントシステム (RDBMS) -SQLなどのリレーショナルデータベースはテーブルに整理されたデータの集合である。 +SQLなどのリレーショナルデータベースはテーブルに整理されたデータの集合である。 **ACID** はリレーショナルデータベースにおける[トランザクション](https://en.wikipedia.org/wiki/Database_transaction)のプロパティの集合である @@ -827,10 +827,10 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ


- Source: Scaling up to your first 10 million users + Source: Scaling up to your first 10 million users

-フェデレーション (もしくは機能分割化とも言う) はデータベースを機能ごとに分割する。例えば、モノリシックな単一データベースの代わりに三つのデータベースを持つことができます: **フォーラム**、 **ユーザー** そして **プロダクト**です。各データベースへの書き込み読み取りのトラフィックが減ることで複製ラグも短くなります。より小さなデータベースを用いることで、メモリーに収まるデータが増えます。ローカルキャッシュに保存できる量が増えることで、キャッシュヒット率も上がります。単一の中央マスターが書き込みの処理をしなくても、並列で書き込みを処理することができ、スループットの向上が期待できます。 +フェデレーション (もしくは機能分割化とも言う) はデータベースを機能ごとに分割する。例えば、モノリシックな単一データベースの代わりに三つのデータベースを持つことができます: **フォーラム**、 **ユーザー** そして **プロダクト**です。各データベースへの書き込み読み取りのトラフィックが減ることで複製ラグも短くなります。より小さなデータベースを用いることで、メモリーに収まるデータが増えます。ローカルキャッシュに保存できる量が増えることで、キャッシュヒット率も上がります。単一の中央マスターが書き込みの処理をしなくても、並列で書き込みを処理することができ、スループットの向上が期待できます。 ##### 欠点: 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/) ## キャッシュ diff --git a/README-zh-Hans.md b/README-zh-Hans.md index e50f17e..c681366 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -771,7 +771,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源


- 资料来源:扩展你的用户数到第一个一千万 + 资料来源:扩展你的用户数到第一个一千万

### 关系型数据库管理系统(RDBMS) @@ -842,7 +842,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源


- 资料来源:扩展你的用户数到第一个一千万 + 资料来源:扩展你的用户数到第一个一千万

联合(或按功能划分)将数据库按对应功能分割。例如,你可以有三个数据库:**论坛**、**用户**和**产品**,而不仅是一个单体数据库,从而减少每个数据库的读取和写入流量,减少复制延迟。较小的数据库意味着更多适合放入内存的数据,进而意味着更高的缓存命中几率。没有只能串行写入的中心化主库,你可以并行写入,提高负载能力。 @@ -857,7 +857,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 ##### 来源及延伸阅读:联合 -- [扩展你的用户数到第一个一千万](https://www.youtube.com/watch?v=vg5onp8TU6Q) +- [扩展你的用户数到第一个一千万](https://www.youtube.com/watch?v=w95murBkYmU) #### 分片 @@ -1092,7 +1092,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h ##### 来源及延伸阅读:SQL 或 NoSQL -- [扩展你的用户数到第一个千万](https://www.youtube.com/watch?v=vg5onp8TU6Q) +- [扩展你的用户数到第一个千万](https://www.youtube.com/watch?v=w95murBkYmU) - [SQL 和 NoSQL 的不同](https://www.sitepoint.com/sql-vs-nosql-differences/) ## 缓存 diff --git a/README.md b/README.md index c91d0c2..90d83ed 100644 --- a/README.md +++ b/README.md @@ -759,7 +759,7 @@ Systems such as [Consul](https://www.consul.io/docs/index.html), [Etcd](https://


- Source: Scaling up to your first 10 million users + Source: Scaling up to your first 10 million users

### Relational database management system (RDBMS) @@ -825,7 +825,7 @@ Both masters serve reads and writes and coordinate with each other on writes. I


- Source: Scaling up to your first 10 million users + Source: Scaling up to your first 10 million users

Federation (or functional partitioning) splits up databases by function. For example, instead of a single, monolithic database, you could have three databases: **forums**, **users**, and **products**, resulting in less read and write traffic to each database and therefore less replication lag. Smaller databases result in more data that can fit in memory, which in turn results in more cache hits due to improved cache locality. With no single central master serializing writes you can write in parallel, increasing throughput. @@ -839,7 +839,7 @@ Federation (or functional partitioning) splits up databases by function. For ex ##### Source(s) and further reading: 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) #### Sharding @@ -1075,7 +1075,7 @@ Sample data well-suited for NoSQL: ##### Source(s) and further reading: SQL or NoSQL -* [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) * [SQL vs NoSQL differences](https://www.sitepoint.com/sql-vs-nosql-differences/) ## Cache