13

私は Cassandra の初心者で、1 週間前に Cassandra の学習を始めたばかりです。最初は NoSQL だと読んでいましたが、CQL を使い始めたとき、Cassandra は NoSQL なのか SQL DB なのか疑問に思い始めました。

CQLが多かれ少なかれSQLに似ている理由を誰か説明できますか?

4

3 に答える 3

47

CQL は SQL のように宣言型であり、言語のクエリ コンポーネント (条件を選択する) の非常に基本的な構造は同じです。しかし、従来の SQL と同じ方法で使用してはならないほどの違いがあります。

明白な項目: 1. 結合またはサブクエリはありません。2.取引禁止

それほど明白ではありませんが、同様に重要な注意事項:

  1. 主キーを除いて、その列にインデックスを作成した場合にのみ、その列に WHERE 条件を適用できます。SQL では、列をフィルター処理するために列にインデックスを付ける必要はありませんが、CQL では select ステートメントは完全に失敗します。
  2. OR または NOT 論理演算子はなく、AND のみです。これら 2 つが不要になるように、データをモデル化することが非常に重要です。うっかり忘れてしまいがちです。
  3. 日付の扱いが大きく異なります。CQL では、タイムスタンプに対して等号演算子のみが許可されているため、次のような非常に一般的で便利な式はwhere dateField > TO_TIMESTAMP('2013-01-01','YYYY-MM-DD') 機能しません。 long int -- 他のほとんどの DB エンジンでは許可されていません。最後に、タイムゾーン (GMT オフセットとして) は、タイムゾーンのない長いミリ秒形式と文字列形式の両方で目に見えないようにキャプチャされます。これは、ローカル時間と GMT オフセットを意図的に混同しないシステムに混乱を招く可能性があります。
  4. 主キー (または主キーの IN リスト) に基づいてのみテーブルを更新できます。他の列データに基づいて更新することも、次のような一括更新を行うこともできませんupdate table set field = value; 。CQL は主キーを含む where 句を要求します。
  5. AND の文法では、括弧を使用できません。公平を期すために、OR演算子がないため必要ありませんが、これは、式の周りに「保護」括弧を追加する従来のSQLリライターがCQLで機能しないことを意味します。select * from www where (str1 = 'foo2') and (dat1 = 12312442);

一般に、Cassandra は、非常に高レベルで非常にパフォーマンスの高い少数のクエリを適用して、データのサブセットを引き出してアプリケーション レイヤーで操作できる、大規模で回復力のあるデータのパーマストアとして使用するのが最適です。そのサブセットは 100 万行になる可能性があります。CQL と Cassandra モデルは、ケース、集計などが埋め込まれた 2 ページの長さの SELECT ステートメント用に設計されていません。

于 2013-10-02T15:21:43.293 に答える
5

CQLV3.0のドキュメント

keyspace、、column familyのスキーマを取得するCQLDESCRIBEcluster

CQLは、SQLで知っていたもののようなものをサポートしていませんjoins group by triggers cursors procedure transactions stored procedures

CQL3.0サポートORDER BY

CQLはすべてのDMLおよびDDL機能をサポートします

CQLサポートBATCH

BATCH is not an analogue for SQL ACID transactions.

上記のDOCだけが最良のリファレンスです:)

于 2012-06-22T11:10:15.543 に答える
5

すべての意図と目的において、CQLSQL であるため、厳密な意味で CassandraSQL データベースです。ただし、ほとんどの人は、SQL を通常適用されるリレーショナル データベースと密接に関連付けています。この (誤った) 解釈では、Cassandra はリレーショナルではなく、ACIDプロパティをサポートしていないため、「SQL データベース」と見なすべきではありません。

于 2012-06-22T15:05:40.857 に答える