当前位置: 首页 > news >正文

基于文件的本地数据库组件 DuckDB, ChDB, SQLite, LevelDB, RocksDB

OLTP 与 OLAP 的区别:

  • OLTP(on-line transaction processing) 联机事务处理,主要就是一些传统的数据库,比如 Mysql。
  • OLAP(On-Line Analytical Processing) 联机分析处理,主要应用在大数据分析处理领域,比如 Clickhouse。

SQLite

这个是使用最广泛的基于文件的本地数据库,兼容SQL,在一些桌面程序,安卓软件上使用广泛,缺点是不支持并发写,实际上本地应用也不需要什么并发,将写操作做好串行处理即可。

DuckDB

目标是称为分析领域(OLAP)的SQLite,本地数据库,已经在DBeaver中支持,支持SQL(它的SQL设计参照的 PostgreSQL,但又不完全是,在有些地方与Mysql不一样),支持 CSV, JSON, Parquet 等文件格式。

https://github.com/duckdb/duckdb

https://duckdb.org/docs/api/go

https://duckdb.org/docs/api/python/overview

ChDB

由国内大佬 auxten 开发,相关介绍 https://zhuanlan.zhihu.com/p/642345300

也是一个 OLAP 领域的本地数据库,底层是集成的 ClickHouse Engine,用户不需要安装 ClickHouse 软件和服务,性能却非常炸裂。默认是python版本的,也提供了Golang版本。其团队已加入 ClickHouse ,可保证持续更新和优化。按照作者所说实上单机版的 chDB 在大多数场景下竟然比上百台服务器组成的 Hive 运行速度要快得多

chDB 跟 clickhouse-local 很像,但是 chDB 是嵌入(embeded)到你的应用中的。

Features

  • In-process SQL OLAP Engine, powered by ClickHouse
  • Serverless. No need to install or run ClickHouse services
  • Minimized data copy from C++ to Python with python memoryview
  • Input & Output support Parquet, CSV, JSON, Arrow, ORC and 60+more formats
  • Supports Python DB API 2.0, example and custom UDF Functions
  • Library bindings for Python, Go, Rust, NodeJS, Bun
  • Apache License, Version 2.0

那么,为什么不直接使用已经完备的ClickHouse系统呢,毕竟包装一层会面临非常多的问题需要解决。我们可以从 ClickHouse 的论坛上找到答案 https://clickhouse.com/blog/welcome-chdb-to-clickhouse,大概意思就是原本clickhouse的使用场景是大数据集群的实时数据分析,但是随着DuckDb的流行,他们才意识到这种小数据集的使用场景还是很多的,为了完善clickhouse的生态,他们迅速收购了chDB,实际上 Auxten 开发 chDB 的初衷就是满足自己训练模型的需要,不想花那么多时间和资源去搭建clickhouse服务。

https://github.com/chdb-io/chdb

https://github.com/chdb-io/chdb-go

https://doc.chdb.io/#/

LevelDB

LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.

是一个本地K-V数据库。

https://github.com/google/leveldb

RocksDB

是一个本地K-V数据库,它居然是在早期的 LevelDB 的基础上演变而来的。

https://github.com/facebook/rocksdb

http://www.lryc.cn/news/382828.html

相关文章:

  • 日志记录功能
  • Android中的多线程与线程池详解
  • 使用LangChain+Ollama自己做的一个和大语言模型聊天的网站支持上下文对话,学习记录。
  • excel数据透视
  • 七、(正点原子)Linux并发与竞争
  • vue2+TS,el-table表格单选的写法
  • 北邮《计算机网络》蒋老师思考题及答案-传输层
  • 学懂C#编程:常用高级技术【元组的详细使用】——利用元组获取多个返回值
  • 解决IDEA使用卡顿的问题,设置JVM内存大小和清理缓存
  • Python爬虫从入门到入狱之爬取知乎用户信息
  • apk反编译修改教程系列-----去除apk软件更新方法步骤列举 记录八种最常见的去除方法
  • SpringMVC系列六: 视图和视图解析器
  • MySQL数据备份的分类
  • node+nginx实现对react进行一键打包部署--windows版
  • 【机器学习】基于Gumbel-Sinkhorn网络的“潜在排列问题”求解
  • create-react-app创建的项目中设置webpack配置
  • 【ai】tx2 nx :安装torch、torchvision for yolov5
  • 【报错】在终端中输入repo命令后系统未能识别这个命令
  • 【机器学习】K-Means算法详解:从原理到实践
  • 解决qiankun项目与子应用样式混乱问题
  • 黑产当前,如何识别异常图片?
  • 数据模型(models)
  • 【CS.AL】算法核心之贪心算法 —— 力扣(LeetCode)743. 网络延迟时间 - Dijkstra算法题解
  • 25、架构-微服务的驱动力
  • JeecgFlow事件网关概念及案例
  • 使用鸿蒙HarmonyOs NEXT 开发 快速开发 简单的购物车页面
  • iOS 中 attribute((constructor)) 修饰的函数
  • 原生js实现图片预览控件,支持丝滑拖拽,滚轮放缩,放缩聚焦
  • C语言入门课程学习笔记9:指针
  • 借助 Cloudflare D1 和 Drizzle 在 Astro 上实现全栈