最初は大量のデータを収集しないため、スケーリング機能を必ずしも必要としないアプリケーションを作成しています。 (ただし、運が良ければ、道をたどる可能性があります。)
Webサーバーとデータベースを同じボックスで実行します(今のところ)。
そうは言っても、パフォーマンスと効率を求めています。
私のアプリケーションの主な部分は、ブログ記事をロードすることです。 RDBMS(MySQL)を使用して、単一のブログ記事ページをロードするために、6つのクエリ(結合するクエリのうち2つ)を作成します。
select blog
select blog_album
select blog_tags
select blog_notes
select blog_comments (join with users)
select blog_author_participants (join with users)
ただし、 MongoDB を使用すると、6つのテーブルを非正規化して2つのテーブル/コレクションにフラット化でき、クエリを1つのクエリに最小化できます。
users
blogs
->blog_album
->blog_tags
->blog_notes
->blog_comments
->blog_author_participants
次に、MongoDBスキーマを使用して、データの冗長性を確保します。ただし、ハードドライブ領域はCPU /サーバーよりも安価です。
1.)これはMongoDBを使用するのに良いシナリオでしょうか?
2.)MongoDBを使用してパフォーマンスを向上させるのは、単一サーバーを超えて拡張する場合のみですか?
3.)MongoDBを使用して耐久性のリスクはありますか?挿入は最初にメモリに書き込まれ、次にデータベースに書き込まれるため、挿入の実行中にデータが失われる可能性があると聞きました。
4.)これにより、実稼働環境でMongoDBを使用できないようにする必要がありますか?
ただし、MongoDBを使用すると、6つのテーブルを非正規化して2つのテーブル/コレクションにフラット化でき、クエリを1つのクエリに最小化できます。
ただし、適切に作成された単一のSQLステートメントを使用して、単一のブログ投稿に関連する6つのテーブルの情報をMySQLに簡単に照会できます。
ただし、ハードドライブの容量はCPU /サーバーよりも安価です。
パフォーマンスとスケーリングが優先される場合、クエリを実行するためにすべてをメインメモリと十分なCPUコアに収めるのに十分なRAMが必要です。エンタープライズグレードのRAID 10アレイは要件です誤解しないでください。ただし、データベースソフトウェア(MongoDBまたはMySQL)がメインメモリに収まらないインデックスをスキャンする必要があるとすぐに、大規模なアクティブデータベースを想定した苦痛の世界に直面します。 )
私はMongoDBが好きですが、私の頭に浮かぶ大きな強みはmap/reduceとそのドキュメント指向です。これらの機能はどちらも必要ありません。 MySQLは大規模な展開で実績があり、パーティショニングをサポートします(ただし、パーティショニングとシングル(およびパッシブバックアップ)サーバーの大幅な向上を実現するには、データベースが50〜100 GB程度である必要があります。トン(64 GB以上)のRAM。パフォーマンスが本当に重要な場合は、インデックスを最大限に制御できるため、MySQLの方が望ましいと主張します。
それは、MongoDBが高性能ではないということではありませんが、おそらくその場所はブログを提供していないでしょう。インサートに関する懸念も有効です。 MongoDBは [〜#〜] acid [〜#〜] システムではありません。両方のシステムでのGoogleトランザクションと比較。
MongoDBは、長所に合ったユースケースがある場合に使用します。
スキーマレスのドキュメントストアが必要ですか?いいえ、安定したスキーマがあります。
自動シャーディングが必要ですか?いや、ハードウェアを水平方向に拡張するための特別なデータニーズや予算はありません。
Map/reduceデータ処理が必要ですか?ブログのようなものではありません。
なぜあなたはそれを検討しているのですか?
ここに良い説明があります: http://mod.erni.st/nosql-if-only-it-was-that-easy/
最後の段落で要約します。
次のアプリは何に構築するのですか?おそらくPostgres。 NoSQLを使用しますか?多分。 HadoopとHiveも使用できます。すべてをフラットファイルに保存することもできます。たぶん私は磁気浮上でハッキングを始めます。仕事に最適なものを使用します。レポートが必要な場合は、NoSQLを使用しません。キャッシングが必要な場合は、おそらくTokyo Tyrantを使用します。 ACIDityが必要な場合、NoSQLは使用しません。大量のカウンターが必要な場合は、Redisを使用します。トランザクションが必要な場合は、Postgresを使用します。 1種類のドキュメントが大量にある場合は、おそらくMongoを使用します。 1日に10億個のオブジェクトを作成する必要がある場合は、おそらくヴォルデモートを使用します。全文検索が必要な場合は、おそらくSolrを使用します。揮発性データの全文検索が必要な場合は、おそらくSphinxを使用します。
NoSQL vs.RDBMS:Apples and Oranges?
NoSQLを使用できるかどうかを決定する前に、NoSQLの概要とその機能について少し読むことをお勧めします。通常のデータベースを取得して、そのようなNoSQLに変換することはできません。データの操作方法はまったく異なります。
NoSQLには間違いなく用途があります。しかし、それは間違いなくすべての答えではありません。 NoSQLの主な利点は、簡単に変更可能なデータモデルです。
mongodbを使用する利点(Moshe Kaplan
dzone
で公開 記事 )
MongoDBは、CAP理論のConsistency
およびPartitioning
要件を満たします(一貫性、可用性、パーティション分割)
関連するSEの質問: