首页 > 数据库 >嵌入式数据库-分析型数据库-DuckDB

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

时间:2023-03-17 18:00:09浏览次数:102  
标签:Database DuckDB 数据库 嵌入式 duckdb https org

数据库

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

标签:Database,DuckDB,数据库,嵌入式,duckdb,https,org
From: https://www.cnblogs.com/ytwang/p/17227728.html

相关文章

  • mysql-information_schema 数据库
    1概述information_schema数据库跟performance_schema一样,都是MySQL自带的信息数据库。其中performance_schema用于性能分析,而information_schema用于存储数据库......
  • 使用Navicat连接的PostgreSQL数据库
    1、切换到posgres用户:su-postgerssu-postgres#切换postgres用户psql#进入psql交互命令行\l#查看数据库列表......
  • 利用Navicate查看已连接数据库密码
    一、导出链接 二、选择要查询的数据库链接三、导出文件用notepad++打开 四、解密密码在线运行代码,使用PHP在线运行工具(将上面文档的密码替换标红地方)<?phpcla......
  • 谈谈为什么要拆分数据库?有哪些方法?
    为什么要拆分数据库?数据库负载和数据量大拆分数据库是有讲究的,必须:先水平切分,然后垂直切分。什么是垂直切分?垂直切分是根据业务来拆分数据库,同一类业务的数据表拆分到......
  • .net 连接各个数据库的ConnectionString字符串
    DataType----->ConnectionStringDataType.MySql----->DataSource=127.0.0.1;Port=3306;UserID=root;Password=root;InitialCatalog=cccddd;Charset=utf8;SslMode=none......
  • AndroidStudio数据库连接有问题
    packagecom.example.daka;importandroidx.appcompat.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.EditTex......
  • C# 连接SQL数据库 ,增删改查
     Default3.aspx.cs1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Data;//数据库执行方式4usingSystem.Data.SqlClient;//数据库5us......
  • 使用 Athena (Presto) 分析本地 Oracle 数据库导出的数据
    在传统企业客户,无论是前台的交易数据库还是后台的数据仓库,都会选择使用Oracle,它具备非常广泛的技术资料、社区资源和问题处理案例(各种踩坑的经验);同时它还有广泛的用户基础......
  • 分布式数据库DDBS
    一、什么是分布式数据库分布式数据库系统(DDBS:Distributed Database System)是在集中式数据库系统的基础上发展来的。是数据库技术与网络技术结合的产物。分布式数据......
  • 接口自动化---数据库断言封装python
    接口自动化---数据库断言封装python前言:在接口测试响应验证中,通常可以通过接口响应值来验证,还可以通过查询数据库信息辅助来验证。接口测试数据清理1、通过Delete接口删......