在Thrift API和CQL之间混淆

时间:2013-06-02 16:46:41

标签: cassandra thrift cql astyanax

我正在使用NoSQL(目标是Cassandra)在Java Web应用程序中工作。我使用Astyanax作为Cassandra客户端,因为它现在被建议是Cassandra的最佳客户。我刚刚接近Cassandra两个星期了,所以很多东西对我来说都很奇怪 在我工作期间,我遇到了一些问题,我不知道如何克服:

  1. 是否是由Thrift API创建的CQL类列系列创建的表?我觉得他们很相似,但也许背后有一些差异。例如:

    • 由Thrift API
    • 无法访问由CQL命令创建的表
    • 基于Thrift的API不能与CQL创建的表一起使用,但CQL方法可以访问由Thrift API创建的列族!
  2. 表中的主键是否与列族中的行键对应?

  3. 在CQL中,我可以声明一个包含集合/集合/映射的表。我可以在Thrift API中做同样的事情吗?
  4. 如果我的应用程序需要它们(列族和表格),它们如何相互处理?
  5. 我认识到一件事:我不能使用Thrift API来操作由CQL创建的表上的数据,反之亦然。我想知道,我怎么能记住哪个表/列系列从哪个方式创建,以便我可以使用正确的API来处理数据?目前,我们没有一般方法来处理其中两个,是吗? AFAIK,Thrift API和CQL没有相同的界面,所以他们无法互相理解?!
  6. 你能帮我解释一下吗?非常感谢你。

2 个答案:

答案 0 :(得分:4)

  1. 是。在不破坏现有应用程序的情况下,无法将Thrift API更新为CQL感知。因此,如果您使用CQL,则承诺仅使用the Java driver之类的CQL客户端,而不是Astyanax,Hector等人。但这不是一个很大的牺牲,因为CQL更有用。

  2. 对于简单的PK(即单列),是的。对于复合PK,it's a bit more complicated

  3. 没有。根据设计,Thrift API在较低级别运行。 (例如,你会看到组成Map的各个存储单元。)

  4. 我不明白这个问题。使用CQL,您可以使用Thrift完成所有操作,但更容易。

  5. 简单;不要混淆两者。坚持一个或另一个。

答案 1 :(得分:1)

在我看来,我认为焦点正在转向使cassandra看起来像带有SQL查询的RDBMS以获得更广泛的采用。 但由于使用Hector / Astyanax(节俭)和CQL完成的工作之间存在不一致,我认为这会影响采用。在旅程中途,它几乎是从hector / astyanax转向CQL。

Atleast CQL的计划方式应该是Thrift api(以及高级java apis)在转换过程中没有问题。