• 博客园开博记录


    从CSDN来博客园开个博

    Cao, W., Gao, Y., Lin, B., Feng, X., Xie, Y., Lou, X., & Wang, P. (2018, May). Tcprt: Instrument and diagnostic analysis system for service quality of cloud databases at massive scale in real-time. In Proceedings of the 2018 International Conference on Management of Data (pp. 615-627).

    Zhang, J., Wu, S., Tan, Z., Chen, G., Cheng, Z., Cao, W., ... & Feng, X. (2019). S3: a scalable in-memory skip-list index for key-value store. Proceedings of the VLDB Endowment12(12), 2183-2194.

    Cao, W., Gao, Y., Li, F., Wang, S., Lin, B., Xu, K., ... & Zhang, G. (2020, June). Timon: A Timestamped Event Database for Efficient Telemetry Data Processing and Analytics. In Proceedings of the 2020 ACM SIGMOD International Conference on Management of Data (pp. 739-753).

    Chen, W., Chen, L., Xie, Y., Cao, W., Gao, Y., & Feng, X. (2020, April). Multi-range attentive bicomponent graph convolutional network for traffic forecasting. In Proceedings of the AAAI Conference on Artificial Intelligence (Vol. 34, No. 04, pp. 3529-3536).

    Cao, W., Feng, X., Liang, B., Zhang, T., Gao, Y., Zhang, Y., & Li, F. (2021, June). LogStore: A Cloud-Native and Multi-Tenant Log Database. In Proceedings of the 2021 International Conference on Management of Data (pp. 2464-2476).

    Yishan Managing large-scale cloud database instances via machine learning 

    Timon

    Blind Write VS. Read-Modify-Write

    out-of-order events不用进行RMW,直接blind write

    幂等保证Exactly Once

    对于At-least Once的系统Kafka,记录每个Partition的latest offset,避免重复存储

    数据模型

    如图,

    一组一同采集的metric,metricSet,具有一个时间戳,等同于row

    一个metricSet的collection,称为StreamSet ,具有一个uuid,比如对于某一个主机发送的指标组,就用一个uuid标识

    以uuid为标准,匹配一组TagSet,即一个StreamSet可以附加一组特殊的属性

    TagSet单独存储,作为元数据,存储在本地的rocksDB中

    SEDA (Staged Event Driven Architecture)

    Windows聚合和Late数据的处理

    首先,数据写入时,有两个MemTable,其中一个是为了late数据的

    为何要单独分出一个late的,因为late的会破坏连续性,不便于后续用数组来存储数据

    这里之所以有late的说法,就需要参考dataflow里面对于窗口的解释

    然后提出一个page的概念,600条records,一个UUID至少对应于一个page,一个page中的数据属于一个UUID,因为后面以page为维度要聚合

    一个page写满,就会排序并聚合,这个取决于时间戳的精度,如果是秒级精度就按秒级聚合,聚合的算子定义的时候可以指定

    这里sealed page的实现用数组,这样避免search的代价,因为根据数组的下标就可以直接找到相应的时间,

    所以这里甚至不用事先排序,直接乱序插入即可,插入的过程本身就是排序的过程

    有个问题是如果这里的时间是sparse的,那么数组中就会有很多的空洞,下面也说如果太过sparse那么就暂时不seal,多等一会,但这毕竟不是根本的解决方法。

    这也是为何还需要一个late的内存表,

    这里又有一个假设,就是写入的数据是在时间上dense的,这个对于监控数据而言是成立的

    SSTable的存储结构

    内存中的数据会定期的flush成SSTable,内存中的page对应于block

    一个SSTable中包含很多block,按时间戳排序,并且没有overlap,这样可以精准查询,因为late单独存,所以没有overlap

    这里在一个SSTable中,对每一个UUID会建立一个时间的线段树索引,即按时间维度聚合,便于long time span的查询

    SSTable由如下组成,

    首先是MetaZone,元数据,比如时间戳范围,这个meta非常小,所以可以将所有的meta都放在内存中

    再者是所谓的bucket和collision,其实就是一个序列化的hash table,记录每个UUID的数据的时间戳范围和offset;

    这个hash table也是用array来实现的,避免二分search;用uuid的hash找到index,如果冲突则使用64byte指向其他collided的UUID

    最后是DataZone,这个是按UUID分开的,先存一个时间的线段树索引,接着是一堆的blocks

     

    时间线段树

    可以记录不同时间粒度的聚合数据,

    这里做的优化是,这个线段树是用数组存储的,知道depth和local position,就可以计算出在数组的中的index

  • 相关阅读:
    面试题15:链表中倒数第K个结点
    面试题31:连续子数组的最大和
    数据库索引实例
    面试题27:二叉搜索树与双向链表
    面试题28:字符串的排列
    java比较器Comparable接口和Comaprator接口
    面向对象知识汇总
    虚函数与纯虚函数
    Linux IO实时监控iostat命令详解
    hive GroupBy操作(翻译自Hive wiki)
  • 原文地址:https://www.cnblogs.com/fxjwind/p/2097360.html
Copyright © 2020-2023  润新知