使用场景:

Cassandra非常适合存储时序类型的数据,本文我们使用一个气象站的例子(该气象站每分钟需要存储一条温度数据)。

一、方案1每个设备占用一行

这个方案的思路就是给每个数据源创建一行,比如这里一个气象站的温度就占用一行,然后每个分钟要采集一个温度,那么就让每个时刻的时标将作为列名,而温度值就是列值。

(1) 创建表的语句如下:

CREATE TABLE temperature ( 

 weatherstation_id text, 

 event_time timestamp, 

 temperature text, 

 PRIMARY KEY (weatherstation_id,event_time) );

(2)然后插入如下数据。

INSERT INTO temperature(weatherstation_id,event_time,temperature) VALUES ('1234ABCD','2019-08-03 07:01:00','72F');

INSERT INTO temperature(weatherstation_id,event_time,temperature) VALUES ('1234ABCD','2019-08-03 07:02:00','73F');

INSERT INTO temperature(weatherstation_id,event_time,temperature) VALUES ('1234ABCD','2019-08-03 07:03:00','73F');

INSERT INTO temperature(weatherstation_id,event_time,temperature) VALUES ('1234ABCD','2019-08-03 07:04:00','74F');

(3) 如果要查询这个气象站的所有数据,则如下

SELECT event_time,temperature FROM temperature WHERE weatherstation_id='1234ABCD';

(4) 如果要查询某个时间范围的数据,则如下:

SELECT temperature FROM temperature WHERE weatherstation_id='1234ABCD' AND event_time > '2019-08-03 07:01:00';

 

二、方案2每个设备的每天的数据占用一行

有时候把一个设备的所有数据存储在一行可能有点困难,比如放不下(这种情况应该很少见),此时我们就可以对上一个方案做拆分,在row key中增加一个表示,比如可以限制把每个设备每一天的数据放在单独一行,这样一行的数量大小就可控了。

(1) 创建表

CREATE TABLE temperature_by_day (

weatherstation_id text,

date text,

event_time timestamp,

temperature text,

PRIMARY KEY ((weatherstation_id,date),event_time) );

(2)插入数据

INSERT INTO temperature_by_day(weatherstation_id,date,event_time,temperature) VALUES ('1234ABCD','2019-08-03','2019-08-03 07:01:00','72F');

INSERT INTO temperature_by_day(weatherstation_id,date,event_time,temperature) VALUES ('1234ABCD','2019-08-03','2019-08-03 07:02:00','73F');

INSERT INTO temperature_by_day(weatherstation_id,date,event_time,temperature) VALUES ('1234ABCD','2019-08-04','2019-08-04 07:01:00','73F');

INSERT INTO temperature_by_day(weatherstation_id,date,event_time,temperature) VALUES ('1234ABCD','2019-08-04','2019-08-04 07:02:00','74F');

(3)查询某个设备某一天的数据

SELECT * FROM temperature_by_day WHERE weatherstation_id='1234ABCD' AND date='2019-08-03';

三、方案3存储带时效性的数据,过期就自动删除

对于时序的数据的另外一种典型应用就是要做循环存储,想象一下,比如我们要在一个dashboard展示最新的10条温度数据,老的数据就没用了,可以不用理会。如果使用其他的数据库,我们往往需要设置一个后台的job去对历史数据做定时清理。但是使用Cassandra,我们可以使用Cassandra的一个叫做过期列(expiring colmn)的新特性,只要超过指定的时间,这个列就自动消失了。

(1) 创建表

CREATE TABLE latest_temperatures (

weatherstation_id text,

event_time timestamp,

temperature text,

PRIMARY KEY (weatherstation_id,event_time),

) WITH CLUSTERING ORDER BY (event_time DESC);

(2)插入数据

INSERT INTO latest_temperatures(weatherstation_id,event_time,temperature) VALUES ('1234ABCD','2019-08-03 07:03:00','72F') USING TTL 20;

INSERT INTO latest_temperatures(weatherstation_id,event_time,temperature) VALUES ('1234ABCD','2019-08-03 07:02:00','73F') USING TTL 20;

INSERT INTO latest_temperatures(weatherstation_id,event_time,temperature) VALUES ('1234ABCD','2019-08-03 07:01:00','73F') USING TTL 20;

INSERT INTO latest_temperatures(weatherstation_id,event_time,temperature) VALUES ('1234ABCD','2019-08-03 07:04:00','74F') USING TTL 20;

(3)观察

在插入数据之后,你可以不断的使用查询语句来看这些数据,我们可以看到他们一条一条的消失,直到最后所有都没了。

 

time-series,其是Cassandra最有竞争力的数据模型之一

原文摘要:

 Cassandra can store up to 2 billion columns per row

参考资料:

https://academy.datastax.com/resources/getting-started-time-series-data-modeling

http://www.rubyscale.com/post/143067470585/basic-time-series-with-cassandra

http://www.datastax.com/dev/blog/advanced-time-series-with-cassandra

转载于:https://www.cnblogs.com/Soy-technology/p/11310005.html

Cassandra使用 —— 一个气象站的例子相关推荐

  1. 一个简单的例子学会github repository的webhook

    2019独角兽企业重金招聘Python工程师标准>>> github的webhook是个有用的功能,允许开发人员指定一个服务器的url.当开发者对github仓库施加操作,比如提交代 ...

  2. .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子

    1. 为什么需要序列化,什么是序列化 对于一个程序来说, 使用到的对象都是存在于内存中的.如果想保存这些对象的运行时状态, 或者需要在不同进程或者网络间传递对象,就需要序列化. 序列化就是讲运行中的对 ...

  3. 一个具体的例子学习Java volatile关键字

    相信大多数Java程序员都学习过volatile这个关键字的用法.百度百科上对volatile的定义: volatile是一个类型修饰符(type specifier),被设计用来修饰被不同线程访问和 ...

  4. 一个简单的例子看java线程机制

    一个简单的例子看java线程机制 作者: zyf0808 发表日期: 2006-03-26 11:20 文章属性: 原创 复制链接 import java.util.*; public class T ...

  5. blockchain 区块链200行代码:在JavaScript实现的一个简单的例子

    blockchain 区块链200行代码:在JavaScript实现的一个简单的例子 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上 ...

  6. 多态性与虚拟函数一个典型的例子第一步

    **#include <iostream> #include <strings.h> #include <cstring>using namespace std; ...

  7. ​【Python基础】告别枯燥,60 秒学会一个 Python 小例子(文末下载)

    本文推荐一个python的傻瓜式的学习资源,内容简单易懂,让人可以在60 秒学会一个 Python 小例子 当前库已有 300多 个实用的小例子 本文来源:https://github.com/jac ...

  8. pycharm安装scrapy失败_Scrapy ——环境搭配与一个简单的例子

    在我刚接触爬虫的时候就已经听过Scrapy大名了,据说是一个很厉害的爬虫框架,不过那个时候沉迷于Java爬虫.现在终于要来揭开它神秘的面纱了,来一起学习一下吧 欢迎关注公众号:老白和他的爬虫 1.环境 ...

  9. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...

    一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...

最新文章

  1. 优点 spark_spark(一)
  2. java中如何关闭文件,在Java中捕获IOException后如何关闭文件?
  3. nginx伪装user-agent等
  4. 找出第i个小元素(算法导论第三版9.2-4题)
  5. Java Syncrhonisers
  6. 直播系统中使用SEI传输用户自定义数据方案讨论
  7. Spring Boot 日志配置 ——logback
  8. 大学生慕课第二周学习笔记
  9. 删除时存在依赖_npm依赖管理那些事
  10. DLAN(UPNP)主流开源库的官网及SDK下载地址
  11. QT学习:制作树形列表菜单
  12. 第24篇 研究WebRTC官网之生成工程文件
  13. 选择单页设计的理由是什么?
  14. python判断可逆素数_可逆素数 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
  15. python进制转换函数
  16. 慎用manifest
  17. 构建安全新模式,零信任如何破局 ?
  18. matlab中如何输入积分,在matlab中怎么输入特殊符号,Matlab的符号积分
  19. 用英雄联盟的方式讲解JavaScript设计模式!
  20. L1正则化和L2正则化(从解空间角度)

热门文章

  1. Java数据结构2:堆排序思考
  2. jiebaR中文分词,从入门到喜欢
  3. c#与halcon模板匹配控制EPSON四轴机器人输出旋转角度
  4. 设置默认settings文件_Django 学习笔记系列 之 settings.py 设定
  5. 车辆动力学及控制_道路自适应车辆动力学控制研究(127页)【附下载】
  6. 全球科技大会鸿蒙,华为开发者大会:全球瞩目的“鸿蒙”面子和里子大格局
  7. java能应聘哪些职位_应聘java专员职位的面试题
  8. mysql安装教程博音网_RTSP视频平台EasyNVR使用mysql数据源启动报错unknow drivermysql优化...
  9. spark sql 上个月_SPARK-SQL内置函数之时间日期类
  10. oracle 越南字符,ORACLE 12.2RAC之问题 ora.chad OFFLINE