Apache Doris 2.0 冷热分离快速体验

news2024/11/24 0:23:11

概述

对于任何一种数据库类软件来说,无论其基于传统数据库模型还是基于分布式结构,作为核心的永远是数据本身。而数据的生命周期,则体现在CRUD操作(创建、查询、更新、删除)上。任何一条数据从其生成的时刻开始,数据价值随着时间的推移而逐渐降低,直至成为无用数据,最终删除。

作为使用数据的主体用户,对于各种数据的需求程度是不同的,人们往往对重要的数据有更高效、稳定的访问需求;而对于不重要的数据则没有这么高的要求,而前者存储的代价往往是远高于后者的。用户在满足了自身对于数据使用要求的情况下,自然会开始考虑数据存储成本等方面的问题,对于那些很少访问甚至基本不访问的数据,使用成本更低的存储方式将是一种更好的选择。

针对这样的使用场景,我们将数据根据用户需求分为“热数据”与“冷数据”。顾名思义,“热数据”代表着用户对其有着更频繁的访问需求,“冷数据”则很少访问。一般数据在新创建的时候往往都是“热数据”,而随着时间的推移逐步变成“冷数据”。

对于热数据,其访问的频率很高,且往往是用户非常关心的数据,其实时性要求一般都很高,并且读写的频率也会更高,这正是DORIS本地存储重点解决的问题。

对于冷数据,其数据量往往远大于热数据,并且很少被访问,使用本地存储的代价就很高,这时使用存算分离模型,将其存储到代价更低的存储载体将大大降低成本。

未来一个很大的使用场景是类似于es日志存储,日志场景下数据会按照日期来切割数据,很多数据是冷数据,查询很少,需要降低这类数据的存储成本。从节约存储成本角度考虑

  1. 各云厂商普通云盘的价格都比对象存储贵
  2. 在doris集群实际线上使用中,普通云盘的利用率无法达到100%
  3. 云盘不是按需付费,而对象存储可以做到按需付费
  4. 基于普通云盘做高可用,需要实现多副本,某副本异常要做副本迁移。而将数据放到对象存储上则不存在此类问题,因为对象存储是共享的。

使用体验

下面我们 Minio 为例来演示怎么使用 Doris 基于对象存储的冷热分离功能。

我是在 MacOS 上来进行安装演示的

MacOS Doris 的编译安装

编译具体可以参照官方文档:在macOS平台上编译 - Apache Doris

本地安装单节点:快速开始 - Apache Doris

如果你是 Linux 系统,可以下载官方编译好的2.0.0 alpha 版本进行快速体验:下载 - Apache Doris

curl https://doris.apache.org/download-scripts/2.0.0-alpha1/download_x64_tsinghua.sh | sh

Minio 安装

本文是brew方式,Mac需安装brew支持,本文不再赘述, Linux 系统下的 Minio 网上很多教程,请自行百度

 brew install minio/stable/minio

然后可以看到安装成功的信息

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
​
Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
​
Talk to the community: https://slack.min.io
==> Get started:
NAME:
  minio server - start object storage server
​
USAGE:
  minio server [FLAGS] DIR1 [DIR2..]
  minio server [FLAGS] DIR{1...64}
  minio server [FLAGS] DIR{1...64} DIR{65...128}
​
DIR:
  DIR points to a directory on a filesystem. When you want to combine
  multiple drives into a single large system, pass one directory per
  filesystem separated by space. You may also use a '...' convention
  to abbreviate the directory arguments. Remote directories in a
  distributed setup are encoded as HTTP(s) URIs.
​
FLAGS:
  --address value              bind to a specific ADDRESS:PORT, ADDRESS can be an IP or hostname (default: ":9000") [$MINIO_ADDRESS]
  --console-address value      bind to a specific ADDRESS:PORT for embedded Console UI, ADDRESS can be an IP or hostname [$MINIO_CONSOLE_ADDRESS]
  --ftp value                  enable and configure an FTP(Secure) server
  --sftp value                 enable and configure an SFTP server
  --certs-dir value, -S value  path to certs directory (default: "/Users/zhangfeng/.minio/certs")
  --quiet                      disable startup and info messages
  --anonymous                  hide sensitive information from logging
  --json                       output logs in JSON format
  --help, -h                   show help
​
EXAMPLES:
  1. Start MinIO server on "/home/shared" directory.
     $ minio server /home/shared
​
  2. Start single node server with 64 local drives "/mnt/data1" to "/mnt/data64".
     $ minio server /mnt/data{1...64}
​
  3. Start distributed MinIO server on an 32 node setup with 32 drives each, run following command on all the nodes
     $ minio server http://node{1...32}.example.com/mnt/export{1...32}
​
  4. Start distributed MinIO server in an expanded setup, run the following command on all the nodes
     $ minio server http://node{1...16}.example.com/mnt/export{1...32} \
            http://node{17...64}.example.com/mnt/export{1...64}
​
  5. Start distributed MinIO server, with FTP and SFTP servers on all interfaces via port 8021, 8022 respectively
     $ minio server http://node{1...4}.example.com/mnt/export{1...4} \
           --ftp="address=:8021" --ftp="passive-port-range=30000-40000" \
           --sftp="address=:8022" --sftp="ssh-private-key=${HOME}/.ssh/id_rsa"
   /opt/homebrew/Cellar/minio/RELEASE.2023-05-04T21-44-30Z_1: 3 files, 100.9MB, built in 3 seconds
==> Running `brew cleanup minio`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

启动服务

设置 MINIO_REGION 、MINIO_ACCESS_KEY 、MINIO_SECRET_KEY

export MINIO_REGION=xian
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin

将 minio 服务放到后台运行

nohup minio server  /Users/zhangfeng/minio_data > /Users/zhangfeng/minio_data/log/minio.log 2>&1 &

然后可以看见登录界面:

登录进去创建 bucket 下面我们就可以进行Doris的冷热分离操作了

Doris 冷热分离体验

首先我们在 fe/fe.conf 里打开冷热分离这个功能,因为新的功能在第一个版本默认是关闭的,所以我们要手动打开,添加下面的内容

enable_storage_policy=true

然后重启 FE。

首先我们创建一个 Resource

创建S3 RESOURCE的时候,会进行S3远端的链接校验,以保证RESOURCE创建的正确

CREATE RESOURCE "remote_s3"
PROPERTIES
(
    "type" = "s3",
    "AWS_ENDPOINT" = "localhost:9000",
    "AWS_REGION" = "xian",
    "AWS_BUCKET" = "test",
    "AWS_ROOT_PATH" = "/test/test001",
    "AWS_ACCESS_KEY" = "minioadmin",
    "AWS_SECRET_KEY" = "minioadmin",
    "AWS_MAX_CONNECTIONS" = "50",
    "AWS_REQUEST_TIMEOUT_MS" = "3000",
    "AWS_CONNECTION_TIMEOUT_MS" = "1000"
);

然后我们创建数据迁移策略(STORAGE POLICY),用于冷热数据转换

CREATE STORAGE POLICY test_policy
PROPERTIES(
    "storage_resource" = "remote_s3",
    "cooldown_ttl" = "1h"
);
  1. cooldown_datetime:热数据转为冷数据时间,不能与cooldown_ttl同时存在。
  2. cooldown_ttl:热数据持续时间。从数据分片生成时开始计算,经过指定时间后转为冷数据。支持的格式: 1d:1天 1h:1小时 50000: 50000秒

我们后面也可以根据自己的策略来修改这个 ttl 时间,修改命令示例:

ALTER STORAGE POLICY test_policy PROPERTIES("cooldown_ttl" = "5h");

我们创建一张表,并将这个数据迁移策略应用到这个表上

CREATE TABLE IF NOT EXISTS create_table_use_created_policy 
(
    k1 BIGINT,
    k2 LARGEINT,
    v1 VARCHAR(2048)
)
UNIQUE KEY(k1)
DISTRIBUTED BY HASH (k1) BUCKETS 1
PROPERTIES(
    "storage_policy" = "test_policy",
    "replication_num" = "1"
);

我们插入几条数据:

 insert into create_table_use_created_policy values (10001,100001,'11');
 insert into create_table_use_created_policy values (10002,100001,'11');
 insert into create_table_use_created_policy values (10003,100001,'11');

这里我设置了1个小时后进行冷热迁移,一个小时后我们可以在对象存储上看到数据已经迁移过来

同时我们也可以通过 Doris 提供的命令来查看

show tablets from tbl

从这个图上我们也可以看到,已经将部分数据迁移到对象存储上了

还可以通过show proc '/backends'可以查看到每个be上传到对象的大小,RemoteUsedCapacity项

我们后面也会在 show data这个命令加上RemoteDataSize这个属性,这样更方便用户查看表的对象存储使用情况

是不是非常简单方便呢,快点动手体验提来吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序设计语言与语言处理程序基础

目录 第七章、程序设计语言与语言处理程序基础1、编译与解释2、文法3、正规式 4、有限自动机5、表达式 6、传值与传址 7、多种程序语言特点 第七章、程序设计语言与语言处理程序基础 1、编译与解释 编译器是将整个高级语言程序一次性转化成目标机器的机器代码,编译…

Xcode安装ipa

iOS APP上架App Store其中一个步骤就是要把ipa文件上传到App Store!​ 下面进行步骤介绍!​ 利用Appuploader这个软件,可以在Windows、Linux或Mac系统中申请ios和上传IPA到App Store Connect。​ 非常的方便,没有Mac也可以用Ap…

手游反外挂方案解析

据中国音数协游戏工委发布的《2023年1—3月游戏产业报告》显示,2023年1—3月,中国移动游戏市场实际销售收入为486.94亿元,占游戏市场整体实际销售收入的72.12% ,虽然数据同比去年略有下滑,但足以证明,移动游…

【逆向】动态链接库

文章目录 动态链接库1. 动态链接库的定义2. 动态库的由来:3. Dll与ExE程序区别4. DLL导出5. DLL导入6. 静态库 动态链接库 1. 动态链接库的定义 动态链接库英文DLL,是Dynamic Link Libarary的缩写。Dll中包含若干公用的代码、数据等,可供其他…

如何搭建在线产品手册

在现代社会,随着科技的发展,越来越多的企业将目光投向互联网,并将自己的产品推向了线上。而对于这些线上产品,拥有一份完备的、易用、高质量的在线产品手册显得尤为重要。 那么如何才能搭建一份高质量且易用的在线产品手册呢&…

《Android性能优化》学习笔记—启动优化

为什么要做App的启动优化? 网页端存在的一个定律叫8秒定律:即指用户访问一个网站时,如果等待打开的时间超过8秒,超过70%的用户将会放弃等待。 同样的,移动端也有一个8秒定律:如果一个App的启动时间超过8秒…

UNIAPP实战项目笔记66 当前用户更改购物车商品数量的前端和后端交互

UNIAPP实战项目笔记66 当前用户更改购物车商品数量的前端和后端交互 思路 前端改变数量的时候将数据发送到后端 后端接收到数据后更改数据库中的数据 案例截图 代码 前端代码 cart.js export default{state:{list:[/* {id:1,name:"332经济法能聚聚会技能大赛 经济法能聚…

vmware15+ubuntu+AS

一、VMware Workstation 与 Device/Credential Guard 不兼容 安装VMware15后,在运行启动ubuntu时一直提示与Device/Credential Guard不兼容 1、WINR打开运行,输入services.msc; 2、服务中找 HV主机服务,双击打开设置改为禁用&am…

【Python入门篇】——Python中判断语句(if elif else语句,判断语句的嵌套与实战案例)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句…

Day3--C高级3

一.编写一个名为myfirstshell.sh的脚本,它包括以下内容。 1、包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HO…

【云原生】Kubernetes二进制--多节点Master集群高可用

多节点Master集群高可用 一、Kubernetes多Master集群高可用方案1、实现高可用方法2、多节点Master高可用的部署 二、多节点Master部署1、配置master022、修改配置文件kube-apiserver中的IP3、在 master02 节点上启动各服务并设置开机自启 三、负载均衡部署1、配置nginx的官方在…

Google I/O 2023 大会上发布了一些令人兴奋的技术和产品,让我们一起来看看吧!

文章目录 Google I/O 2023 的主要内容- **Android 14**:- **Google Pixel 7**:- **Google Assistant**:- **Google Lens**:- **Google Cloud**: Google I/O 2023 大会四大主题 回顾:跨移动、网络、AI 和云A…

以太坊钱包私钥爆破产业链和攻击案例

一:产业链频道:小飞机搜索"BRUTE_FORCE_CRYPTO_WALLET" 2、github项目(有成熟的工具)GitHub - Houzich/CUDA-GPU-Brute-Force-Mnemonic-Old-Electrum-V1: CUDA-GPU-Brute-Force-Mnemonic-Old-Electrum-V1 3、揭秘以太坊 Vanity 生成器 Profanity 私钥破解…

C++学习路线-自用

C学习路线 做目录索引用,后续更新 初步想在学习完成后做对应的link 1、summary 参考网址 https://mp.weixin.qq.com/s/tXilzUzN7cDhnc3ztw4Vlw https://blog.csdn.net/qq_43564374/article/details/109409256 https://zhuanlan.zhihu.com/p/130364187 学习方式 看书…

景区剧本杀开发方案

景区剧本杀软件发展趋势包括以下几个方面: 个性化定制:随着用户需求的不断增加,景区剧本杀软件将更加注重个性化定制,满足不同用户的需求。 跨平台支持:景区剧本杀软件将逐渐实现跨平台支持,比如在…

经典命令--sort、uniq、tr、cut等

目录 一:sort--排列工具 1.sort命令介绍 2.sort命令常用选项 3.sort命令事例 二: uniq--去重工具 1.uniq命令介绍 2.uniq命令常用选项 3.uniq命令事例 4.筛选出重复3次的ip 5.将超过3次登录失败的用户加入黑名单 三:tr-- 替换工具 1.tr命令介绍…

10个前端开发者务必知道的JavaScript 技巧

前言 过去,我写了很多垃圾代码,现在看起来很糟糕。 当我再次看到那些代码片段时,我甚至怀疑自己是否适合做程序员。 所以,这里有 10 个我总结的JavaScript 技巧,可以帮助你避免编写我曾经做过的那种垃圾代码。 Prom…

提取每个汉字的首字母

1&#xff1a;在项目 POM 中 引入 汉字拼音转换JAR包 ​​​​​<dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.1</version> </dependency> 2:工具类 public…

Vue项目修改页面标签

Vue项目修改页面标签 1、在 Vue CLI 创建的项目中&#xff0c;可以通过修改 public/index.html 文件来改变网页标题。 2、在 Element UI 中&#xff0c;可以通过修改 document.title 属性来改变页面的标题。以下是一个示例代码&#xff1a; export default {mounted() {// 修改…

Android 检查网络状态和监听网络状态变化

此篇存在的主要意义在于解决用户使用app中网络状态发生了变化&#xff0c;需要我们去动态监听网络连接状态&#xff08;有网、无网&#xff09;、网络类型 &#xff08;包括wifi、移动网络 -> 3G、4G等等&#xff09; 文章目录 门前授课具体实现异常场景兴趣扩展 门前授课 …