Cassandra 计数器counter类型和它的限制

时间:2022-06-27 23:04:01

文档基础

  1. Cassandra 2.*
  2. CQL3.1 翻译多数来自这个文档

    更新于2015年9月7日,最后有参考资料

作为Cassandra的一种类型之一,Counter类型算是限制最多的一个。Counter就是计数器,在CQL中可以定义一个Counter类型。Cassandra和mysql不同,普通的int,bigint类型是不能执行类似于:

/* 在CQL中,如果view不是counter类型,这样的语句是要失败的 */
update user set view = view + 1 where uid = 123456;

这种类型的操作只能在view为Counter类型的情况下执行。

文档解析

counter是一种特殊的存储自增数字的字段。

比如你可能希望使用counter计算页面访问的次数。

Cassandra 2.1 的counter 字段改进了实现方式,提供了许多选项来配置counters。在Cassandra2.1和更新的版本中,你可以配置代理服务器在counter写入的时候等待多久,counter在内存中缓存的体积,在Cassandra保存缓存key前等待多久,保存多少个key,concurrent_count_writes。你可以在cassandra.yaml中配置。

在Cassandra 2.0.* 中使用的replicate_on_write表在2.1版本后移除了。

定义一个counter专用表(后面会解析)并且使用counter类型。你不能在counter列上面使用索引,不能delete,不能反复添加一个counter字段。

基本操作:

    CREATE TABLE counterks.page_view_counts
(
counter_value counter,
url_name varchar,
page_name varchar,
PRIMARY KEY (url_name, page_name)
); UPDATE counterks.page_view_counts
SET counter_value = counter_value + 1
WHERE url_name='www.datastax.com' AND page_name='home';

限制:

  1. 包含有counter字段的表,非counter字段必须在主键中,所以一个counter表就只能用来做计数器,基本不能做别的事情。
  2. counter字段不能set counter_value = 10,你可以set counter_value = counter_value + 10
  3. counter数据一旦建立,不要进行任何形式的删除操作,否则操作结果不可以预期,目前没有找到恢复的方法,除了truncate table。或者备份还原。另外服务器在清理墓碑(cassandra用墓碑标记删除数据)以后,可以继续正常使用。
    • Cassandra rejects USING TIMESTAMP or USING TTL in the command to update a counter column,and now generates an error message when you attempt such an operation.
    • 因为设置ttl(过期时间,会在数据都过期后产生类似删除的行为,所以无法给计数器设置超时时间。
  4. 如果写入失败,客户端是不会知道的,比如超时,如果重新发送请求,有可能导致一次额外计数。
  5. 如果你想重置计数器,一个可选的办法是:读取计数器的值,然后加上这个值的负数值。
  6. insert语句也是会失败的,你可以update set counter_value = counter_value + 0 where *= 来初始化一个counter表。

未翻译内容

基本上就是上面的2,3,4,5的限制。

Technical limitations

If a write fails unexpectedly (timeout or loss of connection to the coordinator node) the client will not know if the operation has been performed. A retry can result in an over count CASSANDRA-2495.

Counter removal is intrinsically limited. For instance, if you issue very quickly the sequence "increment, remove, increment" it is possible for the removal to be lost (if for some reason the remove happens to be the last received messages). Hence, removal of counters is provided for definitive removal only, that is when the deleted counter is not increment afterwards. This holds for row deletion too: if you delete a row of counters, incrementing any counter in that row (that existed before the deletion) will result in an undetermined behavior. Note that if you need to reset a counter, one option (that is unfortunately not concurrent safe) could be to read its value and add -value.

CounterColumnType may only be set in the default_validation_class. A column family either contains only counters, or no counters at all.

参考资料

http://wiki.apache.org/cassandra/Counters

http://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.htm

Cassandra 计数器counter类型和它的限制的更多相关文章

  1. 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

    Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...

  2. 028_MapReduce中的计数器Counter的使用

    一.分析运行wordcount程序屏幕上打印信息 ##运行wordcount单词频率统计程序,基于输出输出路径. [hadoop@hadoop-master hadoop-1.2.1]$ hadoop ...

  3. ComputeShader中Counter类型的使用

    接上一篇:https://www.cnblogs.com/hont/p/10122129.html 除了Append类型对应的Consume/AppendStructuredBuffer还有一个Cou ...

  4. JMeter 配置元件之计数器Counter

    配置元件之计数器Counter   by:授客 QQ:1033553122 测试环境 apache-jmeter-2.13 1.   计数器简介 允许用户创建一个在线程组范围之内都可以被引用的计数器. ...

  5. CSS计数器:counter

    最近的需求,明星字体销售排行榜中,需要对字体的销售情况进行排序. 在早期,只有ol和ul可以对子元素li进行排序:如果不使用这两个标签,就由前台开发去手动填写序号. 当然,在这个需求中,数据不是实时更 ...

  6. Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

    Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...

  7. 计数器counter

    今天就讲了2个属性:1.计数器 2.列规则 列规则很简单:column-count:3; (列的具体个数) column-width:30px;(列宽)N个浏览器不兼容column-gap:10px; ...

  8. Jmeter -----计数器(counter)

    计数器的定义 Allows the user to create a counter that can be referenced anywhere in the Thread Group. The ...

  9. jmeter 配置元件之计数器Counter

    用jmeter生成数据 我用过几种以下几种方法 1.CSV Data Set Config  参数化 2.${_Random} ${_Random}是jmeter函数助手里面自带的一个函数,作用是返回 ...

随机推荐

  1. 《Note --- Unreal 4 --- matinee》

    https://docs.unrealengine.com/latest/CHN/Engine/Matinee/index.html https://docs.unrealengine.com/lat ...

  2. JQuery动画队列问题

    在上网的时候经常会发现一些网站上发现一些bug,如导航菜单的动画队列问题(在同一个元素上执行多个动画,那么对于这个动画来说,后面的动画 会被放到动画队列中,等前面的动画执行完成了才会执行) 要解决问题 ...

  3. Nancy之基于Self Hosting的补充小Demo

    前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...

  4. [bzoj2743][HEOI2012]采花(树状数组+离线)

    2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 1832  Solved: 954[Submit][Status] ...

  5. es6 ... 表达

    ... 包含0个或n个属性, { ...state.counters [id]: state.counters[id] - 1 } 只改变其中的id相对应的属性,其他保持不变

  6. Java 读取txt文件,读取结果保存到数据库

    需求:有一个很大的txt文件(1,000,000条数据),从txt中读取有用数据库后保存到Oracle数据库中 利用Java实现: 1.加载文件后一行一行读取 2.数据库连接后按行插入到数据库 pac ...

  7. 阿里云服务器Centos 7安装PHP

    网上各种别人写的博客 我自己配置了一下php 开始安装的是压缩包 结果php -version 无显示 然后查找各种资料 请教了很多人 需要的环境一一配置了,但是虽然出现了安装成功,但是还是无法查看版 ...

  8. bis.org

    巴塞尔官网包含了很多文档,看起来容易晕,简单说明一下. 首先,文档有几种类型(https://www.bis.org/bcbs/help/publ_types.htm): S: Standards 最 ...

  9. springmvc中select可以绑定enum中所有数据的方法

    public enum States { AK("AK"), AL("AL"), AR("AR"), AZ("AZ"), ...

  10. 2018面向对象程序设计(Java)第18周学习指导及要求

    2018面向对象程序设计(Java) 第18周学习指导及要求(2018.12.27-2018.12.30)   学习目标 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设 ...