プロジェクトで両方のデータベースを操作した後のPostgresとMongoの経験。
Postgres(RDBMS)
将来のアプリケーションに多くの結合を必要とする複雑なスキーマがある場合、またはすべてのデータに関係がある場合、または大量の書き込みがある場合は、Postgresをお勧めします。Postgresはオープンソースで、より高速で、ACIDに準拠しており、ディスク上のメモリ使用量が少なく、JSONストレージにも優れたパフォーマンスを発揮し、3レベルのトランザクション分離を備えたトランザクションの完全な直列化可能性を備えています。
Postgresにとどまる最大の利点は、両方の長所があることです。制約、一貫性、速度でデータをJSONBに保存できます。一方、他のタイプのデータにはすべてのSQL機能を使用できます。基盤となるエンジンは非常に安定しており、適切な範囲のデータボリュームに適切に対応します。また、選択したハードウェアとオペレーティングシステムで実行されます。Postgresは、完全なトランザクションサポートとともにNoSQL機能を提供し、フィールドデータに制約のあるJSONドキュメントを保存します。
Postgresの一般的な制約
Postgresを水平方向にスケーリングすることは非常に困難ですが、実行可能です。
Postgresでは高速読み取り操作を完全に実現することはできません。
SQLデータベースはありません
Mongo DB(Wired Tiger)
MongoDBは、「水平スケール」の次元でPostgresを打ち負かす可能性があります。JSONの保存は、Mongoが行うように最適化されていることです。Mongoは、データをBSONbと呼ばれるバイナリ形式で保存します。これは(おおよそ)JSONのスーパーセットの単なるバイナリ表現です。MongoDBは、オブジェクトを設計どおりに格納します。MongoDBによると、書き込みを多用するアプリケーションの場合、Mongoによると、新しいエンジン(Wired Tiger)を使用すると、書き込みパフォーマンスが最大10倍向上し(これを試してみる必要があります)、ストレージ使用率が80%削減され、ストレージのコストを削減できます。 、ハードウェアの利用率を高めます。
MongoDbの一般的な制約
スキーマレスストレージエンジンを使用すると、暗黙的なスキーマの問題が発生します。これらのスキーマは、ストレージエンジンによって定義されるのではなく、アプリケーションの動作と期待に基づいて定義されます。
スタンドアロンのNoSQLテクノロジーは、非構造化アプリケーションの高スループットパフォーマンスを優先して重要なデータ保護を犠牲にするため、ACID標準を満たしていません。NoSQLデータベースにACIDを適用することは難しくありませんが、データベースが遅くなり、ある程度柔軟性がなくなります。「NoSQLの制限のほとんどは、以前の制限を大幅に克服した新しいバージョンとリリースで最適化されました。」