1

私はデータベースの分野の初心者であり、この混乱に陥っています。オフライン アプリケーションのデータベース レイヤーを sqlite から IndexedDB に変換する作業を行っています。現在、SQLite のデータベースは高度なリレーショナルです。このデータベースで行われているクエリの多くが結合クエリです。このデータベースを IndexedDB (NoSQL) に適したものに変換することに着手したとき、私は疑問に思いました。

リレーショナル データベースのレイアウトを作り直して、NoSQL の世界に属する (結合を必要としない) デザインに変換できるかどうか。つまり、同じデータをリレーショナル データベースと NoSQL データベースに同時にモデル化できます。または、リレーショナル/非リレーショナルはデータのプロパティであり、データは非リレーショナル データベースまたはリレーショナル データベースが必要かどうかを決定する必要がありますか?

4

3 に答える 3

2

バックエンド DB を変更することになった最初の要件は何ですか? パフォーマンスが向上する場合は、より「強力な」SQL DB エンジン (MySQL、PostgresQL) を使用してみてください。x30 が得られる可能性があります。既存の複雑なデータモデルの場合、NoSQL は簡単な変換ではなく、厳密に一致しないことが暗示されている場合は適切な選択ではありません (スコアリング メカニズムを使用しない限り、逆マップなど、クライアント コードを少し複雑にする「トリック」)。

一般に、NoSQL を選択するということは、実行する必要がある操作に適合するように noSQL モデルを定義する必要があることを意味します。したがって、データに対して実行する必要があるリクエストを把握し、そのデータに対して実行されると予想されるリクエストから NoSQL モデルを構築します。必要なリクエストの要件が変更された場合、新しいリクエストに合わせて NoSQL モデルを再作成する必要がある場合があります。

SQL の選択はより柔軟で、リレーションが要求されたデータを取得するのに十分である場合、データ構造 (存在する場合) への影響が少ない既存のデータに対して任意の操作を実行できます。しかし、生のパフォーマンスに関しては、NoSQL と競合しません。

柔軟性とパフォーマンスの永遠の選択です。

NoSQL => 柔軟性よりもパフォーマンス => 要件の変更を処理するためのより多くの作業、複雑な操作のための複雑なコード、専用のクライアント インターフェイスとコーディング。

SQL => パフォーマンスに対する柔軟性 => 要件の変更を処理する作業が少なくなり、「正規化された」(引用符付き) SQL 言語により、複雑さ、「一般的な」クライアント インターフェイスとコーディングの大部分が隠されます。パフォーマンスの問題は、エンジンを変更することで軽減できます。

于 2012-10-02T16:05:18.643 に答える
1

SQL と NoSQL の両方でモデル化されたデータベースが必要な理由はわかりませんが、SQL スキーマを NoSQL に「変換」できます。NoSQL を使用すると、データベースでスキーマを定義し、それを基にモデルを構築する SQL ではなく、アプリケーションがそのモデル クラスを介してスキーマを定義します。関係を説明するには、使用しているNoSQLソリューションに応じて、ハッシュマップなどのように、フィールドの1つを多値にするだけです。

于 2012-10-02T15:47:10.753 に答える
0

リレーショナルは、データをモデル化する方法です。リレーショナル モデルでは、生データは正規化と呼ばれる分析プロセスを経ます。正規化中、データはエンティティ、関係、および属性に分離されます。ここを参照してください。

正規化は可逆的なプロセスです。これは常に可能ですが、常に賢明であるとは限りません。たとえば、完全な非正規化は、冗長データのためにデータベースのサイズの爆発につながる可能性があります。また、多くの場合、データベースへのクエリの柔軟性が低下し、処理時間が増加します。すべてのエンティティが 1 つのテーブルに表示されるため、挿入は面倒です。そのため、エンティティを拡大する場合は、すべてのエンティティを拡大する必要があります。

于 2012-10-02T16:05:48.867 に答える