202401

How to install and use ZSTD compression tool on Linux
https://linuxconfig.org/how-to-install-and-use-zstd-compression-tool-on-linux

zstd example1.txt
zstd -d example1.txt.zst
tar --zstd -cf example.tar.zst example/

mysql: slow import
https://dba.stackexchange.com/questions/271097/mysql-slow-import

SET GLOBAL innodb_flush_log_at_trx_commit = 2;

[mysqld]
skip-log-bin
innodb_doublewrite = 0
innodb_log_buffer_size = 32M

SHOW VARIABLES LIKE 'log_bin';

InnoDB关键特性之double write
https://www.cnblogs.com/wangqianqiannb/p/9754450.html

关于IO的最小单位:

  • 数据库 IO 的最小单位是 16K(MySQL默认,oracle是8K)

  • 文件系统 IO 的最小单位是 4K(也有 1K 的)

  • 磁盘 IO 的最小单位是 512B

    show variables like ‘%double%’;
    show global status like ‘%dblwr%’;

python 数据类型 复数
https://zhuanlan.zhihu.com/p/617689935?utm_id=0

  • 在电路分析中,复数可以用来表示电路中的电压、电流等物理量,例如电压可以表示为实部加上虚部的复数,而阻抗可以表示为复数形式的电阻和电抗。
  • 在信号处理中,复数可以用来表示信号的幅度和相位,例如正弦信号可以表示为实部为幅度,虚部为相位的复数形式。
  • 在图像处理中,复数可以用来表示图像的频域信息,例如图像可以通过傅里叶变换转换为频域信息,而频域信息可以表示为实部和虚部的复数形式。
  • 除此之外,复数还可以用于解决一些数学问题,例如求解方程、计算积分等。

从 CoT 到 Agent,最全综述来了!上交出品
https://baijiahao.baidu.com/s?id=1783669439007774940&wfr=spider&for=pc

tmate 的意思是 teammates,它是 tmux 的一个分支,并且使用相同的配置信息(例如快捷键配置,配色方案等)。它是一个终端多路复用器,同时具有即时分享终端的能力。它允许在单个屏幕中创建并操控多个终端,同时这些终端还能与其他同事分享。

你可以分离会话,让作业在后台运行,然后在想要查看状态时重新连接会话。tmate 提供了一个即时配对的方案,让你可以与一个或多个队友共享一个终端。
https://www.linuxprobe.com/quickly-share-tmate.html

  • 运行 tmate 时,会通过 libssh 在后台创建一个连接到 tmate.io (由 tmate 开发者维护的后台服务器)的 ssh 连接。
    tmate.io 服务器的 ssh 密钥通过 DH 交换进行校验。
  • 客户端通过本地 ssh 密钥进行认证。
  • 连接创建后,本地 tmux 服务器会生成一个 150 位(不可猜测的随机字符)会话令牌。
  • 队友能通过用户提供的 SSH 会话 ID 连接到 tmate.io

How to close terminal without killing running processes on Linux
https://tecadmin.net/close-terminal-without-killing-running-processes-on-linux/

CTRL + Z 
bg
disown -h %1

jobs -l
sudo tail -f /proc/609120/fd/1

eBPF 实践教程:使用 uprobe 捕获多种库的 SSL/TLS 明文数据
https://eunomia.dev/zh/tutorials/30-sslsniff/

查看进程重定向
https://unix.stackexchange.com/questions/15693/see-the-stdout-redirect-of-a-running-process

$ cat test.sh
while true;do date;sleep 1;done
$ bash test.sh >> test.log
^Z
[1]+  Stopped                 bash test.sh >> test.log
$ bg
[1]+ bash test.sh >> test.log &
$ jobs -l
[1]+ 2168892 Running                 bash test.sh >> test.log &
[02:01:07 ubuntu@scripts-server ~/haohu]$ disown -h %1
$ readlink -f /proc/2168892/fd/1
test.log
$ lsof test.log
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    2168892 ubuntu    1w   REG  259,1     7250 768788 test.log

终端迁移

$ ps -ef | grep test.sh
ubuntu   2185765 2185718  0 02:35 pts/16   00:00:00 bash test.sh
$ screen -S test
$ sudo reptry -t 2185718
  • 分享一个实用的小工具 https://github.com/nelhage/reptyr Reparent a running program to a new terminal。

  • 比如你在远程终端下运行一个需要执行很久的脚本,没有在 screen 或 tmux 下,也没有用nohup 执行,一旦终端关掉,所有子进程就会自动被关闭,脚本还要重新运行。

  • 以前需要 ctrl+z, bg, disown 一梭子,虽然能保住进程不挂掉,但 stdout 和 stderr 都无法查看了,除非之前做了重定向可以用readlink -f /proc/$pid/fd/1 继续查看脚本输出。

  • 现在这个小工具可以直接把当前终端会话连带子进程一锅端迁移到另一个screen会话里,输入输出都会自动迁移。

Redis module功能介绍
https://blog.51cto.com/u_15127532/2659222

  • 布隆过滤器 RedisBloom
    • 当尝试通过网络或磁盘搜索查询时,可以先查询BloomFilter,它肯定地告诉我们要查找的元素是否可能存在(然后可以继续进行查找)还是不存在(此时可以放弃查询直接回复不存在,节省查询资源)。
    • 布隆过滤器在网页去重,数据查询和广告投放中经常被使用;新业务上线前,增加布隆过滤器也是一个很有效解决缓存击穿的有效手段。
    • 实际上是一个很长的二进制向量和一系列随机映射函数,可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,但是有一定的误识别率且无法删除元素。
    • 只要有一次哈希计算的结果对应为 0,则该元素一定不存在;反之则可能存在。
  • 布谷鸟过滤器 CuckooFilter
    • 布谷鸟过滤器在做防缓存击穿时具有很好的表现,与布隆过滤器不同的是,它可以删除元素
  • 支持json的模块 Redisjson
    • 它允许从 Redis 存储、更新和获取 JSON 值。
    • redisjson 可以通过在 redis 服务器本地直接操作部分数据
  • 咆哮位图 Redis-roaring
    • 咆哮位图(RoaringBitmap)将整个大位图进行了分块,如果整个块都是零,那么这整个块就不用存了。
    • 但是如果位图中的元素比较少且分散,每个块里面都有 1,只存储所有位 1 的块内偏移量(整数),这就是单个块位图的稀疏存储形式 —— 存储偏移量整数列表。
  • 可用于检索的模块 RediSearch
    • 它使用户能够以极快的方式对其 Redis 数据集执行复杂的搜索查询,例如精确的词组匹配和文本查询的数字过滤,
    • 还有使用 Reids 自带的 GEO 命令进行地理过滤
  • 支持机器学习的redis RedisML/RedisAI
  • 支持事物处理的模块 RedisGears

物联网边缘计算中的全能数据库RedisEdge:实时数据、时间序列、AI、消息流、MapReduce
https://zhuanlan.zhihu.com/p/81505287

在物联网边缘计算的复杂环境中,应用程序不可避免地需要多个数据模型:

  • 内存数据库存储采集的实时设备数据。
  • 现场会断网,所以需要把待发送到云端的数据存储到时间序列数据库中。同时边缘侧需要对历史数据进行聚合分析,例如计算温度一段时间内平均值。
  • 现场采集的数据需要转发给一个或多个消费者进行处理。
  • 边缘侧需要人工智能学习能力,来支持视频流分析,图像识别,故障诊断等低延迟响应业务。
  • 边缘侧进行类似 MapReduce 的计算。
  • 运行占用空间小,以能在性能受限的边缘计算计算节点上运行。

RedisEdge将开源版本Redis(带有Redis Streams的5.0版本)与RedisAI和RedisTimeSeries、RedisGears这三个模块一起打包,就可以提供边缘计算所需的数据模型了:

  • Redis 5.0版本,内置的Set、List、Hash等数据结构可用作实时内存数据库,用来存储边缘网关采集到的设备实时数据。
  • Redis 5.0版本的Redis Streams数据结构,可用做消息中间件,把采集到的设备实时数据转发给其他边缘计算软件组件。
  • RedisTimeSeries是Redis的一个模块,可用作时间序列数据库,在边缘计算网关断网的情况下,能够离线保存需要上传到云端的设备历史数据。同时也有历史数据降采样、压缩、聚合的功能。
  • RedisGears也是Redis的一个模块,类似MapReduce的分布式动态执行框架,可以用来在分布式的边缘计算节点或者雾计算节点上运行Serverless无服务程序代码。
  • RedisAI也是Redis的一个模块,用于执行深度学习模型,在边缘侧调用PyTorch、Tensorflow和ONNXRuntime等深度学习工具。

一个方案是用开源多模型数据库Postgresql + 扩展插件(连接第三方数据库postgres-fdw + PG时间序列数据库扩展timescale + REST接口暴露PostgREST + 实时流分析pipelinedb) + PL/Python函数或SPI接口。

eBPF 实践教程:使用 uprobe 捕获多种库的 SSL/TLS 明文数据
https://eunomia.dev/zh/tutorials/30-sslsniff/

wget 使用代理
https://zhuanlan.zhihu.com/p/528378176

wget -e use_proxy=yes -e https_proxy=127.0.0.1:8080 https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli

nettrace - 网络诊断工具
https://github.com/OpenCloudOS/nettrace

  • 在一些场景下(特别是云原生场景),Linux系统中的网络部署变得越来越复杂。
  • 一个TCP连接,从客户端到服务端,中间可能要经过复杂的NAT、GRE、IPVS等过程,网络报文在节点(主机)上的处理路径也变得越来越长。
  • 在发生网络故障(比如网络丢包)时,如何快速、有效地定位出网络问题成为了一个难题。
  • 目前常规的网络故障定位手段,如tcpdump、dropwatch、ftrace、kprobe等存在一定的短板:
  • tcpdump:只能在链路层抓包,无法定位内核协议栈中的问题,比如常规的内核丢包问题
  • ftrace:只能跟踪内核函数,无法进行报文过滤,且入手较难,需要对内核协议栈有一定了解
  • kprobe:临时编写内核模块,效率和安全性低
  • BCC:功能单一,临时编写BCC程序跟踪效率低,需要对内核有一定了解,入手难
  • dropwatch:功能单一,只能查看网络丢包问题,且无法得到丢包原因和解决方案

BTF
# grep BTF /boot/config-$(uname -r)
CONFIG_VIDEO_SONY_BTF_MPX=m
# CONFIG_DEBUG_INFO_BTF is not set

eBPF Hello, World!
https://bowers.github.io/eBPF-Hello-World/

How To Add eBPF Observability To Your Product
https://www.brendangregg.com/blog/2021-07-03/how-to-add-bpf-observability.html

Meet Gain— the New Fastest Go TCP Framework
https://betterprogramming.pub/gain-the-new-fastest-go-tcp-framework-40ec111d40e6

Extreme HTTP Performance Tuning: 1.2M API req/s on a 4 vCPU EC2 Instance
https://talawah.io/blog/extreme-http-performance-tuning-one-point-two-million/

周刊(第9期):Mozilla rr使用简介
https://www.codedump.info/post/20220313-weekly-9/

rr是由Mozilla出品的一款调试工具,用官网的话来说:

  • rr这个名字里的两个r,意指record and replay,即“记录及回放”,它的使用也很简单,就是这两步:
  • record:rr record /your/application --args 记录下来程序的执行环境。
  • replay:rr replay,默认将使用最近保存的记录文件进行回放,回放时可以进入类似gdb那样的调试环境。

Awk CSV parser
https://github.com/geoffroy-aubry/awk-csv-parser

csv 导入 mysql

假如 csv 有 a,b,c 三列,我们只需要 a,c 列,并且要加入 id 自增列

# 重命名 csv 文件
mv data.csv origin_data.csv
# 创建管道队列文件,文件名要和后面在 db 里创建的表名严格一致
mkfifo data.csv

# 在 db 里建表,用压缩格式以节省空间,增加自增列方便后续按范围分块并发处理
CREATE TABLE `data` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `a` varchar(128),
  `c` varchar(128),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;

# 开一个 screen 准备用 mysqlimport 导入,分隔符用 |,用 --columns 指定列
mysqlimport --fields-terminated-by='|' --fields-optionally-enclosed-by='"' --local \
    --columns='a,c' -uuser -p mydb data.csv

# 再开一个 screen 往队列文件中动态输入只包含 a,c 列的数据
# awk-csv-parser 是基于 awk 的 csv 解析器,性能非常高,默认输出字段以 | 分割
# pv 是一个处理大文件的进度查看器,tail -n+2 用来跳过首行
# cut 命令用来只输出 1,3 列,就是 a,c 列
pv origin_data.csv | awk-csv-parser|tail -n+2 | cut -d'|' -f1,3 > data.csv

# 查看 io
sudo iotop -oPa 
  Total DISK READ:   38.13 M   ⣿⣿⣷⣶⣶⣶⣦⣤⣤⣄⣀⣀⣀⣀⠀⠀⠀⠀⠀ |   Total DISK WRITE:  361.06 M   ⣿⣿⣿⣿⣶⣶⣶⣤⣤⣤⣄⣀⣀⣀⠀⠀⠀⠀⠀
Current DISK READ: 2201.20 K/s ⣿⣇⣧⣼⣀⣰⣶⣆⣴⣦⡀⣦⣠⣤⠀⠀⠀⠀⠀ | Current DISK WRITE:   13.30 M/s ⣿⣀⣄⣤⣤⣼⣧⣶⣾⣄⣸⣿⣄⣰⠀⠀⠀⠀⠀
TID      PRIO USER      DISK READ   DISK WRITE  GRAPH[R+W]▽         COMMAND
373072   be/4 mysql     1044.48 K    180.39 M   ⣿⠀⣤⣰⣰⣸⣷⣆⣿⣀⣼⣶⣀⣰⠀⠀⠀⠀⠀ ►mysqld
601812   be/4 ubuntu      35.52 M      0.00 B   ⣀⣀⣀⣀⡀⣀⣀⣀⣀⣀⠀⣀⣀⣀⠀⠀⠀⠀⠀  pv

iostat -m -x 1 sda
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.56    0.00    0.38   26.13    0.00   61.93

Device            r/s     rMB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wMB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dMB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
sda             12.00      1.16     2.00  14.29  108.25    98.67  126.00      2.38    20.00  13.70  132.95    19.37    0.00      0.00     0.00   0.00    0.00     0.00    7.00  111.71   18.83  80.80

优点

  • 不需要真正在磁盘上生成原始 csv 的副本,节省磁盘空间,降低 io
  • 解析转换 csv 和导入数据可以同时进行,降低数据处理时间
  • 最终只导入需要的列,不需要导入后再删除列,使用 ROW_FORMAT=COMPRESSED 后改表会非常慢

Using AWK with CSV Files
https://earthly.dev/blog/awk-csv/

echo one,two,three | awk -F "," '{ print $2}'
echo one,\"two\",three | awk -F "," '{ print $2}'
echo 1,\"2a,2b\", 3 | awk -F "," '{ print $3}'

> git clone https://github.com/adamgordonbell/csvquote
> cd csvquote
> go build -o csvquote cmd/cvsquote/main.go
> cp ./csvquote /usr/local/bin

echo 1,\"2a,\"\"2b\", 3 | csvquote
echo 1,\"2a,\"\"2b\", 3 | csvquote | csvquote -u
echo 1,\"2a,2b\", 3 | csvquote | awk -F "," '{ print $2 }' | csvquote -u
  • The gawk version 4 manual says to use FPAT = “([^,]*)|(”[^“]+”)"
  • When FPAT is defined, it disables FS and specifies fields by content instead of by separator.
  • The short answer is “I wouldn’t use gawk to parse CSV if the CSV contains awkward data”, where ‘awkward’ means things like commas in the CSV field data.
  • I’d probably use Perl and the Text::CSV or Text::CSV_XS modules to read and process the data.
  • Remember, Perl was originally written in part as an awk and sed killer - hence the a2p and s2p programs still distributed with Perl which convert awk and sed scripts (respectively) into Perl.

jsonl 处理
https://github.com/jqlang/jq
jq is a lightweight and flexible command-line JSON processor akin to sed,awk,grep, and friends for JSON data. It’s written in portable C and has zero runtime dependencies, allowing you to easily slice, filter, map, and transform structured data.

https://www.baeldung.com/linux/jq-command-json

Capturing the Network Traffic of a Process
https://www.baeldung.com/linux/capture-process-network-traffic

Capturing the network traffic of a process is an important task for system administrators and developers who need to monitor and analyze the information to identify security vulnerabilities or diagnose performance issues.

Airflow概览
https://zhuanlan.zhihu.com/p/352989254

irflow是将多个任务按照其依赖关系组织起来进行管理调度的工具。Airflow基于python编写,通过python脚本可以配置和使用其作为data pipeline。除了命令行之外,Airflow提供了web可视化界面,用来管理和监控任务的执行,并且可以查看任务依赖关系图。Airflow可以方便同Hive、Presto、MySQL、HDFS、Postgres 等数据库交互,另外,提供了hook便于扩展。

DAG(有向无环图)是Airflow工作流的基本概念。DAG的每个节点表示一个任务,有向边是任务之间的依赖。每个任务具有原子性,保证在任务失败的时候可以自动或手动重试该任务,而不必重启整个DAG。这些任务和依赖构成的DAG就是一个工作流。

仿百度网盘的一款轻量级微服务架构网盘系统,云盘系统,文件管理系统
https://gitee.com/college996/zwz-netdisk/tree/master

How do I find out which process is eating up my bandwidth?
https://askubuntu.com/questions/2411/how-do-i-find-out-which-process-is-eating-up-my-bandwidth

  • Use iftop to locate the TCP port on your machine that is receiving the most traffic. Then use sudo netstat -tup to locate the process “owning” that port.
  • sudo apt-get install nethogs
    • sudo nethogs -v 3
  • dstat --net --top-io-adv

Practical Linux tracing ( Part 1/5) : symbols, debug symbols and stack unwinding
https://tungdam.medium.com/things-you-should-know-to-begin-playing-with-linux-tracing-tools-part-i-x-225aae1aaf13

使用strip, eu-strip, objcopy等剥离与导回符号表及调试信息
https://blog.csdn.net/nirendao/article/details/104107608

gcc -g -o test test.c

# test.debug 将包含调试信息和符号表; 而test将只包含调试信息
objcopy --only-keep-debug test test.debug

# 从test文件里剥离debug段
objcopy --strip-debug test

# 更彻底地,上面这句可以换成下面这句以移除所有的debug信息和符号表
strip -s test

# 在二进制文件 test 中添加 .gnu_debuglink 段以指向符号表和调试信息文件
objcopy --add-gnu-debuglink=test.debug test

# objdump 命令可以查看指定的section
objdump -s -j .gnu_debuglink test

https://openanolis.cn/sig/ebpfresearch/doc/633529753894377555

BPF是一个新的动态跟踪技术,目前这项技术正在深刻的影响着我们的生产和生活。

BPF在四大应用场景发挥着巨大作用:系统故障诊断,它可以动态插桩透视内核;网络性能优化,它可以对接收和发送的网络包做修改和转发;系统安全,它可以监控文件打开和关闭从而做出安全决策等;性能监控,它可以查看函数耗费时间从而知道性能瓶颈点。

BPF技术也是随着Linux内核的发展而发展的,Linux内核版本经历了3.x向4.x到5.x演进,eBPF技术的支持也是从4.x开始更加完善起来,特别是5.x内核也增加了非常多的高级特性。但是云上服务器有大量的3.10内核版本是不支持eBPF的,为了让我们现有的eBPF工具在这些存量机器得以运行,我们移植了BPF到低版本内核,同时基于libbpf的CO-RE能力,保证一个工具可运行在3.x/4.x/5.x的低、中、高内核版本。

另外,当前比较热门的BPF开发方式有:

1)纯libbpf应用开发:借助libbpf库加载BPF程序到内核的方式:这种开发方式不仅效率低,没有基础库封装,所有必备步骤和基础函数都需要自己摸索;
2)借助BCC:开发效率高、可移植性好,并且支持动态修改内核部分代码,非常灵活。但存在部署依赖Clang/LLVM等库;每次运行都要执行Clang/LLVM编译,严重消耗CPU、内存等资源,容易与其它服务争抢。

学会Pointer指针事件 ,一套拖拽事件两端(PC端、移动端)跑
https://segmentfault.com/a/1190000043955743

C语言深度理解结构体(内存对齐、位段、偏移量、柔性数组)
https://blog.csdn.net/SPMAX/article/details/122774979

escapture
抓包
./ecapture tls -m pcap -i eth0 --pcapfile=ecapture.pcapng --port=443
sudo ./ecapture mysqld -m /usr/sbin/mysqld

浏览器指纹检测

DWARF
https://www.wenmi.com/article/px5ev6038m8o.html

OhMyZsh,简直是我用来伪装资深程序员的神器!
https://zhuanlan.zhihu.com/p/505591537

brew install zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 查看当前在使用的shell
echo $SHELL
# 也可以使用下面命令自行修改默认shell
chsh -s $(which zsh)

macos 安装 Docker

brew install docker docker-compose colima

Docker部署clickhouse(超详细图文教程)
https://blog.csdn.net/fy512/article/details/123482700

docker pull yandex/clickhouse-server
docker pull yandex/clickhouse-client

docker run -d -p 8123:8123 -p 9000:9000 --name clickhouse yandex/clickhouse-server
docker run -it --rm --link clickhouse:clickhouse-server yandex/clickhouse-client --host clickhouse

# 如果想指定目录启动,这里以clickhouse-test-server命令为例,可以随意写
mkdir /work/clickhouse/clickhouse-test-db       ## 创建数据文件目录
# 使用以下路径启动,在外只能访问clickhouse提供的默认9000端口,只能通过clickhouse-client连接server
docker run -d --name clickhouse-test-server --ulimit nofile=262144:262144 --volume=/work/clickhouse/clickhouse_test_db:/var/lib/clickhouse yandex/clickhouse-server


CREATE TABLE t_stock
(
    `id` UInt32,
    `sku_id` String,
    `total_amount` Decimal(16, 2),
    `create_time` Datetime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(create_time)
PRIMARY KEY id
ORDER BY (id, sku_id)

insert into t_stock values
(101,'sku_002',2000.00,'2020-06-01 11:00:00'),
(102,'sku_004',2500.00,'2020-06-01 11:00:00'),
(103,'sku_002',2000.00,'2020-06-02 11:00:00'),
(104,'sku_002',12000.00,'2020-06-03 11:00:00'),
(105,'sku_002',600.00,'2020-06-04 11:00:00');
select * from t_stock;

docker exec -it clickhouse bash
cd /var/lib/clickhouse/data/

insert into t_stock values
(101,'sku_002',2000.00,'2020-06-01 14:00:00'),
(102,'sku_004',2500.00,'2020-06-01 15:00:00'),
(103,'sku_002',2000.00,'2020-06-01 16:00:00'),
(104,'sku_002',12000.00,'2020-06-01 17:00:00');

OPTIMIZE TABLE t_stock FINAL;

CREATE TABLE t_stock_2
(
    `id` UInt32,
    `sku_id` String,
    `total_amount` Decimal(16, 2),
    `create_time` Datetime,
    INDEX secondIndex total_amount TYPE minmax GRANULARITY 5
)
ENGINE = MergeTree
PARTITION BY toYYYYMMDD(create_time)
PRIMARY KEY id
ORDER BY (id, sku_id)

深入浅出 ClickHouse 物化视图
https://mp.weixin.qq.com/s/7RxBg1mxdpffcpWp02TJ7w

clickHouse-MergeTree家族引擎
https://blog.csdn.net/bwf317/article/details/110785858

  • AggregatingMergeTree 也是预先聚合引擎的一种,用于提升聚合计算的性能
  • 与 SummingMergeTree 的区别在于:
    • SummingMergeTree 对非主键列进行 sum 聚合
    • 而 AggregatingMergeTree 则可以指定各种聚合函数。
  • AggregatingMergeTree 的语法比较复杂,需要结合物化视图或 ClickHouse 的特殊数据类型 AggregateFunction 一起使用
    • AggregateFunction(arg1 , arg2) ;参数一 聚合函数 参数二 数据类型
  • 在 insert 和 select 时,也有独特的写法和要求:写入时需要使用 -State 语法,查询时使用 -Merge 语法。

Working with CSV and TSV data in ClickHouse
https://clickhouse.com/docs/en/integrations/data-formats/csv-tsv

mysql 锁

show status like 'table%';
show status like 'InnoDB_row_lock%';
show engine innodb status\G
show OPEN TABLES where In_use > 0;
select * from performance_schema.data_locks\G
select * from performance_schema.data_lock_waits\G

随着数字技术的发展,数据呈爆炸式增长,数据类型越来越丰富,对数据价值挖掘的实时性要求不断提升,业务场景也越来越复杂度。在过去几年里,数据分析的需求通常采用多套系统组合的方式来完成,比如采用 Kylin 在支持 BI 报表场景,采用 Trino、Impala 支撑交互式分析场景,采用 ClickHouse、Druid 来支撑实时分析场景,StarRocks 希望通过技术创新简化数据技术栈,用户可以借助 StarRocks 一个引擎实现全场景的数据分析。

链接:https://www.zhihu.com/question/415561162/answer/3364773974

当前业界构建数据分析的技术栈,有两条典型的路线,一个是数仓路线,一个是数据湖的路线。数据仓库的路线,数据先通过 ETL 统一写入到数仓进行管理,然后构建数据集市来满足 BI 分析的各种需求,优势是数据质量高、查询性能高、具备实时分析的能力、数据治理功能完善等;而数据湖的路线,通常是未经加工的数据先统一存储在数据湖,作为企业数据的 Single source of truth,然后按需的使用数据,构建数据应用,优势是通开放生态、扩展性强,性价比高。

现在什么数据库或大数据技术比较适合做数据仓库? - StarRocks的回答 - 知乎
https://www.zhihu.com/question/415561162/answer/3364773974