JA
Railsアプリでの大量データ永続化や移行では、普段のCRUD中心の開発とは異なる設計が求められます。 データ量が増えるにつれ、単純な保存処理だけではなく、データモデル、データストア、バッチアーキテクチャ、システム負荷まで考慮した設計が必要になります。 弊社では、ユーザーの不正利用対策等のために、2.5億件を超える電話番号と、その20年以上にわたる使用履歴データをRailsアプリケーションへ取り込むプロジェクトに取り組みました。 最初の課題は、20年以上の使用履歴をそのまま保存すると、600億件を超えるレコードになってしまうことでした。そこで、「状態が変化したタイミングだけを保存する」データモデルへ変更し、保存件数を大幅に削減しました。 この変更により保存件数を大幅に削減できました。しかし、それでも数億件規模のデータを扱う必要があり、データストア選定、50GBを超えるCSVのストリーミング読み込み、並列Bulk Upsert、バッチのリラン設計、OOM、デッドロック、RDBMSのCPU負荷など、さまざまな課題に直面しました。 本セッションでは、それぞれの課題に対する設計判断と、そのトレードオフを紹介します。 単なる高速化テクニックではなく、Railsアプリケーションで大量データを安全かつ継続的に扱うための設計の考え方を持ち帰っていただける内容を目指します。