いくつかのリレーショナルテーブルには、SQLAlchemyでPythonを使用しています。いくつかのより大きなデータ構造のストレージには、Cassandraを使用します。2つ(cassandraとPostgreSQL)ではなく、1つのテクノロジー(cassandra)だけを使用したいと思います。リレーショナルデータをcassandraに保存することもできますか?
3 に答える
いいえ、CassandraはNoSQLストレージシステムであり、SQLクエリはもちろん、結合などの基本的なSQLセマンティクスをサポートしていません。SQLAlchemyはSQLステートメントでのみ機能します。CQLはSQLに似ているだけで、実際のSQL自体ではありません。
Cassandra CQLドキュメントから引用するには:
CQLにはSQLと多くの類似点がありますが、いくつかの基本的な違いがあります。たとえば、CQLはCassandraデータモデルとアーキテクチャに適合しているため、ランダムパーティショナーを使用するクラスター上の行に対するJOINや範囲クエリなどのSQLのような操作はまだ許可されていません。
もちろん、すべてのデータをCasandraに自由に保存できますが、それは、そのデータを保存する方法を再考し、再度見つける必要があることを意味します。SQLAlchemyを使用してそのデータをPythonオブジェクトにマップすることはできません。
前述のように、Cassandraは設計上JOINをサポートしていません。代わりにPycassaマッピングを使用してください:http://pycassa.github.com/pycassa/api/pycassa/columnfamilymap.html
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 チームに知らせてください。
ディーン