devdev blog

なにかウェブサービスを作りたい

MongoHQとAmazon DynamoDBの比較

概要

しらべた結果

比較対象としてはちょっと違うのですが、MongoDBとDynamoDBをそれぞれ使う場合の理由をアドバイスしているブログが有りました。MongoDBとの比較といいつつも、この人はMongoHQを使っているようですね。

Mason Zhang: 3 Reasons You Should Use DynamoDB over MongoDB -- MongoDBよりDynamoDBを使うべき3つの理由

理由1: DBサーバの管理の為に人員を確保するつもりが無いなら、DynamoDBを使いなさい。

  • 私がMongoDBからDynamoDBに乗り換えた1番の理由。
  • 実装すべき機能が沢山あり、サーバ管理にまで手が回らない。 
  • 21日でウェブ開発者になれるなんていう人もいるが、サーバトラブルの対応はそんなに簡単じゃない。
  • たった15000ユーザー、1.4万件のレコードで、深刻なトラブルが発生し始めた。
  • データを保存すればするほどレイテンシーが悪化していった。
  • 将来、シャーディングやシャーディングの為のレプリカセットを設定する為の作業時間が半端なくなるのが想像できた。
  • DynamoDBでは完全にDBの管理者は必要ない。

理由2: DBの専用サーバを利用する予算が無いのなら、DynamoDBを使いなさい。

  • 私はそれほど多くのトラフィックとデータレコードではなかったのです。
  • 理想的には、とてもうまくデータをスケールしてくれるはずでしたが、実際には違いました。
  • データベースのアップグレードは、より多くのコストが必要ですが、それでも問題を解決出来ない可能性がありました。
  • 私のサービスでは、8GBのディスク領域と、2GBのジャーナルファイルを占めていますが、この場合25GBのプランが必要で、毎月$500必要でした。
  • トラフィックとユーザーがより増えたら、費用がかかりすぎてしまう。
  • 全データをDynamoDBへ移行する前に、140万のレコードを移行してテストした所、実際のディスク使用量は300MB以下だった。
  • DynamoDBの費用は、最初の週で $0.05だった。

理由3: 他のAmazon Web Serviceとの統合を考えているなら、DynamoDBを使いなさい。

  • 例えば、全文検索をしたい場合、MongoDBにも全文検索の仕組みはありますが、その為にはインデックスと検索の為の追加のサーバが必要で、その仕組を理解する必要がある。全文検索インデックスがあるのは良いことだが、中国語の形態素解析等の多言語対応は簡単ではないだろう。Amazon CloudSearchはDynamoDBに対応した全文検索インデックスソリューションだ。
  • 他にも、DynamoDBとの統合が簡単なAWS Elastic MapReduceや、データベースのバックアップ・リストアの為に他のサービスとの統合されている。
  • 私の意見では、Amazon Webサービスの主要なNoSQLのデータベースとして、DynamoDBのは、より多くの機能を持って、あなたは、開発をスピードアップし、Amazon Webサービスを統合することにより、サーバ管理のコストを削減することができます。

Mason Zhang: 7 Reasons You Should Use MongoDB over DynamoDB -- DynamoDBよりMongoDBを使うべき7つの理由

理由1: インデックスフィールドを後で変更するかもしれないなら、MongoDBを使いなさい

  • DynamoDBでは後からインデックスを変更出来ない。する場合は、新しいテーブルを定義し、古いテーブルからデータをインポートする必要がある。
  • ハッシュキー、 Range key, セカンダリインデックスが使えるが、複雑なクエリは対応していない。
  • セカンダリインデックスは、追加のストレージ容量が必要となる。

理由2: NoSQLの利用方法として、ドキュメントデータベース機能が必要であれば、MongoDBを使いなさい

  • ドキュメントデータベースでは、データ構造を入れ子式にできるが、キーバリューデータベースの場合は出来ない。
  • 複雑なクエリが可能。

理由3: Perl, Erlang, C++を使うのであれば、MongoDBを使いなさい

理由4: DynamoDBの限界を超える場合は、MongoDBを使いなさい

  • DynamoDBは、値に格納できる最大サイズが64kbyteまで。 それを超える場合は、複数のキーに分割する必要がある。

理由5: sring, number, base64エンコードされたバイナリ以外のデータ型が使いたければ MongoDBを使いなさい

  • MongoDBではさらに、array, date, boolean, Object ID(MongoDB独自の型)をサポートしている。

理由6: 正規表現でクエリをしたければMongoDBを使いなさい

  • 正規表現を使用して、前方一致、部分一致、後方一致といった方法でフィルタができるが、フルスキャンが必要。
  • DynamoDB ではこのような複雑なクエリを1クエリで行うことは出来ない。

理由7: ドキュメントデータベースが大好きならMongoDBを使いなさい

  • 開発元の10genは、コミュニティに対して積極的に関わっているし、コミュニティのみんなも相談にのってくれる。
  • Amazonはデカい会社で、中の人となかなか連絡とれないし、もちろん彼らの方針に口出すこともできない。

まとめ

  • DynamoDB :コスト:○、パフォーマンス:○、機能:☓、開発しやすさ:☓
  • MongoHQ : コスト:☓、パフォーマンス:?、機能:○、開発しやすさ:○

DynamoDBつかおっかな。