51

どのシナリオがより理にかなっていますか?MongoDBがインストールされた複数のEC2インスタンスをホストするか、Amazon SimpleDB Webサービスを使用しますか?

MongoDBで複数のEC2インスタンスがある場合、インスタンスを自分でセットアップするという問題があります。

SimpleDBを使用すると、Amazonのデータ構造にロックされるという問題がありますか?

開発に関してどのような違いがありますか?サービスレイヤーのDAOを切り替えて、MongoDBまたはAWS SimpleDBに書き込むことはできませんか?

4

3 に答える 3

58

SimpleDBにはいくつかのスケーラビリティの制限があります。シャーディングによってのみスケーリングでき、mongodbやcassandraよりもレイテンシーが高く、スループット制限があり、他のオプションよりも価格が高くなります。スケーラビリティは手動です(シャーディングする必要があります)。

より幅広いクエリオプションが必要で、読み取り率が高く、データがそれほど多くない場合は、mongodbの方が適しています。ただし、耐久性を確保するために、マスター/スレーブとして少なくとも2つのmongodbサーバーインスタンスを使用する必要があります。そうしないと、データの最後の1分が失われる可能性があります。スケーラビリティは手動です。simpledbよりもはるかに高速です。オートシャーディングは1.6バージョンで実装されています。

Cassandraには弱いクエリオプションがありますが、postgresqlと同じくらい耐久性があります。これはmongoと同じくらい高速で、データサイズが大きいほど高速です。書き込み操作は、cassandraでの読み取り操作よりも高速です。ec2インスタンスを起動することで自動的にスケーリングできますが、構成ファイルを少し変更する必要があります(私が正しく覚えている場合)。テラバイトのデータがある場合は、cassandraが最善の策です。データをシャーディングする必要はありません。1日目から配布されるように設計されています。すべてのデータのコピーをいくつでも持つことができ、一部のサーバーが停止している場合は、稼働中のサーバーからの結果が自動的に返され、停止したサーバーのデータが他のサーバーに配布されます。フォールトトレラント性が高いです。インスタンスはいくつでも含めることができ、他のオプションよりもはるかに簡単にスケーリングできます。強力な.netおよびjavaクライアントオプションがあります。接続プール、負荷分散、

もう1つのオプションは、ビッグデータ用のHadoopですが、他のオプションほどリアルタイムではありません。データウェアハウジングにHadoopを使用できます。cassandraもmongoにもトランザクションがないため、トランザクションが必要な場合はpostgresqlの方が適しています。もう1つのオプションはAmazonRDSですが、パフォーマンスが悪く、価格が高くなっています。データベースまたはsimpledbを使用する場合は、データキャッシュ(例:memcached)も必要になる場合があります。

Webアプリの場合、データが小さい場合はmongoをお勧めします。大きい場合は、cassandraの方が適しています。mongoやcassandraのキャッシングレイヤーは必要ありません。それらはすでに高速です。simpledbはお勧めしません。また、あなたが言ったように、Amazonにロックされます。

c#、java、またはscalaを使用している場合は、インターフェイスを記述して、mongo、mysql、cassandra、またはその他のデータアクセス層に実装できます。動的言語(rub、python、phpなど)ではより簡単です。必要に応じて、そのうちの2つにプロバイダーを作成できます。また、構成を変更するだけで、実行時にストレージを変更できます。これらはすべて可能です。mongo、cassandra、simpledbを使用した開発はデータベースよりも簡単で、スキーマがなく、使用しているクライアントライブラリ/コネクタにも依存します。最も単純なのはmongoです。cassandraにはテーブルごとに1つのインデックスしかないため、他のインデックスを自分で管理する必要がありますが、私が知っているように、cassandraの0.7リリースではセカンダリインデックスが可能になります。また、それらのいずれかから始めて、必要に応じて将来的に置き換えることもできます。

于 2010-08-02T23:41:45.713 に答える
21

時間とスピードの両方の問題があると思います。

MongoDB / Cassandraははるかに高速になりますが、それらを実行するには$$$を投資する必要があります。つまり、すべてのサーバーインスタンスを実行/セットアップし、それらがどのように機能するかを理解する必要があります。

一方、「トランザクションごと」のコストを直接支払う必要はありません。ハードウェアの料金を支払うだけで、大規模なサービスの場合はおそらくより効率的です。

Cassandra / MongoDBの戦いでは、次のことがわかります(過去数日間に私が個人的に関わったテストに基づいています)。

カサンドラ:

  • スケーリング/冗長性は非常に重要です
  • 構成は非常に激しい場合があります
  • レポートを作成するには、map-reduceが必要です。そのためには、Hadoopレイヤーを実行する必要があります。これは、構成するのに苦労し、パフォーマンスを向上させるのに大きな苦痛でした。

MongoDB:

  • 構成は比較的簡単です(今週の新しいシャーディングでも)
  • 冗長性はまだ「そこに到達」しています
  • Map-reduceが組み込まれており、データを簡単に取得できます。

正直なところ、数十GBのデータに必要な構成時間を考えると、MongoDBを使用しました。「これらを実行する必要がある」場合にSimpleDBを使用することを想像できます。しかし、MongoDBを実行するようにノードを構成するのは非常に単純なので、「SimpleDB」ルートをスキップする価値があるかもしれません。

DAOに関しては、Mongo用のライブラリがすでにたくさんあります。CassandraのThriftフレームワークは十分にサポートされています。おそらく、接続を抽象化するためのいくつかの単純なロジックを書くことができます。しかし、単純なCRUDよりも複雑なものを抽象化するのは難しいでしょう。

于 2010-08-03T19:57:34.133 に答える
1

5年後の今、どのOSでもMongoをセットアップするのは難しくありません。ドキュメントはわかりやすいので、Mongoの設定に問題はないと思います。他の回答はスケーラビリティの質問に対処したので、開発者の観点から質問に対処しようとします(各システムにはどのような制限がありますか)。

SimpleDBにはSを使用し、MongoにはMを使用します。

  • MはC++で書かれ、SはErlangで書かれています(最速の言語ではありません)
  • Mはオープンソースであり、どこにでもインストールされ、Sはプロプライエタリであり、AmazonAWSでのみ実行できます。また、Sのスタッフ全員に支払う必要があります
  • Sには奇妙な制限がたくさんあります。Mの制限ははるかに合理的です。最も奇妙な制限は次のとおりです。
    • ドメイン(テーブル)の最大サイズは10 GB
    • 属性値の長さ(フィールドのサイズ)は1024バイトです
    • 選択応答の最大アイテム-2500
    • Selectの最大応答サイズ(Sが返すことができるデータの最大量)-1Mb
  • Sは少数の言語(java、php、python、ruby、.net)のみをサポートし、Mはさらに多くの言語をサポートします
  • どちらもRESTをサポートしています
  • Sのクエリ構文はSQLと非常に似ていますが、それほど強力ではありません。Mを使用すると、jsonのような新しい構文を学ぶ必要があります(基本を学ぶのも簡単です)
  • Mを使用すると、データベースをどのように設計するかを学ぶ必要があります。多くの人は、スキーマレスとは、データベースに任意のジャンクをスローして簡単に抽出できることを意味すると考えているため、ジャンクイン、ジャンクアウトのマキシムが機能することに驚かれるかもしれません。Sも同じだと思いますが、確実に主張することはできません。
  • どちらも大文字と小文字を区別しない検索を許可しません。Mでは、正規表現を使用して、追加の小文字のフィールド/アプリケーションロジックを導入することなく、この制限をなんとかして(醜い/インデックスなしで)克服できます。
  • Sでの並べ替えは、1つのフィールドでのみ実行できます
  • Sの制限時間は5秒であるため、奇妙な動作をする可能性があります。5秒が経過してもクエリが終了しない場合は、部分的な番号と、クエリを続行できるトークンが表示されます。アプリケーションロジックは、このすべてのデータを合計して収集する責任があります。
  • すべてがUTF-8文字列であるため、Sで文字列以外の値(数値、日付など)を操作するのは面倒です。Mタイプのサポートははるかに豊富です。
  • どちらにもトランザクションと参加はありません
  • Mは圧縮をサポートしています。これは、同じフィールド名が何度も保存されるnosqlストアに非常に役立ちます。
  • Sは単一のインデックスのみをサポートし、Mは単一、複合、マルチキー、地理空間などをサポートします。
  • レプリケーションとシャーディングの両方をサポート

考慮すべき最も重要なことの1つは、SimpleDBには非常に基本的なクエリ言語があるということです。group by、、sum averageのような基本的なものやdistinctデータ操作もサポートされていないため、機能はRedis/Memcachedよりも実際にはそれほど豊富ではありません。一方、Mongoは豊富な​​クエリ言語をサポートしています。

于 2015-09-27T01:44:06.177 に答える