【问题标题】:Hector or CQL,Which one should i use [closed]Hector 或 CQL,我应该使用哪一个 [关闭]
【发布时间】:2012-08-27 14:43:10
【问题描述】:

我是 cassandra 的新手。我必须编写一个使用 cassandra 的应用程序。我想知道哪一个对我更好,这样我将来就不会遇到太多问题。我应该为我的应用程序使用哪个 api。

【问题讨论】:

  • 什么样的回答让我有点迷茫所以求帮助
  • 您可能想阅读Gorilla vs. Shark,了解为什么会有一些接近的投票。 “最佳”是一个非常主观的术语,这完全取决于您的需求。
  • 请阅读关闭此问题的原因。 stackoverflow.com/questions/12001328/…
  • 我认为这个问题绝对适合 SO。当然,它是上面提到的那个的副本,但是那个也不应该被关闭。我已将较早的问题标记为需要重新打开,但这无论如何都会作为重复而关闭。
  • @edze:这不是一个公平的类比。 Hector 和 CQL 都是由同一个开源社区支持的 Cassandra 客户端这(以及您指出的 dup)实际上是架构问题,而不是 XY 问题。

标签: java cassandra hector cql


【解决方案1】:

Sunil,您正在解决一个合理的问题,我认为您在解决问题之前提出这个问题是完全合适的。如果您将其表述为“我应该在这两种方法之间寻找哪些优点和缺点以帮助我在它们之间做出决定?”,您可能会接触到更广泛接受的受众?

Hector 客户端支持与 Cassanda 通信的编程接口,以及解析 CQL 语句的方式,因此您的选择不一定是在 Hector 和 CQL 之间,而更像是编程与 CQL,或者两者的组合二。即使在 Hector 和 Astyanax 客户端之间进行选择,您也可能面临同样的问题。

选择 CQL 的理由:

  • CQL 易于存储、检索和比较修订。
  • CQL 易于阅读和审查,尤其是作为 DDL。
  • CQL 易于记录以进行故障排除和审计。
  • 具有 RDBMS 历史的开发人员可能会更快地适应 CQL,从而减少培训时间或增加招聘候选人。
  • 社区开发趋向于对 CQL 进行类似 JDBC 的处理。

选择程序化的原因:

[修正]

看来我的一些知识已经过时了。根据 jbellis 的评论( Jonathan Ellis,我想),CQL 目前比 thrift 更高效,并且还支持准备好的语句。我对反对基于 CQL 的方法的好论据感到茫然。

【讨论】:

  • 首先感谢您支持这个问题。这个答案对我非常有用
  • +1,但请注意 CQL 对注入有一定的防御作用 - 请参阅 mail-archives.apache.org/mod_mbox/cassandra-user/201107.mbox/…
  • @DNA,它很容易注入,但我认为它的优点在于它更有可能进一步限制搜索而不是扩展搜索。当它在异常表中时,可能只是一个严重的威胁。不过,可能存在其他创造性用途。在给出的示例中,如果 getUser 返回"bob' AND password='1",这将是一个有效的注入,但可能只会在错误消息中给出定义了哪些属性。例如,单词password 可以替换为lnameincome 等,并且可以使用足够的合理猜测来映射部分架构。
  • 值得注意的是,CQL 准备好的语句比 Thrift 调用的性能更高,因此 CQL 在性能上也胜出。 (当然,使用准备好的语句也是防止注入的方法。)
【解决方案2】:

另一个完全不同的选项是 playOrm,这样您就可以无限制地进行连接。 playOrm 允许您执行如下所示的“可扩展 JQL”。您只需要决定如何对数据进行分区。

@NoSqlQuery(name="findJoinOnNullPartition", query="PARTITIONS t(:partId) select t FROM TABLE as t INNER JOIN t.security as s where s.securityType = :type and t.numShares = :shares")

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2010-09-21
    • 1970-01-01
    • 2011-03-13
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多