数据库
按照是否是关系型
关系型数据库可分为交易型数据库(OLTP)、分析型数据库(OLAP)和混合负载数据库(HTAP)。
交易型数据库满足处理在线的实时交易事务场景,
分析型数据库满足分析业务场景,
混合负载数据库目标是同时处理简单交易和复杂分析场景
非关系型数据库(NoSQL)
键值数据库(Key-Value Database)、图数据库(Graph Database)、时序数据库(Time Series Database)、
列簇式数据库(Column-family Database)和文档数据库(Document-Oriented Database)。
Clickhouse
按照部署形态区分
本地部署和云原生数据库。
本地部署按照架构分类主要有三类:单机、集群、分布式
按照是否
嵌入式数据库(Embedded Database)和数据库服务器(Database Server)
数据库服务器(Database Server):客户端和服务器通过TCP/IP进行通讯 将数据与应用程序分离,便于对数据访问的控制和管理。
数据库产品
国内:
三个商业数据库品牌:达梦、GBase、金仓;
达梦数据库DM8:通用关系型数据库
三个开源数据库品牌:openGauss、TiDB、OceanBase;
三个云数据库品牌:GaussDB、PolarDB、TDSQL
MySQL、PostgreSQL
MariaDB 客户端-服务器用例设计
PostgreSQL
openGauss 是华为 一款企业级开源关系型数据库,内核基于PostgreSQL
GaussDB 是华为自研数据库品牌,是华为基于外部电信与金融政企经验
OceanBase 是蚂蚁集团完全自研的原生分布式关系数据库软件
PolarDB是阿里云自主研发的新一代关系型云原生数据库
AnalyticDB 阿里云:分析型数据库
TDSQL 鹅厂
TiDB是PingCAP公
Creenplum。GP数据库
跨数据中心--监管等原因这个是迟早要来的
存算分离:只有存算分离吗?不,能分离的都可以分离,都可以自由扩展,包括存储、缓存、网络、CPU等。
嵌入式数据库
SQLite SQLite(开源,商用免费
SQLite 等典型的 OLTP 关系数据库是面向行的
RQLite基于SQLite创建分布式数据库系统
9 offbeat databases worth a look
Berkeley DB (开源,商用收费)
可以保存任意类型的键/值对(Key/Value Pair)
Firebird嵌入服务器版(Embedded Server)
UnQLite是一个文档存储数据库,类似于MongoDB、Redis、CouchDB等。同时,也是一个标准的Key/Value存储
DuckDB
学习数据库内部实现的一个绝佳范例 适合作为一些嵌入式应用的内嵌分析型数据库
本地数据集提供快速的内存中分析处理,存算分离的架构,基于云计算进行构建的,底层基于对象存储,上层的计算节点是可以随意扩展的
DuckDB Labs
SIGMOD2019 DuckDB,弥补了sqlite没有数据分析能力的缺陷。
嵌入式的OLAP分析引擎,定位为高性能,高可靠和方便使用的数据库系统
DuckDB对标SQLite,都是嵌入式数据库。
SQLite是嵌入式的OLTP,而DuckDB是嵌入式OLAP
不需要启动数据库服务器,也不需要使用客户端连接服务器。
Snowflake 分离了计算和存储,而 MotherDuck 将计算接入存储
下载安装
https://github.com/duckdb/duckdb/releases
https://github.com/duckdb/duckdb/releases/download/v0.7.1/duckdb_cli-windows-amd64.zip
pip install duckdb==0.7.1
install.packages("duckdb")
<dependency>
<groupId>org.duckdb</groupId>
<artifactId>duckdb_jdbc</artifactId>
<version>0.7.1</version>
</dependency>
DuckDB 将保持其作为进行学术研究的工具的地位
Storage/Computation分离
示例:
01.打开数据库 --duckdb to run the executable
simply include a path as a command line argument like duckdb path/to/my_database.duckdb
duckdb #这个是 in-memory database
或者
duckdb path/to/my_database.duckdb ##创建或者打开open or create a database at that location as needed
02.连接数据库
DuckDB 支持内存型和持久化型两种工作模式
内存型不持久化数据,采用 InMemoryBlockManager 来管理数据,
DuckDB 采用 SingleFileBlockManager 来管理外存上的数据
SingleFile 的数据划分成定长块,包括两大类:header 和 block
.show
DuckDB, by default, connects to a transient in-memory database.
In other words, when the process is terminated, the data loaded is flushed
.open
eg:
mytest.db
mytest.db.wal < the write-ahead log file>
Essentially the WAL contains a list of all the changes that have been committed/written to disk, but have not been checkpointed
https://sqlite.org/wal.html
https://github.com/duckdb/duckdb/issues/301
事务的支持有两种模式:
回滚模式 (Rollback mode)。在事务处理中,SQLite 把原本的页写入到回滚日志中并且把修改的页写入到数据库文件中。
该模式同时支持 DELETE 和 TRUNCATE 两种子模式。
预写式日志模式 (Write-ahead log mode)。
在事务处理中,不修改原本的页而是把修改的页追加写到单独的预写式日志文件中。
预写式日志模式可以支持更高的并发度并且常常有更好的性能。
但是相较于回滚模式,预写式日志模式不能用于网络文件系统并会增加整体文件管理的复杂度。
数据导入
数据导入导出方面,支持CVS/Parquet/S3 Parquet导入导出
reads Parquet, CSV and JSON files from either your local filesystem or HTTP servers
the database parameter to the connect method persists all further changes.
Two new files will be created.
Loading the data
中途保存
.backup
退出程序
.quit
mytest.db
DBeaver SQL IDE for DuckDB
https://duckdb.org/docs/guides/sql_editors/dbeaver
https://central.sonatype.com/artifact/org.duckdb/duckdb_jdbc/0.7.1
https://repo1.maven.org/maven2/org/duckdb/duckdb_jdbc/0.7.1/
JDBC URL to: jdbc:duckdb:/home/<LOCAL_PATH>/db.duckdb
Path to: /home/<LOCAL_PATH>/db.duckdb
命令方式
dot commands 点式命令
begin the line with a period (.) immediately followed by the name of the command you wish to execute
扩展
查看扩展--select * from duckdb_extensions();
JSON Import/Export
When the JSON extension is installed, FORMAT JSON is supported for
COPY FROM, COPY TO, EXPORT DATABASE and IMPORT DATABASE. See Copy and Import/Export.
从S3中下载扩展
从S3中下载扩展
D:\annotation\corner.json
线上命令
https://shell.duckdb.org/
数据库是查询引擎和储存系统的结合,但现在好像单独的查询引擎或储存系统都可以算是数据库了,它们的边界在一点点模糊
其他
Streamlit 是一个基于 Python 的 Web 应用程序框架,致力于以更高效、更灵活的方式可视化数据,并分析结果
rilldata
Pulumi 是一个开源工具,用于配置和管理云基础架构和资源 Terraform
Worktile
线项目管理系统的成本是约是15万/年
PingCode
Worktile 是国内市场占有率最高的项目管理软件之一
OpenProj 是一款开源的项目管理软件
查询其他数据库的数据
Querying SQLite data from DuckDB
duckdb> LOAD 'build/release/sqlite_scanner.duckdb_extension';
duckdb> CALL sqlite_attach('sqlite3.db');
duckdb> LOAD 'build/release/postgres_scanner.duckdb_extension';
duckdb> CALL POSTGRES_ATTACH('host=127.0.0.1 port=5432 user=postgres dbname=postgres');
参考
https://motherduck.com/
https://duckdb.org/
https://duckdb.org/docs/
https://github.com/duckdb/duckdb
DuckDB官网: https://duckdb.org/
DuckDB github 开源地址:https://github.com/duckdb/