私はWebアプリケーションのバックエンドを構築しています。それはフロントエンド用のAPIとして機能し、Pythonで書かれます(正確にはFlaskです)。JSON APIの従来のSQLの代わりにRethinkDBを選択するのに適していますか?
設計と実装に関するいくつかの決定をした後、私はデータベースの部分に行きました。そして、私は、NoSQLのデータストレージが、従来のSQLデータベースよりも私のプロジェクトに適しているかどうかを考え始めました。次に、データベースによって処理されるべき基本的な機能の説明と、どのタイプのストレージを選択すべきかに関して私が思い付く賛否両論のリストを示します。最後に、なぜ私が他のNoSQLデータストレージよりRethinkDBを考慮したかについてのいくつかの言葉。 Artist
、Song
、Suggestion
、User
とUserArtists
:
APIの基本的な機能
APIはいくつかのモデルで構成されています。
User
にいくつかの関連データを追加して、一部にArtist
をリンクしたいと考えています。要求に応じてSong
をArtist
に追加し、またUser
のSuggestion
を生成します。Artist
とSong
が含まれます。
おそらく最も重要な部分の一つはArtist
sが定期的にUser
S(ともArtist
Sにリンクされるということですが、システムから削除することができます - ので、User
Sからあまりにも - 彼らはいくつかの基準を満たしていない場合)。 Song
も、Artist
に動的に追加されます。これは、User
の固定セットがArtist
でないことと、Artist
の固定セットがSong
であることを意味します。これらは常に更新されます。
賛否のNoSQLため
:
- 柔軟なスキーマ、以来ではないすべての
Artist
FacebookIDまたはSong
SoundcloudIDを持つことになります。 - JSON APIの場合、レコードがJSONとして保存されるというメリットがあります。
- 私は
Song
の数だと思いますが、特にSuggestion
の方がかなり上がりますので、NoSQLはより良い仕事をします。 SQLため
:
- これは、固定されたスキーマは、モデル間の関係と便利になることがあります。
- FlaskはSQLAlchemyをサポートしており、モデルの定義に非常に役立ちます。 NoSQLのため
短所
:
- 関係は実装が困難であり、モデルのトランザクションなどを更新するコードのビットを必要とします。
- Flaskにはラッパーやモジュールがないため、データベース操作中にコードを読みやすくするためのラッパーを実装する必要があります。
- 操作がかさばり、私はかどうかを確認し、スキーマを定義する必要があります。
- 私は特に
UserArtist
の
SQLため、私は私のレコードを格納する方法上の任意の確信を持っていませんカラムのデフォルト値の設定、デフォルトの割り当て、データの検証、トランザクションの開始/コミット - APIのようなシンプルなものではあまりにも面倒です。
なぜRethinkDBですか?
私は次の理由の私のAPIのためのNoSQLの可能な実装のためのRehinkDBを検討してきました:
- それは他のソリューションより簡単でより軽量になります。
- これは大きなプラスのネイティブPythonサポートを備えています。
- これは、モデル間に関係があるAPIで便利なテーブル結合などを実装しています。
- これはむしろ新しいもので、コミュニティからの示唆と愛がたくさんあります。また、データベースのやりとりを活用する新しいものを継続的に追加する意思もあります。
これらのすべてが考慮されて、私は上のいくつかの修正、NoSQLのか、SQLを2つに私のニーズのためのより多くのappropiate、ならびに任意の他のプロ/詐欺であるかどうかについて、そしてもちろんの任意のアドバイスを聞いて喜んでいるだろう私が正しく言及していない事柄。
詳細な回答ありがとうございます。今、究極の質問:あなたは私の状況で何をしますか?あなたは何を選ぶでしょうか?私は主に、シンプルで軽量で、実装が簡単で、ラップして伸ばしやすく、これらの2つから最も面倒なソリューションに興味があります。 – linkyndy
私は確かにあなたが私のようであり、面倒な無料のソリューション(柔軟なスキーマと素敵なクエリ言語)を望むなら、私は確かにRethinkDBを選ぶでしょう。 – neumino