にわかサーバー屋さんの覚書

サーバー系を担当しているけど、設計などは日々勉強中のプログラマの覚書

ID管理のヒント - オンラインデータリバランシング@LINEの技術

LINEの技術 - オンラインデータリバランシング

 

急増するLINEインフラの課題と対応

http://tech.naver.jp/blog/?p=3041

 

上記のLINEのエンジニアのブログ内容が興味深い。

特に、DBのshardに関する部分の設計は、なるほどと思った。

 

見せてもらったことのあるシステムで、

DBを分割することを前提にテーブル設計してあるものを見たものはほとんど無かった。

 

いや、一つ見たことがあるけど、IDの番号からDBの番号算出して、

その番号DBにデータを書き込むというシステムだった。

 

単に余り(ID%10=DB-No)から番号出して、その番号のDBに書き込みだけ。

つまり、最初からDBを分割してからスタートアップしていた。

なので、最初からキャパとってるだけで、さらにそれ超えると作り直し。

設計したのはアホなのかと思う。

 

 

LINEのID管理は、

 

・IDから、ハッシュ値でグループ化

・ハッシュのグループにDB番号をマッピング

 f:id:xev:20140516160806p:plain

しているらしい。

 

 

マッピングも、現在のDB番号と、移行先のDB番号を用意しており、

システム的に無停止で増設などが出来る様に作っているらしい。

 

まぁ、そこの部分は自社開発の仕組みっぽいので、

参考になるのは、IDに関しては、

 

[ID-Hashグループ] -> [Hashグループ->Shard先/Shard移行先]

 

という感じで設計しておくのが良いよねって感じですかね。

 

 

Shardingに関してはこちらの解決策も併せて考えておきたい。

SPIDER for MySQL
http://spiderformysql.com/