こんにちは、かびらです。
本日はDynamoDBについて解説します。
DynamoDBとは?

DynamoDBは、AWSで利用できるキーバリュー型のNoSQLデータベースです。
読み書きのスピードが非常に速く、自動スケーリングにも対応しているため、アクセスが集中しても安定して動作します。
また、マルチリージョン構成も簡単に組めるので、世界中のユーザーに対して高速なレスポンスを提供できます。
DynamoDBを選んだ理由

LuxucomでDynamoDBを選んだ理由は、何と言っても「読み書きが高速で、しかもグローバル対応が可能」という点ですね。
Luxucomでは、チャットなどリアルタイムで大量のデータをやり取りする場面が多いため、読み書きのスピードは欠かせません。
DynamoDBは、その高速な読み書き性能のおかげで、リアルタイム性が求められるアプリに最適なデータベースです。
さらに、グローバルに展開していくSNSを目指すLuxucomにとって、マルチリージョンでも高いスループットを維持できるDynamoDBは、とても頼りになる存在です。
データの種類によるそれぞれの役割分担

Luxucomでは、データの性質に応じて、3種類のデータベースを使い分けています。
中でもDynamoDBは、チャットメッセージのように、リアルタイムで大量のデータをやり取りする場面で活躍しています。
高速な読み書きに加えて、グローバル対応や自動スケーリングといった特徴もあり、SNSの基盤として非常に相性が良い仕組みです。
特にLuxucomでは、リアルタイム性を支える中核的な存在になっています。
一方で、整合性が求められるユーザー情報などはPostgreSQLを、通知やセッションのような一時的なデータはRedisを使って処理しています。
こうした役割分担の中で、DynamoDBは「速さとスケーラビリティ」に特化した要の存在として、大きな役割を担っています。
DynamoDBと関連するアーキテクチャ

次に、LuxucomでDynamoDBと関連するアーキテクチャを見ていきましょう。
Luxucomのチャット機能では、ユーザーから送られたチャットメッセージが、Djangoアプリケーションを経由してDynamoDBに保存されます。
Djangoからは、AWSのPython SDKであるboto3を使って、直接DynamoDBにデータを登録しています。
書き込み処理は非常に高速で、チャットのリアルタイム性を保つうえで重要な役割を担っています。
DynamoDBを使って良かった点

次に、実際に運用してみて、DynamoDBを使ってよかったと感じた点を2つご紹介します。
ひとつは、読み書きがとにかく速いこと。
チャットのように即時性が重要な処理にも余裕で対応できます。
もうひとつは、利用規模が小さいうちは、RDSよりも低コストで運用できるという点です。
スモールスタートのサービスにとっては、このコスト面の軽さも大きなメリットでした。
DynamoDBを使って難しかった点

続いて、DynamoDBを使って難しかった点です。
ひとつは、PostgreSQLと分担しているデータとの整合性です。
Luxucomでは、両者を疎結合に保ちながらも、ユーザーIDやルームIDなど、一部の情報は関連づけが必要になります。
そのため、PostgreSQL側のデータが削除されたのに、DynamoDB側には古いデータが残ってしまう、といったケースがたまに発生します。
もうひとつは、DynamoDBはDjangoのようなマイグレーション機能に対応していないため、テーブルの拡張や構造の変更時には、自分でスクリプトを用意して対応する必要があります。
このあたりは、高速性やスケーラビリティといったメリットと引き換えに、ある程度トレードオフとして受け入れなければならないポイントですね。
さいごに
というわけで今回は、Luxucomで採用しているデータベースのうち、DynamoDBの役割と使い方についてご紹介しました。
次回は、同じくLuxucomで使われているデータベース、Redisについて取り上げます。