このシリーズでは、弊社が開発しているLuxucomというSNSアプリを例に、Webアプリがどうやって動いているのかを、図とともにわかりやすく解説しています。
今回はその第3回。
Luxucomの代表的なアーキテクチャの中から、ユーザーやルームの情報などを管理しているリレーショナルデータベース、「PostgreSQL」について解説します。
PostgreSQLとは?

まずは、PostgreSQLとは?というところからはじめます。
PostgreSQLは、オープンソースのリレーショナルデータベースです。
MySQLなどと並んで広く使われていて、商用・非商用問わず、さまざまな現場で採用されています。
特徴としては、高機能で拡張性が高いこと。
そして、複雑なデータやクエリにも柔軟に対応できるのが大きな強みです。
PostgreSQLを選んだ理由

LuxucomでなぜPostgreSQLを採用したのか?
その理由は、「無料で使えるのに、高機能」という点ですね。
オープンソースでここまで安定していて、商用でもバリバリ使えるって、本当にありがたい存在です。
PostgreSQL・MySQL・Oracleの比較

ここで、よく使われている3つのデータベース、PostgreSQL、MySQL、そしてOracleを比較してみました。
特に注目したいのは、PostgreSQLが無料で高機能、かつ拡張性も高いという点です。
Oracleも非常に高性能かつ拡張性も高いですが、ライセンスコストがかかるのがネックです。
MySQLはコスパは良いですが、PostgreSQLと比較すると、機能性と拡張性に乏しいです。
Luxucomでは、これらのバランスの良さからPostgreSQLを採用しています。
データの種類によるそれぞれの役割分担

Luxucomでは、データの種類によって、PostgreSQLだけでなく、DynamoDBやRedisも活用して、それぞれの特性を活かしながら管理しています。
データの種類ごとに役割を整理すると、このようになります。
ユーザー情報やルーム情報、NFTの登録情報など、アプリの根幹となる重要なデータは、PostgreSQLで管理しています。
こうしたデータは、複数のテーブルにまたがって整合性を保ったり、トランザクションの正確な処理が求められるため、リレーショナルデータベースであるPostgreSQLがぴったりなんです。
一方で、チャットメッセージのように、グローバルに大量のデータを、高速に登録・取得する必要があるものは、DynamoDBを採用しています。
また、ユーザーのセッション情報やWebSocket通信の管理など、ごく短時間で処理される一時的なデータには、Redisを採用しています。
このようなデータベースの中で、PostgreSQLは、「正確さ」と「構造化されたデータ管理」に特化した役割を担っているんですね。
PostgreSQLと他サービスとの連携

Luxucomにおける、PostgreSQLと他のサービスとの連携について見ていきます。
アプリケーション層ではDjangoを採用しており、データベースアクセスはDjangoのORMを通じて行っています。
そしてその接続先として、AWSのAuroraを使用しています。
AuroraはPostgreSQL互換のエンジンを備えていて、商用運用にも耐えうる高い信頼性とスケーラビリティが大きな魅力です。
PostgreSQLを使って良かった点
PostgreSQLを使ってみて、Luxucomで実際に「良かったな」と感じた点をご紹介します。

Djangoとの相性が良いこと
まずひとつ目は、Djangoとの相性の良さです。
Djangoは、PostgreSQLを公式にサポートしていて、ORMを通したデータ操作もとてもスムーズに行えます。
開発は無料のPostgreSQL、本番は有料のAurora。同じコードでそのまま運用に移行できる
そしてふたつ目が、開発と本番で同じコードを使い回せるという点です。
開発環境では、無料で立てられるPostgreSQLサーバを使いながら、本番環境では、有料のAuroraを使う、といった切り替えが容易にできます。
実際にこの仕組みで運用していて、移行やデプロイ時のトラブルも少なく、とても助かっています。
PostgreSQLを使って難しかった点

続いてPostgreSQLを使って難しかった点ですが、振り返ってみても特にありませんでした。
詰まったことがあれば、ChatGPTが的確に回答してくれますし、PostgreSQLだから特別難しかったという点は、正直ひとつもありませんでした。
さいごに
というわけで今回は、Luxucomで採用しているデータベースのひとつ、PostgreSQLについてお話ししました。
次回は、同じくLuxucomで使われているデータベース、「DynamoDB」について取り上げます。