1

CassandraのDBモデルに頭を悩ませようとしていますが、あまり運がありません。そこにあるほとんどすべてのドキュメントは、TwitterクローンであるTwissandraを説明していますが、実際にはかなり単純なケースであり、Cassandraを効果的に使用する方法を学ぶのに実際には役立ちません。または、それは非常に基本的な低レベルのものであり、実際の状況で列/スーパー列を使用して通常行うことを実際には示していません。

ですから、フォーラムは学ぶのに十分複雑なアプリケーションになると思いました。phpBBのようなWebフォーラムを想定します。複数のフォーラムを作成できます。各フォーラムには複数のトピックが表示され、すべてのトピックには複数の投稿があります。

私は最初、投稿、トピック、フォーラムの列を別々にすることを考えましたが、それはRDBMSでこれを実装する方法と同じように見えました。

だから今、私はスーパーカラムファミリーでネストがどれほど深くなることができるのか疑問に思っています。次の疑似モデルのようなものは、これをモデル化する適切な方法ですか?

Forums = {
    forum001: {
        name: "General News",
        topics: {
            topic000001: {
                subject: "This is what I think",
                date: "2012-08-24 10:12:13",
                posts: {
                    post20120824.101213: { username: "tom", content: "Blah blah", datetime: "2012-08-24 10:12:13" }
                    post20120824.101513: { username: "dick", content: "Blah blah blah", datetime: "2012-08-24 10:15:13" }
                    post20120824.103213: { username: "harry", content: "Blah blah", datetime: "2012-08-24 10:32:13" }
                }
            },
            topic000002: {
                subject: "OMG Look at this",
                date: "2012-08-24 10:42:13",
                posts: {
                    post20120824.104213: { username: "tom", content: "Blah blah", datetime: "2012-08-24 10:42:13" }
                    post20120824.104523: { username: "dick", content: "Blah blah blah", datetime: "2012-08-24 10:45:23" }
                    post20120824.104821: { username: "harry", content: "Blah blah", datetime: "2012-08-24 10:48:21" }
                }
            }
        }
    },
    forum002: {
        name: "Specific News",
        topics: {
            topic000003: {
                subject: "Whinge whine",
                date: "2012-08-24 10:12:13",
                posts: {
                    post20120824.101213: { username: "tom", content: "Blah blah", datetime: "2012-08-24 10:12:13" }
                    post20120824.101513: { username: "dick", content: "Blah blah blah", datetime: "2012-08-24 10:15:13" }
                }
            }
        }
    }
}
4

1 に答える 1

2
  1. 直接クエリするつもりのないJSONドキュメントを作成していない限り、そのレベルのネストを行うことはできません。
  2. スーパーカラムは非推奨であるため、使用しないでください。
  3. あなたの質問に対するクリスのコメントは絶対に正しいです。最初の仕事は、データをどのようにクエリするつもりかを自問し、次に読むつもりのように書くことです。これは、複数の方法で書くことを意味する場合があります(つまり、正規化は目標ではありません)。
  4. 複合キーや列を使用して、追加の「ネスト」を取得できます。
  5. キーと列の範囲、またはセカンダリインデックスを使用してのみクエリを実行できるため、セカンダリの候補として適切ではない(つまり、カーディナリティが高い)列に対して独自のインデックスを作成する必要があります。

これらのルールがモデルを提供しないことは知っていますが、モデルは完全にクエリに依存しています。これは、RDBMSとは異なる世界の見方です。アドホッククエリのサポートが本当に必要な場合(多くのユースケースは実際には必要ありません)、Cassandraは正しい選択ではありません。

于 2012-09-04T17:11:24.677 に答える