GooseDB,一款實現服務器客戶端模式的DuckDB

在網上看到韓國公司開發的一款GooseDB,

官方網站對它的介紹是DuckDB? 的功能擴展分支,具有服務器/客戶端、多會話和并發寫入支持,使用 PostgreSQL 有線協議(DuckDB?是 DuckDB 基金會的商標)

使用也很簡單,從下載網頁下載相應平臺二進制文件啟動服務端,

C:\d\goosedb>goosedb start
{"level":"info","msg":"===== GooseDB Freeware(For Non-Commercial Use Only) [read_write] ===== valid until: 2027-06-24 08:00:00 +0800 CST, owner: AnyBody =====","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"MaxConnections = 10","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"DuckDB !!read_write!! Mode)","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"SET ieee_floating_point_ops = false","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"SET autoload_known_extensions=1","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"SET preserve_insertion_order = false","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"ATTACH ':memory:' as memdb","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"LOAD parquet","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"LOAD json","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"GooseDB v1.3.1.1 (DuckDB v1.3.1) build_date:2025-06-22","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"goosedb listening on 0.0.0.0:1234","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"restapi listening on 0.0.0.0:5678","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"db-file: data\\goosedb.ddb, cfg-file: conf\\goosedb.cfg","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"SET ieee_floating_point_ops = false","time":"2025-09-13T18:40:47+08:00"}
{"level":"info","msg":"SET autoload_known_extensions=1","time":"2025-09-13T18:40:47+08:00"}
{"level":"info","msg":"SET preserve_insertion_order = false","time":"2025-09-13T18:40:47+08:00"}

從啟動日志能看出它的默認數據文件和配置文件,可以參考文檔修改。
用psql客戶端連接即可。

\d\pg18\bin\psql -h 127.0.0.1 -U gooseadmin -d goosedb -p 1234
用戶 gooseadmin 的口令:psql (18beta1, 服務器 16.9)
輸入 "help" 來獲取幫助信息.goosedb=> select version();version                                                      
-----------------------------------------------------------------------------------------------------------------------------PostgreSQL 16.9 - (GooseDB 1.3.1.1) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-22), 64-bit
(1 行記錄)goosedb=> create table t as select * from generate_series(1,10000000)t(i);
CREATE
goosedb=> \timing on
啟用計時功能.
goosedb=> select count(*) from t group by round(log(i));count_star()
--------------28528466837723284605328460502846028
(8 行記錄)時間:32.029 ms

從1000萬數據的分組性能來看,和DuckDB沒有區別。
打開另一個客戶端

\d\pg18\bin\psql -h 127.0.0.1 -U gooseadmin -d goosedb -p 1234
用戶 gooseadmin 的口令:psql (18beta1, 服務器 16.9)
輸入 "help" 來獲取幫助信息.goosedb=> select count(*) from t;count_star()
--------------10000000
(1 行記錄)goosedb=> select count(*) from '\d\yellow_tripdata_2021-01.parquet';count_star()
--------------1369769
(1 行記錄)

確實能訪問前一個會話的內容,也能訪問客戶端本地的文件。

事務處理
在第一個客戶端建立一個帶有默認時間戳列的表,在另一個客戶端分別啟用和不用事務操作它。
客戶端1

C:\d>\d\pg18\bin\psql -h 127.0.0.1 -U gooseadmin -d goosedb -p 1234
用戶 gooseadmin 的口令:psql (18beta1, 服務器 16.9)
輸入 "help" 來獲取幫助信息.goosedb=> create table t2 (ts timestamp default current_localtimestamp(), a int);
CREATE
goosedb=> insert into t2(a) values(1);
INSERT 0 1
goosedb=> from t2;ts            | a
-------------------------+---2025-09-14 08:18:39.386 | 1
(1 行記錄)goosedb=> select *,current_localtimestamp() c from t2;ts            | a |            c
-------------------------+---+-------------------------2025-09-14 08:18:39.386 | 1 | 2025-09-14 08:20:42.7042025-09-14 08:20:17.458 | 2 | 2025-09-14 08:20:42.704
(2 行記錄)goosedb=> select *,current_localtimestamp() c from t2;ts            | a |            c
-------------------------+---+-------------------------2025-09-14 08:18:39.386 | 1 | 2025-09-14 08:22:00.0492025-09-14 08:20:17.458 | 2 | 2025-09-14 08:22:00.049
(2 行記錄)goosedb=> select *,current_localtimestamp() c from t2;ts            | a |            c
-------------------------+---+-------------------------2025-09-14 08:18:39.386 | 1 | 2025-09-14 08:25:37.7862025-09-14 08:20:17.458 | 2 | 2025-09-14 08:25:37.7862025-09-14 08:21:37.85  | 3 | 2025-09-14 08:25:37.7862025-09-14 08:21:37.85  | 4 | 2025-09-14 08:25:37.786
(4 行記錄)

客戶端2

C:\Users\lt>\d\pg18\bin\psql -h 127.0.0.1 -U gooseadmin -d goosedb -p 1234
用戶 gooseadmin 的口令:psql (18beta1, 服務器 16.9)
輸入 "help" 來獲取幫助信息.goosedb=> from t2;ts            | a
-------------------------+---2025-09-14 08:18:39.386 | 1
(1 行記錄)goosedb=> insert into t2(a) select 2;
INSERT 0 1
goosedb=> BEGIN TRANSACTION;
BEGIN
goosedb=*> insert into t2(a) select 3;
INSERT 0 1
goosedb=*> from t2;ts            | a
-------------------------+---2025-09-14 08:18:39.386 | 12025-09-14 08:20:17.458 | 22025-09-14 08:21:37.85  | 3
(3 行記錄)goosedb=*> select current_localtimestamp() c;c
------------------------2025-09-14 08:21:37.85
(1 行記錄)goosedb=*> insert into t2(a) select 4;
INSERT 0 1
goosedb=*> from t2;ts            | a
-------------------------+---2025-09-14 08:18:39.386 | 12025-09-14 08:20:17.458 | 22025-09-14 08:21:37.85  | 32025-09-14 08:21:37.85  | 4
(4 行記錄)goosedb=*> commit;
COMMIT
goosedb=>

可見默認不啟用事務,插入數據即提交,一個客戶端的修改立刻被另一個看到,而啟用事務后,在顯式提交前,其他客戶端看不到修改。
有一點不太明白,啟用事務后,時間仿佛停止了,插入第一條后又過了若干時間,select current_localtimestamp() c;的值和插入第一條的時間一模一樣。查看DuckDB文檔知道,

current_localtimestamp()
Description Returns the current timestamp with time zone (at the start of the transaction).

它返回的是事務開始時間。

在psql客戶端上,在事務中,提示符前有一個*符號提示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/98224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98224.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

lesson62:JavaScript對象進化:ES2025新特性深度解析與實戰指南

目錄 一、迭代器輔助方法:對象數據處理的優雅革命 1.1 核心方法與語法 1.2 對象屬性處理實戰 1.3 性能與兼容性考量 二、JSON模塊原生支持:對象加載的范式轉變 2.1 靜態與動態導入語法 2.2 與傳統方案的對比優勢 2.3 典型應用場景 三、Set集合增…

設計模式學習筆記(一)

設計模式學習筆記(一) 一般說設計模式都是指面向對象的設計模式,因為面向對象語言可以借助封裝、繼承、多態等特性更好的達到復用性、可拓展性、可維護性。 面向對象一般指以類、對象為組織代碼的基本單元,并將封裝、繼承、多態、…

【CSS】一個自適應大小的父元素,如何讓子元素的寬高比一直是2:1

父元素是自適應大小的容器(比如 width:100%),我們希望子元素 始終保持 2:1 寬高比(比如寬 200px → 高 100px,寬 300px → 高 150px)。 有幾種常見解法:? 方法一:CSS aspect-ratio&…

如何搭建redis集群(docker方式非哨兵)

1、redis的配置文件這里要注意,主從的ip不需要我們去設置,只需要設置主從的密碼就可以,然后就是protect-mode,我設置的是no,一定注意不能設置主從。客戶端要訪問,一定要加# 每個節點的 redis.conf 中 clust…

如何學習VBA_3.3.9:利用“搭積木”思想,快速有效地完成你的代碼

我給VBA的定義:VBA是個人小型自動化處理的有效工具。利用好了,可以大大提高自己的勞動效率,而且可以提高數據處理的準確度。我推出的VBA系列教程共九套和一部VBA漢英手冊,現在已經全部完成,希望大家利用、學習。如果您…

JSP程序設計之輸入/輸出對象 — response對象

response對象1.概述2.實例:response對象方法運用(1)實例一:頁面自動刷新(2)實例二:實現頁面重定向,具體的代碼(3)綜合實例:實現登錄并記錄用戶名1…

Redis 事件驅動框架(ae.c_ae.h)深度解析

Redis 事件驅動框架(ae.c/ae.h)深度解析 之前咱們用 “超市收銀員” 的例子,簡單看懂了 ae 模塊是 Redis 的 “多任務神器”。現在咱們再往深走一層,不用復雜代碼,只拆它的 “核心運作邏輯”—— 搞懂它怎么做到 “一個…

[能源化工] 面向鋰電池RUL預測的開源項目全景速覽

鋰離子電池是新能源汽車、儲能系統及便攜式電子設備的核心能源部件,其剩余使用壽命(Remaining Useful Life,RUL)的準確預測直接關系到設備運行安全、維護成本優化和能源效率提升。RUL預測算法能夠提前量化電池剩余可用時間&#x…

PEFT QLora Deepspeed Zero Stage 3 Offload Trainning

使用 accelerate deepspeed zero stage 3 offload 進行 sft trainning 的自動設備映射: GPU 訓練計算 CPU 存儲 run_peft_qlora_deepspeed_stage3.sh #!/bin/bashexport MAX_JOBS4 export OMP_NUM_THREADS4 export disable_exllamaTrue export CUDA_VISIBLE_DEVICES0,1 expor…

JAVA上門家政維修服務系統源碼微信小程序+微信公眾號+APP+H5

一、功能介紹用戶端:精準分類、支持家政、維修、萬能服務、一口價、報價、線上、各類家政服務、優惠專區、師傅入駐、商家入駐、我的需求、補費明細、我的投訴;師傅端:接單池、消息通知、接單管理、今日訂單、師傅入駐、我的錢包、實名認證&a…

GCKontrol對嵌入式設備FPGA設計流程的高效優化

1 前言FPGA(Field-Programmable Gate Array,現場可編程邏輯門陣列)是一種可編程的半導體器件,因其硬件可重構性、硬件并行計算能力、低延遲和實時性的優勢,廣泛應用于數字電路設計、原型驗證和系統加速等領域。但開發…

DBAPI免費版對比apiSQL免費版

DBAPI簡介 零代碼開發api服務,只需編寫sql,就可以生成http api服務。支持api動態創建,兼容多種數據庫。 適用于BI報表、數據可視化大屏的后端接口快速開發。 旨在為企業數據服務的發布提供完整解決方案 一、DBAPI免費版本支持1個數據源連接支…

CTFHub SSRF通關筆記8:數字IP Bypass 原理詳解與滲透實戰

目錄 一、SSRF 二、數字IP原理 1、IP多進制 (1)十進制整數格式 (Dword / 長整數格式) (2)八進制格式 (Octal IP) (3)十六進制格式 (Hex IP) 2、SSRF繞過 三、滲透實戰 1、打開靶場 2、嘗試127.0.…

C++中雙引號和單引號的區別(全面分析)

我在刷算法題的時候經常遇到,用了 出現警告或者使用" "直接報錯,尤其是在字符串部分(py玩家后遺癥/(ㄒoㄒ)/~~)在詳細了解后總結一下加強記憶。 總的來說在 C 中,雙引號 "" 和單引號 是完全不同…

Ubuntu20.04仿真 |iris四旋翼添加云臺相機詳述

申明: 1、本人使用的是Ubuntu20.04ros1gazeboxtdronepx4的仿真組合 2、為了使傳感器模型和飛機模型解耦合,實現不同平臺對傳感器可直接調用,本系列博文涉及的所有傳感器均不直接添加在相應平臺的sdf當中,而是通過編寫xxx_joint.…

《人工智能AI之機器學習基石》系列 第 16 篇:關聯規則與數據挖掘——“啤酒與尿布”傳奇背后的增長秘密

《人工智能AI之機器學習基石》? 專欄核心理念: 用通俗語言講清楚機器學習的核心原理,強調“洞察+ 技術理解 + 應用連接”,構建一個完整的、富有啟發性的知識體系。 引言:藏在購物車里的“讀心術” 朋友們,歡迎回到我們的AI基石之旅。 在過去的兩次探索中,我們深入…

Spring Boot 的自動配置原理

Spring Boot 的自動配置是其 "約定大于配置" 理念的核心實現,它能自動配置 Spring 應用所需的各種組件,大幅減少手動配置。下面從核心注解、加載流程、條件過濾等方面詳細講解其原理,并結合關鍵源碼說明。一、自動配置的入口&#…

谷歌云平臺(Google Cloud Platform, GCP)介紹(全球領先的云計算服務平臺,為企業和開發者提供包括計算、存儲、數據分析、人工智能、機器學習、網絡和安全等在內的全面云服務)

文章目錄**1. GCP的核心優勢****1.1 全球領先的基礎設施****1.2 強大的數據分析和人工智能能力****1.3 卓越的安全性和合規性****1.4 靈活的定價模式****2. GCP的主要服務****2.1 計算服務****2.2 存儲和數據庫****2.3 網絡服務****2.4 人工智能與大數據****2.5 安全與管理工具…

RISC-V異常機制和異常定位

不少人在調試RISC-V core時,面對異常的出現不知所措,不知道如何定位代碼問題。這里將從RISC-V異常機制以及幾個異常實例學習下。 1 異常機制 1.1 什么是異常 異常是軟件程序員不得不要深入了解的,首先在學習異常機制前,對異常要…

c++中導出函數調用約定為__stdcall類型函數并指定導出函數名稱

開發環境在Visual studio 2022版本下,為防止編譯器重命名函數名稱(會加上8等等亂七八糟的東西),我們對函數名稱進行指定:一、新建.def文件,名稱須與dll名稱相同,并放在與cpp文件相同文件夾下&am…