`
kabike
  • 浏览: 609153 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

谈opents db中时序数据的存储

阅读更多
OpenTSDB是一种基于hbase的实时监控信息收集存储和展示平台.它的schema被精心设计用来存储监控数据这样的典型的时序数据.下面来分析下它的schema及其带来的好处.

监控数据这样的时序序列数据都是带有时间的数据,比如
cpu 20140305143405 15
cpu 20140305143410 17
......
cpu 20140305143455 33
表示了一系列时间点的cpu负载数据
按照一般的hbase用法,可以如下表示

cpu负载用0AB表示,负载值存放在hbase的column中

OpenTSDB的数据表采用了典型的宽列模式,大体如下表示


相当于对0AB20140305143400中进行了提取公因式,将共同的部分提取到了rowkey中,将不同的部分放到了column qualifier中

根据hbase的物理模型,两种不同的表示方法的都是以keyvalue的形式存储的.
第一种是
0AB20140305143400:f:v:15
0AB20140305143405:f:v:17
……
0AB20140305143455:f:v:33

第二种是
0AB201403051434:f:00:15
0AB201403051434:f:05:17
……
0AB201403051434:f:55:33

这样做的好处有哪些呢?

1 可以减少磁盘占用空间.对比发现,第二种存储可以每一个keyvalue减少一个column qualifier的存储,积少成多,集腋成裘,千里之堤毁于蚁穴,也能节省很多空间.勿以善小而不为,勿以恶小而为之

2 减少bloom filter的数量.hbase中可以使用bloom filter来提高查询速度.而bloom filter也需要占用一定的存储空间.StoreFile中append keyvalue时,需要根据rowkey是否不同而决定是否生成bloom filter

public void append(final KeyValue kv) throws IOException {
      appendGeneralBloomfilter(kv);
      appendDeleteFamilyBloomFilter(kv);
      writer.append(kv);
      trackTimestamps(kv);
    }

在appendGeneralBloomfilter方法中,有如下代码
        boolean newKey = true;
        if (this.lastKv != null) {
          switch(bloomType) {
          case ROW:
            newKey = ! kvComparator.matchingRows(kv, lastKv);
            break;
          case ROWCOL:
            newKey = ! kvComparator.matchingRowColumn(kv, lastKv);
            break;
          case NONE:
            newKey = false;
            break;
          default:
            throw new IOException("Invalid Bloom filter type: " + bloomType +
                " (ROW or ROWCOL expected)");
          }
        }
        if (newKey) {
		//插入bloom filter
		}

在采用第二种方式存储时,不同的rowkey数量大大减少,也就减少了需要的bloom filter

3 在有filter的查询时,能更快速的查询.
下面这个图是filter的调用顺序


在采用第二种方式存储时,如果使用filter里的filterRowKey进行过滤,filterRowKey能够跳过很多kv,从而提高速度.
  • 大小: 25.1 KB
  • 大小: 3.2 KB
  • 大小: 56.7 KB
0
0
分享到:
评论

相关推荐

    postgreql12 通过patroni实现主从高可用热切换,使用timescaledb作为时序数据存储节点

    postgreql12 通过patroni实现主从高可用热切换,使用timescaledb作为时序数据存储节点,两个PG主节点,两个timescaledb时序数据节点,详细安装教程以及安装过程的一些坑

    TIA博途中DB数据块清零的具体方法示例.docx

    在TIA博途中,DB(数据块)是用于存储用户程序中的变量和数据的重要部分。在某些情况下,可能需要清零DB数据块的所有内容,这可能是为了初始化程序、清除历史数据或者进行调试。本文将详细介绍如何在TIA博途中对DB...

    为什么要将输入信号点DI_AI映射到DB数据块中或V数据存储区?.docx

    这些信号点通常需要映射到DB(数据块)或V(局部数据存储区)中,这是出于多种考虑,主要包括提高程序的可维护性、简化调试过程以及优化系统资源的利用。 首先,让我们理解为什么要映射到DB数据块。DB数据块是PLC...

    iotdb-基于RocksDB的元数据存储 .pdf

    iotdb是一个基于RocksDB的元数据存储系统,旨在解决iotdb中的元数据存储问题。随着业务的增长,元数据的大小也在不断增长,导致内存不够,频繁full gc,影响服务的稳定性。 方案概要: 本方案的目标是设计一个基于...

    TimescaleDB的介绍

    TimescaleDB 是一个功能强大且易于使用的时序数据库,支持完整的 SQL 查询,高度可扩展,时序数据分析,统一时序数据和关系数据,SQL 语言支持等特点,非常适合需要时序数据分析和扩展的应用场景。

    TIA PORTAL 西门子博途中怎样设置DB块中的变量数据为保持型或不保持?.docx

    在西门子的编程软件TIA PORTAL博途中,DB块(数据块)是用于存储程序运行时数据的重要组成部分。DB块中的变量可以分为两类:保持型和非保持型。保持型变量在PLC断电后仍能保留其最后的状态,而非保持型变量在电源...

    C# 读取PLC DB块数据DEMO

    DB块在西门子PLC中是用来存储用户自定义数据结构的地方,可以包含各种变量、数组和结构体。C#作为.NET框架的一部分,提供了丰富的库和工具,使得与PLC进行通信成为可能。 在C#中,我们通常会使用第三方库如`S7.Net`...

    DB数据编辑器.rar

    DB数据编辑器是一款专为SQLite数据库设计的工具,它允许用户直观地查看、编辑和管理SQLite数据库中的数据。SQLite是一个轻量级、自包含的数据库系统,广泛应用于移动设备、嵌入式系统以及桌面应用程序中。这个压缩包...

    pg12主从高可用+timescaledb分布式节点

    本文将深入探讨如何在PostgreSQL 12版本中构建主从高可用环境,并结合TimescaleDB插件实现分布式节点,以优化时序数据存储与分析。首先,我们将理解Patroni的作用及其在高可用性设置中的角色,然后详细介绍Timescale...

    DBServer--DB2数据连接工具

    无论是进行跨数据库的数据迁移,还是进行多数据库的同步,都能在DBServer--DB2数据连接工具中实现。 在提供的压缩包子文件中,"dbeaver-2.3.3-x86_64-setup.exe"是该工具的安装程序,适用于64位操作系统。这意味着...

    rafdb表情识别数据集

    用于表情识别的rafdb数据集

    手机备份db数据、db数据库文件查看器(windows版本)

    标题中的“手机备份db数据、db数据库文件查看器(windows版本)”指的是一个专为Windows操作系统设计的工具,用于查看和管理手机备份中的SQLite数据库文件(db格式)。这种类型的数据库通常包含手机应用程序的数据,如...

    TIA博途V17如何从DB数据块生成源文件或者源文件生成DB数据块?.pdf

    在TIA博途V17中,数据块(DB)是S7编程中存储用户自定义数据结构的关键元素,常用于存储程序中的变量和数据。源文件则是包含编程语言(如Ladder Diagram, Structured Text等)的文本文件,用于描述程序逻辑。在某些...

    时序模式数据处理与分析.docx

    时序模式数据处理与分析是数据挖掘和机器学习中的一种重要技术,旨在对时序数据进行处理和分析,以便提取有价值的信息和规律。时序模式数据处理与分析的过程通常包括数据读取、时序图绘制、自相关图绘制、平稳性检测...

    博途中S7-1200中DB块整体清零(非优化的DB)的方法演示.docx

    在西门子S7-1200系列PLC编程中,DB(Data Block)块是用来存储用户程序中定义的数据结构。在某些情况下,我们可能需要对DB块进行整体清零,例如初始化程序或者清除历史数据。本篇将详细介绍如何在博途(TIA Portal)...

    C#读写西门子DB数据Demo

    在本文中,我们将深入探讨如何使用C#编程语言与西门子S7系列PLC进行通信,特别是通过读写DB(数据块)数据。这个"西门子DB数据Demo"项目利用了开源类库Snap7,它使得开发者能够便捷地与西门子PLC进行交互,而无需...

    TIA博途DB块清零(非优化的DB块)-通用FC全局库文件-GF-Reset-DB-V17版本.zip

    在这个系统中,DB块(Data Block)是存储用户自定义数据的重要组件。DB块可以包含各种变量,用于不同功能和过程的通信与数据交换。在本资料包“TIA博途DB块清零(非优化的DB块)-通用FC全局库文件-GF-Reset-DB-V17版本...

    大数据存储及分层实践-6-1 工业设备预测性维护及时序数据库选型.pdf

    例如,InfluxDB、TimescaleDB和OpenTSDB等专门针对时序数据设计的数据库可能更适用于这样的场景,它们能够高效地处理大量时间序列数据,支持实时分析和复杂查询,同时具备良好的可扩展性,能满足大规模设备监控的...

    RocksDB_rocksdb_快速hash存储_

    RocksDB中的Memtable是内存中的数据结构,它存储写入操作直到被持久化到磁盘。Memtable采用了基于哈希的实现,具体来说是`HashLinkListRep`。这种实现方式将每个哈希桶作为一个链表,当哈希冲突发生时,新元素会被...

Global site tag (gtag.js) - Google Analytics