Scala プログラミング言語を使用してスケーラブルな Web アプリケーションを開発する予定です。scala は初めてです。フロントエンドに nginx を使用し、play フレームワークのバックエンドに jetty を使用することを考えています。適切なデータベースの選択について混乱しています。 mongodb、hbase、または mysql を選択しますか?
4 に答える
まず第一に、他の人が言ったように、永続化レイヤーの選択はユースケースによって異なります。
SQL ソリューションを探している場合は、「Scala データベースの永続性の良い例」に対する SO の回答の概要を参照してください。次の例が示されています。
SORM Frameworkも参照してください。
Slickには、Play フレームワークへの統合を支援する有望なプロジェクトplay-slickがあります。
おそらく、回答をより適切にするためのユースケースになるでしょう。一般に、データのタイプとその用途によって、SQL (リレーショナル、たとえば MySQL) を使用するか、NoSQL アーキテクチャ (たとえば、MongoDB) を使用するかが決まります。
この記事は方向性を示すのに役立つかもしれません。
....As programmers we can embrace what we’re given. Most likely we’ll have our own opinions. I sure do. But if you’re doing something that lends itself nicely to SQL tables, then we can get our job done. If you’re doing something that requires complex data structures and lends itself nicely to a NoSQL database, then we can similarly get our job done....
最近では、信じられないほど多様な環境があるため、幸いなことに、データベースを選択することは困難な作業になる可能性があります. この点を強調する楽しいビジュアルを次に示します。
http://blogs.the451group.com/information_management/files/2013/02/db_Map_2_13.jpg
選択は、開発者のスキルと API の観点から最も使いやすいもの、データの構造とサイズ、データを書き込む頻度とデータを読み取る頻度、必要な ACID 要件の種類、および最後にアプリケーションをどのようにスケーリングする必要があるか。スケーラビリティを最後に置くのは、ほとんどの場合、スケーラビリティを最初に置くと、問題のないソリューションが得られるからです。新しいアプリケーションの場合、実際には、スケーラビリティの要件について何も知らない可能性があるため、他のニーズに合ったものを選択します。アプリケーションは Scala で構築されているため、検討中のテクノロジで利用できる Scala 対応のラッパーの成熟度と品質も考慮する場合があります。これは、非リレーショナル データベースの採用を決定した場合に特に重要です。
MongoDB と HBase について具体的に言及されているので、非リレーショナル データベースを使用する理由があるのではないかと思います。実際、この初期段階で直面する難しい選択は、リレーショナル ソリューションを採用するか、非リレーショナル ソリューションを採用するかということです。リレーショナル ソリューションを選択すると、あるリレーショナル データベースから別のデータベースへの移行が比較的簡単になります。非リレーショナル データベースを選択した場合、API は非リレーショナル データベースの種類によって大きく異なるため、これは当てはまりません。
では、非リレーショナル データベースを採用する必要があるかどうかは、どのように判断すればよいでしょうか。
- 多くの列を持つテーブルがありますか?
- 列が少ないがリレーションが多いテーブルがありますか?
- 親と祖先を持つ子供がいるツリーのようなデータはありますか?
- XML や JSON などの構造化データ形式を保存する予定はありますか?
- データベース スキーマを頻繁に変更する必要があると予測していますか?
これらの質問のいずれかに「はい」と答えた場合、あなたは非関係的かもしれませんが、田舎者ではない可能性があります。この場合、2 番目に難しい問題は、どの非リレーショナル データベースを選択するかということです。繰り返しますが、データ構造と、他のテクノロジの選択肢との適合性、必要な ACID プロパティ、スキルがどこにあるのか、最も簡単なものに基づいて選択してください。
MongoDB と MySql はどちらも GPL であり、MongoDB にクエリを実行する方法とは別に、データを保存する方法にはパフォーマンス上の利点があります。
MongoDB では、データはデータ ページとして格納されます。これは、MySQL の何十ものテーブルの構造化された置換です。したがって、MongoDB にクエリを実行するときは、インデックス ルックアップにアクセスし、1 つのページからデータを取得します。
MySQL では、同じデータが数十のテーブルに配置されているため、数十のインデックス ルックアップ、数十の範囲ルックアップ、および数十のデータ ルックアップを実行することになります。
したがって、最初のラウンドの勝者は MongoDB です。
私は HBase についてあまり知りませんが、ここに示されている素晴らしい比較グラフがあり、ここでもMongoDB が優位に立っているようです。