zoukankan      html  css  js  c++  java
  • kudu的写数据流程

    写入操作是指需进行插入、更新或删除操作的一组行。需要注意的事项是Kudu强制执行主关键字的唯一性,主关键字是可以更改行的唯一标识符。为了强制执行此约束条件,Kudu必须以不同的方式处理插入和更新操作,并且这会影响tablet服务器如何处理写入

    Kudu中的每个tablet包含预写式日志(WAL)和多个行集合(RowSet),它们是保存在存储器和磁盘上(被刷新时)的不相交的行集合。

    写入操作先被提交到tablet的预写式日志(WAL),并根据Raft 一致性算法取得追随节点的同意,然后才会被添加到其中一个tablet的内存中;

    插入会被添加到tablet的MemRowSet中。为了在MemRowSet中支持多版本并发控制(MVCC),对最近插入的行(即尚未刷新到磁盘的新的行)的更新和删除操作将被追加到MemRowSet中的原始行之后以生成重做(REDO)记录的列表。(读取者需要应用相关的重做(REDO)记录,根据扫描程序给定的时间戳构建行的正确快照。)

    当MemRowSet填满时,则被刷新到磁盘并成为一个DiskRowSet。为了支持磁盘中存储数据的多版本并发控制(MVCC)功能,DiskRowSets被分为两种不同的文件类型:

    MemRowSet中行的最新版本(即应用了其所有重做(REDO)记录的原始插入)被写入到基础数据文件。这是一种柱状文件格式(非常像Parquet),用于快速、高效的读取访问,其赋予了Kudu支持分析访问模式的能力。
    
    MemRowSet中存在的行的先前版本(即重做(REDO)记录的倒序)作为一组撤销(UNDO)记录写入增量文件。时间行程读取可以应用相关的撤销(UNDO)记录,从早期的时间点构建行的正确快照。

    更新已被编码和压缩的柱状格式化数据文件需要重写整个文件,因此基础数据文件一旦被刷新则被认为是不可变的。

    此外,行关键字唯一性约束意味着基本记录的更新和删除不能被添加到tablet的MemRowSet中,而是被添加到名为DeltaMemStore的单独的内存存储器中。

    像MemRowSet一样,所有的变化都将被添加到DeltaMemStore中作为一组重做(REDO)记录;
    当DeltaMemStore填满时,重做(REDO)记录将被刷新到磁盘上存储的增量文件中。
    每个DiskRowSet都存在一个单独的DeltaMemStore。如需构建行的正确快照,读取者必须在应用相关撤销(UNDO)或重做(REDO)记录之前首先找到行的基本记录

    综上所述:

    Kudu插入一条新数据

    • 1、客户端连接TMaster获取表的相关信息,包括分区信息,表中所有tablet的信息;

    • 2、客户端找到负责处理读写请求的tablet所负责维护的TServer。Kudu接受客户端的请求,检查请求是否符合要求(表结构);

    • 3、Kudu在Tablet中的所有rowset(memrowset,diskrowset)中进行查找,看是否存在与待插入数据相同主键的数据,如果存在就返回错误,否则继续;

    • 4、写入操作先被提交到tablet的预写日志(WAL),并根据Raft一致性算法取得追随节点的同意,然后才会被添加到其中一个tablet的内存中,插入会被添加到tablet的MemRowSet中。为了在MemRowSet中支持多版本并发控制(MVCC),对最近插入的行(即尚未刷新到磁盘的新的行)的更新和删除操作将被追加到MemRowSet中的原始行之后以生成REDO记录的列表。

    • 5、Kudu在MemRowset中写入一行新数据,在MemRowset(1G或者是120s)数据达到一定大小时,MemRowset将数据落盘,并生成一个diskrowset用于持久化数据,还生成一个memrowset继续接收新数据的请求

  • 相关阅读:
    【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言
    【Machine Learning in Action --4】朴素贝叶斯分类
    【python问题系列--3】TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'
    python多行注释
    CentOS中文件夹基本操作命令
    Centos下载文件wget命令详解
    python--zeros函数和ones函数
    【python问题系列--2】脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
    【Machine Learning in Action --3】决策树ID3算法预测隐形眼睛类型
    php 利用http上传协议(表单提交上传图片 )
  • 原文地址:https://www.cnblogs.com/niutao/p/10555654.html
Copyright © 2011-2022 走看看