【问题标题】:Performance impact in using camelCase in Cassandra columns在 Cassandra 列中使用 camelCase 的性能影响
【发布时间】:2018-07-09 05:56:36
【问题描述】:

我知道,Cassandra 一般会将所有列名都转换为小写。

在 Cassandra 的列名中使用 camelCase 是否会影响性能?

我在列中使用了双引号,并且可以将列名存储在 camelCase 中,如下所示

CREATE TABLE test (
  Foo int PRIMARY KEY,
  "Bar" int
);

用双引号存储列名会不会影响性能?

【问题讨论】:

  • 我认为没有任何影响。请说明您是否有任何特定的用例来遵循这种风格。根据我的经验,最好坚持推荐的指南,这样更容易阅读、维护,并避免不必要的转义或额外字符(例如双引号、/ 等)
  • 如果我将所有列名(比如一个列名作为“用户名”)以小写形式保留,那么我需要将所有列复制回另一种格式(比如用户名)以发送回 API回应
  • 明白你的意思。我认为您在以下答案中发现输入丢失。我没有什么要补充的。

标签: cassandra cassandra-3.0


【解决方案1】:

空间明智的没有。性能方面,没有。 (好吧,即使假设您必须连接双引号,如果您使用准备好的语句,您将发送一次,因此可以忽略不计)

在 Cassandra 3 上,名称仅在 sstables 的 Header 上写入一次(参考:http://thelastpickle.com/blog/2016/03/04/introductiont-to-the-apache-cassandra-3-storage-engine.html)。

必须始终提供双引号(例如 CQLSH)会变得很奇怪,所以我通常不这样做。 此外,从 Thrift 开始并迁移到 CQL 的旧集群也有很多。因此,为了避免对来源的混淆(但有更好的方法来验证这一点),最好不要引用引号。

【讨论】:

  • 说这是一个使用Cassandra 3.0的新应用程序,那么使用双引号可以吗? + 为什么 Cassandra 在内部默认转换为小写?
【解决方案2】:

我认为不会有影响。我会说 CQL 不区分大小写的特性仅用于简化查询,正如您从这个答案中看到的那样:https://stackoverflow.com/a/28447941/824644

此外,由于 Java(这是编写 Cassandra 的语言)中偏爱小驼峰式大小写,这种行为似乎是有动机的。请参阅此 GitHub 问题中的讨论:https://github.com/reuzel/CqlSharp/issues/28

【讨论】:

  • 它如何简化查询?
  • 如果您的所有内容都是小写的,那么您不需要转义引号来运行查询(如果您的列不是小写的)。请参阅我已链接的 SO 答案。
  • Cassandra 将列转换为小写是否有原因?
  • 简而言之:没有。:)
  • 但这令人惊讶,为什么 Cassandra 会毫无理由地将所有内容都转换为小写:(
【解决方案3】:

在性能方面没有影响。 CQL 小写未加引号的标识符。 我知道这可能会给开发人员带来麻烦,因为处理驼峰式或混合情况可能很容易,但是如果您尝试通过 API 访问该表,那么您可能已经定义了一个映射到该表的类。在通过 API 访问时,我看不到任何需要更改表名等的开销。

此外,当您拥有更大的开发团队时,将列命名为小写或使用下划线代替驼峰式大小写被视为一种良好的数据建模实践。这是 cassandra 默认完成的。如果您确实需要大小写,则只需使用双引号即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2014-01-02
    • 2016-07-26
    • 2010-09-30
    • 1970-01-01
    • 2015-01-20
    • 2018-03-09
    相关资源
    最近更新 更多