数据库-duckdb_嵌入式分析型数据库

数据库

按照是否是关系型
  关系型数据库可分为交易型数据库(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/