回答:
MongoDBを使用して、ほとんどまたはすべてのエンティティを高速のドキュメント指向ストレージに保存できます。このタイプのストレージは、Drupalコアにある標準のSQLベースのストレージ(「フィールドごとに1つのテーブル」スキーマに基づいています)よりもはるかに優れています。
Drupal 7の現在の状態では、次のものがあります。
これにより、MongoDBのエンティティに対する高速クエリが可能になり、オープンソースSQLデータベースがサポートしない複雑なインデックス(テーブル間のインデックスを含む)を追加できます。同時に、エンティティのベーステーブルはまだSQLに格納されているため、SQLのみのモジュール(Flagなど)で結合できるため、相互運用性を失うことはありません。
このタイプの高速クエリは、EntityFieldQueryメカニズムのおかげで利用できます。これは、エンティティ、プロパティ、およびフィールドに対するクエリを抽象的な方法で構築する方法です。コアのデフォルト実装はこれらのクエリをSQLに変換しますが、MongoDBモジュールには、MongoDBからのクエリを直接満たすことができるフル機能の実装があります。
ViewsのEntityFieldQueryバックエンドのおかげで、使い慣れたツールを使用することで、この機能を簡単に活用できます。唯一の欠点は、リレーションシップがサポートされていないことです(ただし、実際には、それらを必要とすることはめったにありません。これは、エンティティオブジェクトに追加データをプッシュし、エンティティの追加プロパティとして公開することで回避できます)。
一言で言えば、クエリのパフォーマンスがプロジェクトで問題になると、それは重要なデータセット(たとえば、特定のエンティティタイプの数万のエンティティから始まる)が発生するとすぐに発生し、MongoDBは純益です非常に少数の欠点のため。強くお勧めします。
MongoDBなどは、比較的柔軟な方法で構造化(階層)データを格納するように設計されています。
たとえばDrupal 7
、を使用する場合field_sql_storage
、すべてのフィールドは独自のテーブルを取得します。コンテンツタイプに10個のフィールドを添付すると、データベースに10個のテーブルが作成されます。そのノードをロードfield_sql_storage
すると、フィールドごとおよびノードごとにクエリを実行します(使用する場合は複数のノードnode_load_multiple
)。
mongodb_field_storageを使用すると、ノードのすべてのフィールドを単一のドキュメントに保存し、単一のクエリで取得できます。
ウォッチドッグ、セッション、キャッシュ、ブロックなど、MongoDBに保存することもできます。
ただし、MySQLは引き続き必要ですが、MongoDBはそれを置き換えません(特定の部分のみ)。
もう1つの利点は、MongoDBを使用すると簡単に拡張できることです。クラスターに多くのサーバーを追加して、それらの間でデータを共有できます。
長所には短所があります。
Drupal全体をMongoDbに切り替えることはできないため、2つのデータベースをサポートし、それらが連携して正常に動作することを確認する必要があります。
多くのモジュールはmongodbと連携できないため、相互運用性が失われます。
差し迫った必要がない限り(システムの一部がリクエストの数やデータの量に対応していないなど)、私は切り替えません。そして、限界に近づき始めたときでも、問題にハードウェアを投げたり、切り替える前にチューニングしたりすることを検討してください。
私は以前にこれに答えたと思っていました、SOにはほとんど重複しています