いいものをつくろう

CTOの日記

DB

shardingとpartitioningの違いは?【分散データベース】

投稿日:

表題は

shardingとpartitioningの違いは?

ですが、サブタイトルは

partitioningを正しく理解すると自ずとshardingが理解できる

です。

 

シャーディングとパーティショニングの違いは

パーティショニングはもっと

分散コンピューティングにおいて一般的な用語でデータベースのデータ分ける事です。

データの分け方もいろいろあって

そもそもあるシステムのデータベースAはhost1に、データベースBはhost2に持たすや、テーブルA~Eはhost1に、のように分ける方法は

Vertical partitioningといいいます。

反対にHorizontal partitioingというものあります。

これがshardingです。特別にというか、horizontal partitioningは別名が付いているだけです。

で、horizontalは、同じテーブルでも、行ごとにhostを分ける考え方です。

例えばユーザーというテーブルが有ったときに

Aから始まる名前のユーザーはhost1に、

Bから始まる名前のユーザーはhost2に、

という要領で分ける(partritioningする)方法です。

このshardingの場合、ホットスポットをつくる場合があります。ホットスポットとは分散において、あると特定のhostにデータが集中してしますことです。

 

以下にここまでのおさらいの図をいれます。

Partitioning by application side アプリケーションがデータがどのホストにあるか特定しないといけない。

- Redis, Memcache, kyotoTycoon

Partitioning by database side データベース側でデータがどのホストにあるか管理しているので、アプリケーションは基本、データがどこに存在しているかを意識しなくてよい。

- Cassandara, MongoDb, Hbase, Hadoop

 

 

分散コンピューティングにおけるPartitioningの問題点

・ノードを増やしたときに、リバランスが必要

・ホットスポットがでてしまう

・Joinが計算コストが高い

 

なので、できることなら、分散(partitoining)しないでも行けないか

考えてみて、やはりデータ量の問題から分散しないといけないときは

Partitioningを考えましょう。

 

Consistent Hashingとはpartitioningを一種です。

まず、partitioningのおさらいで

databaseやtableごとに分ける方法、

user idのhash(user id)で分けるようなhash&modな方法が

思いつく方法です。

hash&modな方法だとノードを増やしたときのレバランスが

全ノードに対して発生します。それを改善したのが

consistent hashingで、範囲を予めホスト間で決めておくという

ものです。範囲hashingといってもいいでしょう。

 

 

 

以上です

 

参考参照:

動画Sharding & Database Partitioning | System Design Basics 

stack overflow database sharding vs partitioning

 

 

-DB

Copyright© CTOの日記 , 2020 All Rights Reserved.