繁体   English   中英

我可以将SQLAlchemy与Cassandra CQL一起使用吗?

[英]Can I use SQLAlchemy with Cassandra CQL?

我将Python与SQLAlchemy用于一些关系表。 为了存储一些更大的数据结构,我使用Cassandra。 我更喜欢使用一种技术(cassandra)而不是两种(cassandra和PostgreSQL)。 是否可以将关系数据存储在cassandra中?

不,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 s WHERE s.securityType =:type and t.numShares =:shares“)

这允许在noSQL环境中使用关系数据。如果您对数据进行分区,您可以使用快速查询和快速连接进行非常好的扩展。

如果您愿意,我们可以快速编写一个原型服务器 ,该服务器公开您发送S-SQL请求的接口,然后我们将某种形式的json返回给您。 我们希望它与SQL结果集不同,当左连接和内部连接在图片中时,这是一个非常糟糕的主意。

即。 我们会在这样的连接上返回结果(这样你就可以设置实际工作的最大结果)......

tableA行A - tableB row45 - tableB row65 - tableB行78 tableA行C - tableB row46 - tableB row93

注意我们不返回多行A,这样如果你有最大结果2你会得到行A和行C,就像在ODBC / JDBC中一样,你只能得到rowA两次,行45和行65,因为那是表的样子比如当它被返回时(当你使用任何类型的OO语言时,这是一种愚蠢的行为)。

让playOrm团队知道你是否需要playOrm github网站上的任何内容。

院长

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM