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