以前のすべてのアプリケーションでSQL
を使用していて、Parse.com
dbストレージを理解するために、NOSQL
を知りたかった。
SQL
とNOSQL
の違いを過去2日間検索してみましたが、NOSQL
で関係がどのように機能するのかまだわかりません。
NOSQL
はスキーマレスで、SQLのような構造はないことを学びました。質問を例にまとめます。
例:
学校管理用のSQLアプリケーションでは、生徒の情報を格納するテーブルstudents
を作成します。マークについては、marks
テーブルを参照するuser_id
列を持つstudents
テーブルを用意します。 sub_id
、sub_code
、subject_name
を保持するもう1つのテーブルsubjects
を用意します。
したがって、subjects
テーブルのsub_code
を変更すると、ON UPDATE DELETE CASCADEを使用してFOREIGN KEYが使用されている他のテーブルに反映されます。
今私の質問は、
NOSQL
はNORMALIZATIONを使用しないため、データはどのように保存されますか?単一のテーブル(NOSQLのドキュメント)は、students
テーブル、marks
テーブル、およびsubjects
テーブルにあるすべての情報を保持する必要がありますか?すべての情報を1つのテーブルにダンプすると、どれほど効率的になりますか?
件名コードを変更したい場合、すべてのドキュメントを更新する必要がありますよね? (SQLでは、1つのテーブルの件名コードを変更するだけです。この列の件名コードを参照している他のテーブルの他の列は、個々のエントリを更新するのではなく、単に正しく更新するためです。)
あなたの質問では、「SQL」と「リレーショナル」を同じ意味で使用しています。同様に、「NoSQL」は「リレーショナルではない」という意味と考えることができます。つまり、主キー/外部キーの概念はありません。強制または暗示される「正規化」はありません。 「表」または「列」という単語の実際の意味はありません。 Key-Valueストアでは、渡されるバイトの大きなコレクション(「値」)と、その大きなコレクションにインデックスを付けるために使用される小さなバイトのコレクション(「キー」)がわかっています。その大きなコレクションの内部と、データベース内の他の値のバイトにどのようにマップするかは、完全にアプリケーションとその中のコードの品質にかかっています。
ただし、他のNoSQL DBMSでは、「値」の内部を定義できます。リレーショナルデータベースと同様に、データのスキーマを保持します。 Cassandraはこの例です。
したがって、それはあなた次第であり、アプリケーションをどのように実装するかです。 couldサロゲートIDを使用してリレーショナルデータモデルを模倣するようにKey-Valueストアを設定します。これは多くの読み取りを必要とし、NoSQLソリューションのポイントを失います。あなたはcouldレコードが書き込まれた瞬間にすべての非正規化された値を格納するようにKey-Valueを設定します。これは取得には高速ですが、更新には低速です。システムに最適なものを選択し、それに応じて実装する必要があります。 NoSQLは魔法ではありません。あなたはまだやるべき多くの設計と開発をしています。
NoSQLという用語は非常に広義です。それは技術よりもマーケティングに関係しています。さらに、リレーショナルデータベースを支える集合論などの数学とは関係がありません。異なるNoSQL製品は異なる動作をします。 Parse.comだけを読んでも、「NoSQL」のすべてを知ることはできません。
あなたの問題を理解してください。パフォーマンスまたは一貫性の目標を達成するために用意する妥協点を理解し、要件に最適な製品を選択してください。