3

我正在使用 NoSQL(目标是 Cassandra)在 Java Web 应用程序中工作。我使用 Astyanax 作为 Cassandra 客户端,因为它被认为是目前 Cassandra 的最佳客户端。我刚刚接触 Cassandra 2 周,很多事情对我来说都很奇怪。
在我工作的过程中,我遇到了一些问题,我不知道如何克服:

  1. 表是从 CQL 创建的,类似于 Thrift API 创建的列族吗?我觉得它们很相似,但背后可能有一些不同。例如:

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

  3. 在 CQL 中,我可以声明一个包含集合/集合/映射的表。我可以在 Thrift API 中做同样的事情吗?
  4. 如果我的应用程序同时需要它们(列族和表),它们如何相互处理?
  5. 我认识到一件事:我不能使用 Thrift API 来操作 CQL 创建的表上的数据,反之亦然。我想知道,我怎样才能记住哪个表/列族以哪种方式创建,以便我可以使用正确的 API 来处理数据?目前,我们还没有通用的方法来处理其中的两个,是吗?AFAIK、Thrift API 和 CQL 没有相同的接口,所以他们不能互相理解?!

你能帮我解释一下这些事情吗?太感谢了。

4

2 回答 2

4
  1. 是的。在不破坏现有应用程序的情况下,不可能将 Thrift API 更新为支持 CQL。因此,如果您使用 CQL,您将承诺仅使用Java 驱动程序之类的CQL 客户端,而不是 Astyanax、Hector 等。但这并不是很大的牺牲,因为 CQL 更有用。

  2. 对于简单的 PK(即单列),是的。对于复合PK来说,它有点复杂

  3. 不可以。Thrift API 在设计上以较低级别运行。(例如,您会看到构成地图的各个存储单元。)

  4. 我不明白这个问题。使用 CQL,您可以做 Thrift 可以做的所有事情,但更容易。

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

于 2013-06-05T17:29:01.430 回答
1

In my opinion, I believe focus is shifting towards making cassandra look like a RDBMS with SQL Queries to gain wider adoption. But with inconsistencies between work done using Hector/Astyanax(thrift) and CQL, i think it will hurt adoption. Its almost a U turn from hector/astyanax to CQL in the middle of the journey.

Atleast CQL should have been planned in such a way that Thrift api (and high level java apis on top of it) have no problem in transitioning.

于 2013-08-05T13:01:25.913 回答