1週間、NoSQLデータベースについて学んでいます。
NoSQLデータベースの利点と、それらが優れている多くのユースケースを本当に理解しています。
しかし、多くの場合、NoSQLがリレーショナルデータベースを置き換えることができるかのように記事を書きます。そして、頭を動かせない点があります。
NoSQLデータベースは(多くの場合)キーと値のストアです。
もちろん、(JSON、XMLなどでデータをエンコードすることで)すべてをキーと値のストアに保存することは可能ですが、多くの場合、特定の基準に一致するデータを取得する必要があるという問題がありますユースケース。NoSQLデータベースでは、効果的に検索できるキーは1つだけです。リレーショナルデータベースは、データ行の任意の値を効果的に検索するように最適化されています。
そのため、NoSQLデータベースは、コンテンツで検索する必要がある永続的なデータには実際には選択できません。または、私は何かを誤解しましたか?
例:
Webショップのユーザーデータを保存する必要があります。
リレーショナルデータベースでは、すべてのユーザーをusers
テーブルの行として、ID、名前、国などとともに保存します。
NoSQLデータベースでは、各ユーザーを自分のIDをキーとして、すべてのデータ(JSONなどでエンコードされた)を値として保存します。
したがって、特定の国からすべてのユーザーを取得する必要がある場合(何らかの理由でマーケティング担当者が彼らについて何かを知る必要があります)、リレーショナルデータベースでは簡単に行えますが、NoSQLデータベースではあまり効果的ではありません。すべてのユーザーを取得し、すべてのデータを解析してフィルターします。
私はそれが不可能だとは言いませんが、それははるかにトリッキーになり、NoSQLエントリのデータを検索したい場合はそれほど効果的ではないと思います。
この国に住んでいるすべてのユーザーのキーを格納する国ごとにキーを作成し、この国のキーに保管されているすべてのキーを取得することで特定の国のユーザーを取得できます。しかし、この手法により、複雑なデータセットはさらに複雑になります。SQLデータベースへのクエリほど実装が難しく、効果的ではありません。ですから、本番環境で使用する方法ではないと思います。またはそれは?
そのようなユースケースを処理するために、何かを誤解したり、いくつかの概念やベストプラクティスを見落としたりしたかどうかは、本当にわかりません。たぶん、あなたは私の声明を修正し、私の質問に答えることができます。