DuckDB是一款集轻量级、高性能于一体的嵌入式分析型数据库。在单机内存不断增大以及 SSD 存储逐渐普及的背景下,大部分数据处理工作可以在单机上完成,且很多 OLAP(在线分析处理)场景也能在单机上进行。DuckDB 就是为了满足这种在单机环境下进行高效数据分析的需求而诞生的。它是荷兰 CWI 数据库组的一个项目,学术气息浓厚,架构清晰,适合学习和研究。
一、主要特点 - 列式存储:与传统的行式存储数据库不同,DuckDB 采用列式存储方式。这种存储方式将相同列的数据集中存储在连续的物理位置,能够更高效地读取和分析数据,尤其在涉及大量数据的聚合、统计等分析操作时,性能优势明显。例如,在对某一特定列进行求和、求平均值等操作时,列式存储可以快速定位到该列的数据,减少不必要的数据读取。 - 支持标准 SQL:支持完整的标准 SQL 查询语言,这使得熟悉 SQL 的用户可以轻松地使用 DuckDB 进行数据查询和分析。无论是简单的查询、复杂的连接操作,还是聚合函数的使用,都可以通过 SQL 语句来实现。 - 内存优化:充分利用内存优势,尽可能将数据加载到内存中进行处理,从而显著减少磁盘 I/O 操作,加快查询速度。对于大规模数据集的处理,这种内存优化特性能够大大提高数据处理的效率。 - 轻量级与嵌入式:DuckDB 是一个轻量级的数据库,其部署和使用非常简单,无需复杂的配置和额外的服务器。它可以作为嵌入式数据库直接集成到应用程序中,与应用程序在同一进程中运行,方便应用程序对本地数据进行管理和分析。 - 查询优化:内置了多种查询优化技术,如智能选择查询路径、减少数据扫描量、执行公共子表达式消除和常量折叠等。在处理复杂的连接操作时,会使用动态规划进行连接顺序的优化,以提高查询的执行效率。二、安装与使用
- 安装:DuckDB 提供了多种安装方式,包括命令行安装(如在 Windows 上使用 winget 包管理器,在 macOS 上使用 Homebrew)、编程语言的库安装(如在 Python 中使用 `pip install duckdb`,在 Java 中通过添加依赖项来集成)等。 - 使用:安装完成后,可以通过命令行界面直接使用,也可以在编程语言环境中通过相应的 API 接口进行操作。在命令行中,用户可以输入 SQL 语句来对数据库进行操作,如创建表、插入数据、查询数据等;在编程语言环境中,可以将 DuckDB 与应用程序的数据处理流程紧密结合,实现更复杂的数据处理功能。
More...
使用过WSL的都知道, Ubuntu22.04 LTS ,它作为Windows App默认被安装到了C盘。随着使用的时间越来越长,wsl占用的磁盘空间也越来越大。C盘很快就红了。现在我们来将wsl从C盘迁移到别的磁盘。
1.准备工作
打开CMD ,输入wsl -l -v
查看wsl虚拟机的名称与状态。
PS C:\Users\Laptop> wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Running 2
了解到本机的WSL全称为Ubuntu-22.04,以下的操作都将围绕这个来进行。
More...
QUIC 的大多数杀手级功能都不明显或没有记录在案。 是时候改变这种状况了。
基础知识
在我们介绍高级内容之前,我们需要介绍基础知识。
愤怒的诱饵,但这是真的
More...
Monica 是由 GPT-4 驱动的人工智能助手,现在注册赠送你 100 个免费 GPT 次数,包括 GPT-4,GPT-3.5,AI 画图。 https://monica.im/?c=Q1WKG1YR
More...
Linux是开源操作系统,有很多软件包需要从国外网站上下载,而其中大部分国外网站是被墙的,这时我们需要通过代理来访问这些网站。下面我们介绍Linux bash shell终端代理设置方法,包括socks代理,http代理。
一、linux shell终端代理设置方法:
linux要在shell终端为http、https、ftp协议设置代理,值需要设置对应的环境变量即可。下面是一些关于代理的环境变量:
More...
yum 源准备 1、更新一下yum: sudo yum -y update 该 -y 标志用于提醒系统我们知道我们正在进行更改,免去终端提示我们要确认再继续
More...
milvus是一个强大的向量数据库,详细介绍可以看 Milvus 2.0 新版本一览:重新定义向量数据库
在使用go访问milvus的过程中,发现milvus-go-SDK的相关的接口设计实现比较原始,在使用的过程中,
感觉原作者也是在使用SQL的思路来设计接口,但并没有提供SQL的接口,
于是简单的尝试了下,想通过sql词法解析,再转换成milvus-go-SDK来访问milvus,
简单的实现了基本的SQL的select来查询milvus, 后面可以添加其它的语句支持.
建立了一个开源项目 https://github.com/0xsky/sqlmilvus
More...
linux下使用docker 安装 milvus命令记录
More...
dockerfile 是一种可以被 docker 程序解释的脚本,由一条条指令组成。通过编写 dockerfile 可以做到:
定制化 docker 镜像。
整合下载镜像、启动容器、编辑可写层等等操作,可重复构建,提升效率。
随时维护、修改、分享 dockerfile。
More...
Milvus 是什么
Milvus 是一款开源的向量数据库,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,让你可以针对不同场景选择不同的索引类型。此外,Milvus 还可以对标量数据进行过滤,进一步提高了召回率,增强了搜索的灵活性。
Milvus主要是在Ubuntu环境下进行开发的,我们推荐的编译环境首选是Ubuntu 18.04。在0.6.0之前的版本都是使用GPU加速的版本,但很多使用者反映他们希望在无GPU的机器上运行Milvus。于是我们在0.6.0上通过编译选项提供了CPU和GPU两种版本,但在CPU版本的Docker镜像没有发布前,很多使用者不得不自己去编译CPU版本,由于各人的机器环境千差万别而遇到了各种各样的编译问题。因此我们上传了两个Docker镜像,分别提供了Milvus CPU和GPU版本所需要的编译环境。
More...
什么是 MinIO?
Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。
More...
什么是Prometheus?
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。 2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。 Prometheus目前在开源社区相当活跃。 Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。
Prometheus的特点 多维度数据模型。 灵活的查询语言。 不依赖分布式存储,单个服务器节点是自主的。 通过基于HTTP的pull方式采集时序数据。 可以通过中间网关进行时序列数据推送。 通过服务发现或者静态配置来发现目标服务对象。 支持多种多样的图表和界面展示,比如Grafana等。
More...
https://github.com/xwb1989/sqlparser
来自Vitess的SQL词法解析器, 被单独抽出来做为一个独立库,可以用来实现很多好玩的东西
Vitess使用SQL的词法解析来实现像数据自动分片这类功能.
sql := "SELECT * FROM test_table WHERE a = 'abc'"
stmt, err := sqlparser.Parse(sql)
if err != nil {
// Do something with the err
}
// Otherwise do something with stmt
switch stmt := stmt.(type) {
case *sqlparser.Select:
_ = stmt
case *sqlparser.Insert:
}
More...
1.概述--美观、强大的可视化监控指标展示工具 grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。最好的参考资料就是官网(http://docs.grafana.org/),虽然是英文,但是看多了就会啦。
1.1基本概念 Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQL和OpenTSDB等。
每个数据源的查询语言和能力都是不同的。你可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。
More...
0x01 问题由来
最近使用gRPC-Gateway实现一个GRPC的服务HTTP网关时,遇到一个数据类型转换的问题。
在PB中定义的类型为uint64字段,在通过http接口访问返回JSON结果到本地之后却是一个string类型.
0x02 原因分析
为什么gRPC-Gateway要把int64转为string类型呢,他们的回答是遵循proto3的序列化规则,proto3的json-mapping中规定了int64/uint64/fixed64类型映射的json类型为string 。
文档 里的有的话是这样说的:
More...
最近 ChatGPT 着实火了一把,据说 GTP4 也即将发布。现在Large Language Model(LLM )也受到了类似图像生成的 Stable Diffusion 那种高光时刻。
在之前我一直有一个错误的观念,认为谁掌握着计算能力,谁才能得到最好的AI模型。直到 Facebook 2023 年二月 24 号发布了论文“LLaMA: Open and Efficient Foundation Language Models ”。粗略阅读之后,我才知道原来在一个限定的预算下,大参数模型并不如小参数模型用更多的数据进行训练。
当前,许多 AI 模型都依赖 CUDA,比如 nanoGPT ,这也就意味着必须有 NVIDIA 的 GPU来训练和运行。有这样的硬件限制,对于我这种只是想初步了解一下 LLMs 的一些基本概念的业余爱好者变成了一个比较高的门槛。
More...
使用MYSQL8对 California Housing 加利福尼亚的房价数据集,进行统计分析
More...
解协议: URLContext主要存储视音频使用的协议的类型以及状态。 URLProtocol存储输入视音频使用的封装格式。 每种协议都对应一个URLProtocol结构 解封装: AVFormatContext主要存储视音频封装格式中包含的信息; AVInputFormat存储输入视音频使用的封装格式。 每种视音频封装格式都对应一个AVInputFormat 结构 解码: 每个AVStream存储一个视频/音频流的相关数据; 每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据; 每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。 每种解码器都对应一个AVCodec结构 存数据: 视频的话,每个结构一般是存一帧;音频可能有好几帧 解码前数据:AVPacket 解码后数据:AVFrame
More...
Shared Memory Concurrency Roadmap
过去很多年, 单核处理器性能基本沿摩尔定律的预测不断提速. 然而, 设计上越来越复杂, 也越来越接近物理极限, 引起了生产成本和功耗的增大, 性价比降低. 2005年前后, CPU制造商, 开始从原来提升单核处理器的ILP(instruction-level parallelism), 转向在单个芯片上增加核数, 挖掘multicore processor的性能[1].
目前, 市面上, 商用廉价或高端服务器, 一般都采用shared memory multicore multiprocessor. 高端服务器有几十~几百core, 几百GB甚至上TB的内存. 例如: Intel® Xeon® Processor E7-8894 v4支持8 socket * 24 core, 3.07TB内存[2]. 服务器提供了强大处理的能力, 可将系统dataset(比如in-memory database)可以全驻于内存, 采用multi-threaded编程, 共享地址空间, 提升计算性能[3][4].
shared memory concurrency涉及三个方面: parallelism, performance和correctnesss.
More...
到现在,我已经做了超过 21 年开发,可以说,我生命中超过一半的时间都在编程,那既是我的职业,也成了我的习惯。
下面是我在开发过程中学到的 10 条最有价值的经验。
1 你永远不可能什么都知道
尤其是在开始的时候,我以为我什么都能学会,在开发生涯的大部分时间里,我都是这样想的。但是,每次我学了什么新东西,就打开了一个全新的世界,里面有不同的概念和技术。
那似乎很有吸引力,你很愿意尝试,希望把什么都学会,但这是一个没有终点的旅程。如果要学的话,总是有其他的库、框架以及其他很酷的东西可以学。
因为似乎永远无法达成自己的目标,所以最终你的热情会慢慢冷却。最好是立足于你最擅长的东西,然后因需而学,即在真正需要的时候才学习新东西。这可以让你保持清醒,维持学习的动力。
你还可以把这一点应用在任何其他的领域。不是什么都知道才能达成预期的结果。利用这一点来打造自己的优势,在需要的时候学习。
More...
rd_kafka
的常见发布和订阅配置选项的整理。这些选项可以用于设置 Kafka 生产者(发布者)和消费者(订阅者)的行为和属性。
发布者配置选项:
bootstrap.servers
:Kafka 集群的地址列表,用于引导连接。 示例代码:
rd_kafka_conf_set(conf, "bootstrap.servers", "localhost:9092", errstr, sizeof(errstr));
More...
C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题。如果crash的地方正是内存使用错误的地方,说明你人品好。如果crash的地方内存明显不是consistent的,或者内存管理信息都已被破坏,并且还是随机出现的,那就比较麻烦了。当然,祼看code打log是一个办法,但其效率不是太高,尤其是在运行成本高或重现概率低的情况下。另外,静态检查也是一类方法,有很多工具(lint, cppcheck, klockwork, splint, o, etc.)。但缺点是误报很多,不适合针对性问题。另外好点的一般还要钱。最后,就是动态检查工具。下面介绍几个Linux平台下主要的运行时内存检查工具。绝大多数都是开源免费且支持x86和ARM平台的。
首先,比较常见的内存问题有下面几种: • memory overrun:写内存越界 • double free:同一块内存释放两次 • use after free:内存释放后使用 • wild free:释放内存的参数为非法值 • access uninitialized memory:访问未初始化内存 • read invalid memory:读取非法内存,本质上也属于内存越界 • memory leak:内存泄露 • use after return:caller访问一个指针,该指针指向callee的栈内内存 • stack overflow:栈溢出
More...
关于开源图书 有热心的伙伴和网友在网络上做了大量整理,本文为大家刊载免费编程类中文开源电子书合集全集,转载自 LinuxStory
暂无同学编辑和校对的文章 https://linuxstory.org/free-chinese-programming-books/ ,(原始 GitHub 地址:https://github.com/justjavac/free-programming-books-zh_CN )转载的原因是未来开源工场的小伙伴会就这个 repo 和话题做更加细致的整理,包括技术类、非技术类等等,希望帮到更多的小伙伴。如果你有兴趣一起做这件事情,请考虑联系工场电报群管理员或者 QQ 群群主。
书山有路勤为径,学海无涯苦作舟!
开源不仅局限于软件领域,开源同样意味着自由选择的权利和对知识开放的追求
More...
FFMPEG 可以使用下面的参数进行基本信息查询。例如,想查询一下现在使用的 FFMPEG 都支持哪些 filter,就可以用 ffmpeg -filters 来查询。详细参数说明如下:
参数 说明
-version 显示版本。
-formats 显示可用的格式(包括设备)。
-demuxers 显示可用的demuxers。
-muxers 显示可用的muxers。
-devices 显示可用的设备。
-codecs 显示libavcodec已知的所有编解码器。
-decoders 显示可用的解码器。
-encoders 显示所有可用的编码器。
-bsfs 显示可用的比特流filter。
-protocols 显示可用的协议。
-filters 显示可用的libavfilter过滤器。
-pix_fmts 显示可用的像素格式。
-sample_fmts 显示可用的采样格式。
-layouts 显示channel名称和标准channel布局。
-colors 显示识别的颜色名称。
More...
作者先简单介绍 Redis 6 会给大家提供的新功能,包括:
一、对用户使用有直接影响的功能
ACL用户权限控制功能
RESP3:新的 Redis 通信协议
Cluster 管理工具
SSL 支持
二、Redis 内部的优化
IO多线程支持
新的Module API
新的 Expire 算法
三、外部工具
Redis Cluster Proxy
Disque
More...
在CCleaner中点击注册表,在注册表清理中勾选所有,之后点击扫描问题,然后点击修复选定的问题,重复多次此步骤,直到出现没有发现问题
然后重装就OK了
More...
矩阵规范
Matrix定义了一组用于分散通信的开放API,适用于通过全局开放式服务器联合安全发布,持久化和订阅数据,而无需单一控制点。用途包括即时消息(IM),IP语音(VoIP)信令,物联网(IoT)通信以及将现有通信孤岛联系在一起 - 为新的开放式实时通信生态系统提供基础。
More...
改善程序与设计的55个具体做法(第3版) 的读书笔记
More...