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

时间:2012-09-06 10:17:07

标签: python sqlalchemy cassandra

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

3 个答案:

答案 0 :(得分:14)

不,Cassandra是一个NoSQL存储系统,不支持基本的SQL语义,如连接,更不用说SQL查询了。 SQLAlchemy专门用于SQL语句。 CQL只是类SQL,而不是实际的SQL本身。

引用the Cassandra CQL documentation

  

虽然CQL与SQL有许多相似之处,但存在一些根本区别。例如,CQL适用于Cassandra数据模型和体系结构,因此在使用随机分区器的集群上的行上仍然不允许类似SQL的操作,如JOIN或范围查询。

您当然可以自由地将所有数据存储在Casandra中,但这意味着您必须重新考虑如何存储该数据并再次找到它。您不能使用SQLAlchemy将该数据映射到Python对象。

答案 1 :(得分:3)

如前所述,Cassandra不支持JOIN设计。改为使用Pycassa映射:http://pycassa.github.com/pycassa/api/pycassa/columnfamilymap.html

答案 2 :(得分: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 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网站上的任何内容。

迪安