アプリケーションが頻繁に変更され、機能が頻繁に追加される場合、Cassandra は優れているといつも読んでいます。
固定スキーマがないため、非常に大きなテーブルのデータベースを何時間もフリーズさせる可能性のある ALTER TABLE クエリを実行する代わりに、必要に応じて行に列を追加できます。
ただし、解決できない仮想の問題があります。私が持っているとしましょう:
CREATE COLUMN FAMILY Students
with comparator='CompositeType(UTF8Type,UTF8Type),
and key_validation_class=UUIDType;
各生徒にはいくつかの一般的な列 (meta:username、meta:password、meta:surname など) があり、さらに各生徒は N 個のコースに従うことができます。この NN 関係は、非正規化を使用して解決され、各生徒 (コース:ID1、コース:ID2) に N 列が追加されます。
反対側には、各行に次のすべての学生 UUID が含まれるコース CF があるとします。
したがって、「XXX が続いているコースはどれか」と「YYY のコースを受講している学生はどれか」を尋ねることができます。
問題は、2 番目の列ファミリーを作成しなかった場合はどうなるかということです。おそらく、アプリケーションが作成された時点では、学生が特定のコースに従う必要はありませんでした。
これは簡単な例ですが、かなり一般的だと思います。「Cassandra では、関係ではなくクエリの観点から CF を計画します」。最初は必要ありませんでしたが、今はそのクエリが必要です。
数千のエントリを持つ学生のテーブルが与えられた場合、コース CF をどのように埋めますか? これはHadoop、Pig、またはHiveの仕事ですか(私はそれらのどれにも触れたことはありません。推測です)。