長年運営をしてきた「ポケコロ」のDBに関して、現在の課題とその対応策についてお話します。
膨大になったDBを何とかするポケコロサーバー開発忻 楽鳴
View Slide
¿名前忻 楽鳴¿社歴2017年入社して、ポケコロサーバー開発を担当しております。その前職はSIerとして、5,6年ぐらい調査会社のシステム開発をやっていました。大量データの取り扱いがそこからです。¿趣味ゲーム、寝る¿出身上海@中国
まず、現状どうなっている??mariaDB、mongoDB、redisDBなど、機能によって使い分けています。問題になっているのは mariaDBです。左のようにmaster-slave構成となっています。masterのdisk使用量が92%まで上昇されています。(月3~4%ぐらい増え続ける)簡単計算すると何もしないと余命2ヶ月です(笑)大量データがあって slow queryも出やすい状態です。slave遅延がひどくなるとサービスに影響も出てます。
なにが入ってる??所持してるアイテム(約50%)アイテムの獲得履歴、異動履歴 (約15%)保存してるコーディネート (約15%)所持数制限がない何と履歴は削除しない!
・サーバースペックを上げても限界があります・仮に容量を拡張できたとしても、逆にslowqueryがもっと酷くなります
まず、データを減らして、容量を確保しなきゃ!!!!1. 必要のないデータを消す2. 保存期間を設ける3. 格納するデータを軽量化する4. 似てようなデータを1つに
通帳など履歴データは基本3ヶ月しか見せなかった!!
1. しょっちゅう問合せがあって、以前のデータを調べたりする必要がある2. 警察に情報の提供を協力する場合もある3. 履歴データは分析する材料でもある簡単に消すには行かなかったんです。。。
1年以上のデータのことなら問合せがほぼ来ないので、削除OKですCXチームどうしても必要の場合、BigQueryに移します。BIチーム利用契約に追記してもらいます運営チーム、法務バッチ実装して、一定期間過ぎたデータを継続的に削除しますようにサーバーチームメンテで過去のデータを削除しますサーバーチームCMSなど参照先を変更など対応します。サーバーチーム
不要なデータや期間のある履歴を消したけど、そこまで減っていなかったんです
データを移動させ、容量を確保できるじゃん!!!!1. 同じDBの別インスタンスに移す2. 違うDBに移す3. 非アクティブユーザーデータのアーカイブ
同じDBの別インスタンスに移すのは簡単そうに見えるんです。が、オンプレミスなので、DBサーバーを用意するのは結構時間が必要です。そして、RDBなので、別インスタンスになると、分散トランザクションに変えなければ行けないんです。
MariaDBからMongoDBに移します。・可能の限り1User 1Docment・予めshardingに非アクティブユーザーのデータをアーカイブ用DB移して削除します・復帰した場合、自動的にデータを戻せる仕組みも用意
92%80%60%今ここdisk使用率
将来のために何かを準備しないといけないんだ!! 容量の危機が一旦回避しただけです。いくつのテーブルが大きいすぎ、slow queryなどはまだ解消されていません 倍以上のDAU、MAUになった時でも耐えられるようにアーキテクチャにシフトしないといけません。