VOL.4」でお話した内容をまとめたものを前編・後編に分けてご紹介します!本記事は前編として「膨大になったDBを何とかする」というテーマについての発表を記事にしたものになります。はじめまして、『ポケコロ』サーバー開発をしている忻です。ついて『ポケコロ』ではMariaDB、MongoDB、Redisなど様々なDBを機能によって使い分ける形となっています。今回問題となったのはMariaDBについてです。『ポケコロ』のMariaDBの構成はmaster-slave構成です。現在masterのディスク使用量が最大92%まで上昇しており、さらには毎月3~4%程度増え続けている状態となっています。単純計算をするとあと2ヶ月で使用量が100%に到達してしまいます。queryが出やすい状態にもなってしまっているため、slaveの遅延が酷くなるとサービスに影響が出てしまうため、こちらについても対応が必要となります。DBの中身についてそんな『ポケコロ』のDBには何が入っているのか確認してみます。『ポケコロ』は着せ替えアバターアプリのため、「所持しているアイテム」についてのデータが多く約50%ほどを占めています。続いて「保存しているコーディネート」についてのデータが約15%、アイテムの獲得履歴と移動履歴が約15%程度を占めています。アイテムの所持数に上限がないため、所持しているアイテムについてのデータ量はどんどん増えていきます。履歴のデータについても基本的には削除をしていないため、こちらもどんどんとデータ量が増えていきます。問題を改善するにはこの状態を改善するにはどうすれば良いのか?ということを考えるのですが、サーバースペックを上げるのにも限界があり、仮に容量を拡張できたとしてもslowqueryが解決できないなど問題は残ります。今最も手をつけなければならない問題は、如何にしてデータ量を減らし要領を確保するかです。データ量を減らし、容量を確保するために、これらの4つの方法を考えました。必要のないデータを消す履歴データに保存期間を設ける格納する元データを軽量化する似ているデータをひとまとめにする2つめの方法について、履歴に関するデータは今までお客様に過去3ヶ月分のデータしか見せていないため、削除を実行することで容量を確保できると思っていたのですが、簡単に削除するわけにはいきませんでした。理由としては大きく3つあり、1つめの理由はお問い合わせが頻繁にあり、以前のデータを調べる必要があるため、2つめの理由は『ポケコロ』はソーシャルアプリなので警察に情報の提供をする場合があるためです。3つめの理由は履歴データは分析をする材料でもあるので、削除してしまうと分析をすることができなくなるためです。これらの理由を踏まえた上で各部署に確認をとり、データの削除に取り組みました。これで容量問題は解決されたように思えましたが、実際には不要なデータや期間を過ぎた履歴データを削除したのにもかかわらず使用しているディスク容量はあまり減っていませんでした。消すことができるデータはほんの一部なので、これだけではまだ足りません。そこでさらにデータを移動させる3つの方法を考えました。同じDBの別インスタンスに移す違うDBに移す非アクティブユーザーデータのアーカイブ1番の同じDBの別インスタンスに移す方法は一見簡単そうに見えるのですが、オンプレミスのためDBサーバーを用意するのに結構時間がかかります。RDBなので別インスタンスにする場合は分散トランザクションにする必要があり、開発コストもかかります。今回は2,3番の方法を選びました。2番の方法では、MariaDBからMongoDBへ移行をします。1Documentにし、予めshardingにします。3番の方法では、非アクティブユーザーのデータをアーカイブ用のDBに移動させ、masterからデータを削除します。この時にそのユーザーが復帰した場合に、自動的にアーカイブからデータを戻せる方法も用意しました。上記の方法を試して行った結果、現在のディスク使用量は80%前後となりました。現在もデータの移動中のため、今後60%ほどまでディスク使用量を減らすことができるのではないか、と考えています。queryなどはまだ解消できていません。今後、より多くのアクティブユーザが増えた場合に備えアーキテクチャをシフトする必要があります。今回の一件を通して、今後NoSQLに全て移行することもできるのかな、とも考えています。VOL.4・後編】2Dスマホゲームにおける圧縮テクスチャ【イベントレポート】また、ココネでは一緒に働く仲間を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください。22Categoryイベントレポート技術TagcoconeMariaDB一緒に働くエンジニアを募集していますココネのエンジニア採用はこちら感性をカタチに。株式会社コメントを読み込み中...コメントをどうぞメール名前サイト%d人のブロガーが「いいね」をつけました。