数日前、私は NoSQL のワイドカラム ストアド タイプと Apache-Cassandra のみについて読みました。
私が理解しているのは、Cassandra が次のもので構成されているということです。
キースペース (リレーショナル データベースのデータベースのようなもの) と、多数の列ファミリまたはテーブル (リレーショナル データベースのテーブルと同じ) および無制限の行のサポート。
Stackoverflow タグから:
ワイド カラム ストアは、キー値データベースの一種です。テーブル、行、および列を使用しますが、リレーショナル データベースとは異なり、列の名前と形式は同じテーブル内の行ごとに異なる場合があります。
Cassandra では、(テーブル内の) すべての行に行キーが必要であり、各行キーには複数の列を含めることができます。リレーショナル データベースと NoSQL (Cassandra) の実装とデータの格納の違いについて読みました。
しかし、私は構造の違いを理解していません:
テーブル (または Cassandra の列ファミリー) があるシナリオを想像してください。
次のようなクエリ(CQL)を実行すると:
select * from users;
ご覧のとおり、結果が得られます。
lastname | age | city | email
----------+------+---------------+----------------------
Doe | 36 | Beverly Hills | janedoe@email.com
Jones | 35 | Austin | bob@example.com
Byrne | 24 | San Diego | robbyrne@email.com
Smith | 46 | Sacramento | null
Jones2 | null | Austin | bob@example.com
したがって、次のクエリを使用して、リレーショナル データベース (MS SQL) で上記のシナリオを実行します。
select * from [users]
結果は次のとおりです。
lastname | age | city | email
----------+------+---------------+----------------------
Doe | 36 | Beverly Hills | janedoe@email.com
Jones | 35 | Austin | bob@example.com
Byrne | 24 | San Diego | robbyrne@email.com
Smith | 46 | Sacramento | NULL
Jones2 | NULL | Austin | bob@example.com
Cassandra が動的列をサポートしていることは知っています。次のように sth を使用してこれを実行できます。
ALTER TABLE users ADD website varchar;
ただし、リレーショナル モデルで使用できます。たとえば、mssql では上記のコードも実装できます。何かのようなもの:
ALTER TABLE users ADD website varchar(MAX);
私が見ているのは、最初の選択と2番目の選択の結果が同じであることです。Cassandra では、スタンドアロン オブジェクトとして行キー (姓) を与えるだけですが、mssql (およびすべてのリレーショナル データベース) の一意のフィールド (ID やテキストなど) と同じであり、Cassandra の列の型が静的であることがわかります(私の例ではvarchar
)Stackoverflowタグで説明されているものとは異なります。
だから私の質問は:
カサンドラについての私の想像に誤解はありますか?!
では、2つの構造の違いは何ですか?! 結果が同じであることを示します。
リレーショナル データベースでは実装できないが、Cassandra がサポートする特別なシナリオ (JSON のようなもの) はありますか? (たとえば、Cassandra ではネストされた列がサポートされていないことを知っています。)
読んでくれてありがとう。