6

いくつかのリレーショナルテーブルには、SQLAlchemyでPythonを使用しています。いくつかのより大きなデータ構造のストレージには、Cassandraを使用します。2つ(cassandraとPostgreSQL)ではなく、1つのテクノロジー(cassandra)だけを使用したいと思います。リレーショナルデータをcassandraに保存することもできますか?

4

3 に答える 3

14

いいえ、CassandraはNoSQLストレージシステムであり、SQLクエリはもちろん、結合などの基本的なSQLセマンティクスをサポートしていません。SQLAlchemyはSQLステートメントでのみ機能します。CQLはSQLに似ているだけで、実際のSQL自体ではありません。

Cassandra CQLドキュメントから引用するには:

CQLにはSQLと多くの類似点がありますが、いくつかの基本的な違いがあります。たとえば、CQLはCassandraデータモデルとアーキテクチャに適合しているため、ランダムパーティショナーを使用するクラスター上の行に対するJOINや範囲クエリなどのSQLのような操作はまだ許可されていません。

もちろん、すべてのデータをCasandraに自由に保存できますが、それは、そのデータを保存する方法を再考し、再度見つける必要があることを意味します。SQLAlchemyを使用してそのデータをPythonオブジェクトにマップすることはできません。

于 2012-09-06T10:20:29.663 に答える
3

前述のように、Cassandraは設計上JOINをサポートしていません。代わりにPycassaマッピングを使用してください:http://pycassa.github.com/pycassa/api/pycassa/columnfamilymap.html

于 2012-09-06T14:02:28.270 に答える
3

playOrm は noSQL で JOIN をサポートしているため、リレーショナル データを noSQL に入れることができますが、現在は Java です。私たちは、あなたのようなプログラムのためにサーバーから S-SQL 言語を公開することを考えていました。 それはあなたにとって興味がありますか?

S-SQL は次のようになります (パーティションを使用しない場合は、SELECT ステートメントの前に何も必要ありません)...

PARTITIONS t(:partId) SELECT t FROM TABLE as t INNER JOIN t.security as WHERE s.securityType = :type and t.numShares = :shares")

これにより、noSQL 環境でのリレーショナル データが可能になり、データを分割すると、高速なクエリと高速な結合で非常にうまくスケーリングできます。

必要に応じて、S-SQL 要求を送信するインターフェイスを公開するプロトタイプ サーバーをすばやくコーディングし、何らかの形式の json を返します。左結合と内部結合が図にあるときに非常に悪い考えだった SQL 結果セットとは異なるものにしたいと考えています。

すなわち。そのような結合で結果を返します(実際に機能する最大結果を設定できるように)...

tableA 行 A - tableB 行 45 - tableB 行 65 - tableB 行 78 tableA 行 C - tableB 行 46 - tableB 行 93

複数の行 A を返さないことに注意してください。したがって、最大結果が 2 の場合、行 A と行 C が得られますが、ODBC/JDBC のように、行 45 と行 65 で行 A のみが 2 回得られます。それが返されたときのように(どんな種類のオブジェクト指向言語を使用しているときでも、これはちょっとばかげています)。

playOrm github Web サイトで何か必要なことがあれば、playOrm チームに知らせてください。

ディーン

于 2012-09-06T14:58:35.647 に答える