使用Cassandra CQL API的一些小经验

摘要:
由于该项目将Cassandra视为替代平台,因此它使用CQL API来实现一些封装接口。在发展过程中,我们总结了一些小经验供新人参考,希望丹尼尔能给我们更多的建议。1PreparedStatement是提前一次创建的,这是Cassandra中PreparedStatements与关系数据库之间的区别之一。如果每次都创建相同的PreparedStatement,则会收到一条警告消息,指出这将影响性能,因此最好

因为项目考虑把Cassandra作为备选平台,就使用CQL API实现了一些封装接口。在开发过程中,总结出一些小经验,供初接触的菜鸟们参考,也望大牛们多多指教。

1 PreparedStatement提前一次性创建

这一点是Cassandra中的PreparedStatement与关系型数据库的不同处之一。如果每次都创建相同的PreparedStatement,会收到警告信息提示说这样影响性能,所以最好是对常用操作提前一次性创建好PreparedStatement,建议用static方法。例如:

private static PrepareStatement insertStmt = null;
...

public static PreparedStatement buildInsertStmt(Session session)
{
   if (insertStmt==null)
      insertStmt  = session.prepare("insert into yourtable(a, b, c) values (?, ?, ?)");
   return insertStmt;
}

2 关于BatchStatement的限制

BatchStatement是提高运行性能的首要选择,但有两个限制需要注意。其一是BatchStatemen只针对增删改而不包括查询,本人也是菜鸟就犯了这种错误。其二是BatchStatement对数据大小有限制,由配置参数batch_size_warn_threshold_in_kb(默认是5KB)和batch_size_fail_threshold_in_kb(默认是50KB)决定。使用时注意尽量不要超出限制,特别是第二个。

3 关于CQL 的where子句的限制

尽管CQL与SQL很相似,但两者还是有很大的差别,尤其是在Where子句的限制上。具体实在太多这里一言难尽,请参见官方文档(http://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause)。

在项目中,要使用的接口中有几个是用非主键的列作为删除条件,直接删除是肯定行不通的,变通方法:

  • 先用非主键的列作为查询条件查询出满足条件的主键结果集,再用主键结果集作条件进行删除操作;
  • 要使用非主键列进行查询,需要在非主键列上提前建索引(推荐),或使用ALLOW FILTERING选项扫描全部分区(不推荐)。

4 关于row.getByte()方法

当从Row中取列值时,CQL API提供了getLong(), getInt(), getString(), getByte()等多种方法,但对于getByte()本人没搞明白怎么用。因为Cassandra的列类型中貌似没有byte,只能用int代替,如此一来若用getByte()来获取该列的值会抛类型转换失败的Exception。为此,项目中也只能放弃getByte():

byte b = (byte) row.getInt("byte_col");

免责声明:文章转载自《使用Cassandra CQL API的一些小经验》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python+selenium 三种断言方式URL的各个组成部分详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

cassandra用户名和密码的设置

  设置Cassandra使用用户名和密码验证的步骤如下:  1.修改${CASSANDRA_HOME}/conf/cassandra.yaml,把authenticator: AllowAllAuthenticator修改为authenticator: PasswordAuthenticator   2.使用默认的用户名cassandra和密码cassa...

技术基础 | 舍弃”读修复概率”特性

读修复这个特性给系统施加了额外的负载,却没有任何实质好处——这就是为什么我们一直以来都会建议大家先关闭这个特性;这也是在下一个Cassandra主要的版本,即Cassandra 4.0版本中,将这个特性完全拿掉的根本原因。 Apache Cassandra有一个叫做读修复概率(Read Repair Chance)的特性,通常我们都会建议我们的用户关...

cassandra数据备份与迁移

注意备份的时候schema也要备份一下,否则不能恢复快照! 单点备份 1.备份单个keyspace schemacqlsh -e "DESC KEYSPACE user" > user_schema.cql 2.备份整个database schemacqlsh -e "DESC SCHEMA" > db_schema.cql 3.导入keysp...

容器化部署Cassandra高可用集群

前提: 三台装有docker的虚拟机,这里用VM1,VM2,VM3表达(当然生产环境要用三个独立物理机,否则无高可用可言),装docker可参见Ubuntu离线安装docker。 开始部署: 部署图 如上图所示,三台VM的IP分别为: 192.168.0.101 192.168.0.102 192.168.0.103 客户端将使用这三个IP来连接集群,每...

cassandra CQL 常用操作

1. CQL客户端链接    bin/cqlsh ip username password  2.  (1)建立keyspace语句,keyspace类似于 mysql 中的数据库,一个数据库中可以有很多表; CREATE KEYSPACE mykeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy'...

技术基础 | 重要指标和告警

本文节选自DataStax Cassandra文档,点击这里查看更多相关信息。 监控Apache Cassandra®和DataStax Enterprise(DSE)集群是一项非常重要的工作,它帮助您识别集群中的问题并及时地应对并缓解问题。 Apache Cassandra和DSE都公开了用于观察和分析的指标。Cassandra通过使用Java管理扩展...