利用DeepSeek實現服務器客戶端模式的DuckDB原型

在網上看到韓國公司開發的一款GooseDB,DuckDB? 的功能擴展分支,具有服務器/客戶端、多會話和并發寫入支持,使用 PostgreSQL 有線協議,但它是Freeware而不是開源,所以讓DeepSeek實現之。
首先把readme頁面發給他翻譯,并讓他據此寫一個設計方案,看上去頭頭是道。

GooseDB:為協同數據分析而強化的DuckDB
GooseDB是基于DuckDB的強大功能擴展版本,旨在將協同數據分析提升至新高度。
在繼承DuckDB卓越速度與分析能力的基礎上,GooseDB針對現代數據工作流引入了關鍵增強功能,
包括服務器/客戶端架構、多會話支持和并發寫入能力,同時全面兼容強大的PostgreSQL有線協議。

核心特性:
? 服務器/客戶端架構:GooseDB將DuckDB升級為真正的客戶端-服務器數據庫,允許多用戶同時連接并交互同一數據庫實例,
為協同數據探索與分析開辟了新可能。
? 多會話支持:通過支持多并發會話,團隊可并行處理同一數據,優化工作流程并促進協作。
? 并發寫入能力:與原生DuckDB不同,GooseDB支持并發寫入,在保持高性能的同時實現實時數據更新與注入,
這對需要持續數據更新的應用至關重要。
? PostgreSQL有線協議:采用廣泛使用的PostgreSQL有線協議,確保與現有數據庫工具、客戶端及庫生態系統的無縫集成,
降低了熟悉PostgreSQL用戶的學習成本。
? 增強的性能:保留DuckDB在分析查詢方面的卓越性能,即使處理復雜數據集也能提供極速響應。
? 與現有DuckDB生態無縫集成:保持與現有DuckDB API及數據格式的兼容性,用戶可輕松遷移現有項目。

使用優勢:
? 強化協作:支持團隊實時協同進行數據分析項目。
? 改進數據管理:通過并發寫入支持簡化數據注入與更新流程。
? 簡化集成:利用PostgreSQL協議與現有工具無縫對接。
? 提升效率:借助更快的查詢性能和協作工作流提高生產力。
? 可擴展性:通過改進的并發與服務器架構處理更大數據集和復雜工作負載。

適用場景:
? 協同數據科學:助力數據科學團隊共同開展數據探索、模型開發與分析。
? 實時數據分析:為需要即時洞察的應用提供實時數據注入與分析能力。
? 商業智能:為業務用戶提供強大的協同數據分析與報告平臺。
? 數據倉庫:構建支持并發寫入和大數據集的高性能數據倉庫。


軟件設計方案(基于技術文檔特性提煉)

1. 架構設計

  • 客戶端-服務器模型:采用多線程服務器架構,通過TCP/IP協議監聽客戶端連接,使用PostgreSQL有線協議實現通信規范化
  • 連接池管理:實現會話管理器(Session Manager)維護多用戶連接狀態,支持會話隔離和資源分配
  • 并發控制層
    • 寫操作:通過行級鎖+多版本并發控制(MVCC)實現并發寫入與數據一致性
    • 讀操作:支持無鎖快照讀,兼容DuckDB原有向量化執行引擎

2. 核心模塊

┌─────────────────────────────────┐  
│          Client Applications    │  
└─────────────────────────────────┘  │  
┌─────────────────────────────────┐  
│   PostgreSQL Wire Protocol Layer│  
│   (協議解析/消息序列化)         │  
└─────────────────────────────────┘  │  
┌─────────────────────────────────┐  
│   Session Manager              │  
│   (會話狀態/查詢路由)           │  
└─────────────────────────────────┘  │  
┌─────────────────────────────────┐  
│   Concurrency Controller       │  
│   (鎖管理/MVCC協調)            │  
└─────────────────────────────────┘  │  
┌─────────────────────────────────┐  
│   DuckDB Execution Engine      │  
│   (優化器/向量化執行)           │  
└─────────────────────────────────┘  │  
┌─────────────────────────────────┐  
│   Storage Layer                │  
│   (數據持久化/索引管理)         │  
└─────────────────────────────────┘  

3. 關鍵技術實現

  • 協議適配層:基于libpq或自定義實現PostgreSQL報文解析,兼容常用SQL命令和擴展命令
  • 內存管理:擴展DuckDB的內存分配機制,支持多會話內存隔離與全局內存配額
  • 持久化策略
    • 數據文件格式保持與DuckDB兼容
    • 預寫日志(WAL)支持并發寫入崩潰恢復
  • 擴展語法支持:增加服務端專屬命令(如SHOW_SESSIONS)并通過協議層封裝傳輸

4. 性能優化方向

  • 連接建立:采用異步I/O模型處理高并發連接請求
  • 查詢處理:復用DuckDB向量化執行引擎,增加分布式查詢規劃器擴展
  • 緩存機制:實現服務端結果集緩存,支持重復查詢快速響應

5. 安全設計

  • 基于PostgreSQL協議的SSL加密傳輸
  • 角色權限管理系統(兼容DuckDB原有權限模型)
  • SQL注入防護通過協議層參數化查詢實現

此設計方案聚焦協議兼容性、并發擴展和生態集成三大核心目標,在保持DuckDB性能優勢的同時實現服務化能力升級。

于是,先讓他實現第一部分

請用duckdb C API實現一個Demo。先實現客戶端-服務器模型:采用多線程服務器架構,通過TCP/IP協議監聽客戶端連接,使用PostgreSQL有線協議實現通信規范化,不做別的

他給出了一個c服務端程序和一個python客戶端程序。我的機器安裝psycopg2失敗,于是直接用postgresql客戶端psql連接。

他的知識庫里的duckdb版本較舊,說是0.9.0+, 其實有的數據結構還是更舊的。
比如duckdb_result結構,libduckdb 0.9.2的定義是這樣的:

typedef struct {
#if DUCKDB_API_VERSION < DUCKDB_API_0_3_2idx_t column_count;idx_t row_count;idx_t rows_changed;duckdb_column *columns;char *error_message;
#else// deprecated, use duckdb_column_countidx_t __deprecated_column_count;// deprecated, use duckdb_row_countidx_t __deprecated_row_count;// deprecated, use duckdb_rows_changedidx_t __deprecated_rows_changed;// deprecated, use duckdb_column_ family of functionsduckdb_column *__deprecated_columns;// deprecated, use duckdb_result_errorchar *__deprecated_error_message;
#endifvoid *internal_data;
} duckdb_result;

而libduckdb 1.3.2變成了這樣:

//! A query result consists of a pointer to its internal data.
//! Must be freed with 'duckdb_destroy_result'.
typedef struct {// deprecated, use duckdb_column_countidx_t deprecated_column_count;// deprecated, use duckdb_row_countidx_t deprecated_row_count;// deprecated, use duckdb_rows_changedidx_t deprecated_rows_changed;// deprecated, use duckdb_column_*-family of functionsduckdb_column *deprecated_columns;// deprecated, use duckdb_result_errorchar *deprecated_error_message;void *internal_data;
} duckdb_result;

而他就引用了column_count、row_count這些成員。于是替換成了帶deprecated_前綴的版本。編譯通過了。
服務器端

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:libduckdb
gcc goose2.c -o goose2 -I libduckdb -L libduckdb -lduckdb -lpthread
root@6ae32a5ffcde:/par# ./goose2
GooseDB server listening on port 5432
You can connect using: psql -h 127.0.0.1 -U any_user -d any_db -p 5432
Note: Username and database name are logged but not used for authentication
New connection from 127.0.0.1:34146
Client connected on socket 4

客戶端

psql -h 127.0.0.1 -U any_user -d any_db -p 5432
^C

只能顯示連接,而不能取到數據。看來需要進一步研究。
經過幾輪交互,現在進展到這一步了。

服務端, 其中對應psql連接,PGSSLMODE=disable前是127.0.0.1:58912,后是127.0.0.1:39740

root@6ae32a5ffcde:/par# ./goose3
GooseDB server listening on port 5432
You can connect using: psql -h 127.0.0.1 -U any_user -d any_db -p 5432
Note: Username and database name are logged but not used for authentication
New connection from 127.0.0.1:58912
Client connected on socket 4
已打開DuckDB數據庫
已連接DuckDB數據庫
Received startup message, length: 8
已讀取啟動消息
New connection from 127.0.0.1:39740
Client connected on socket 5
已打開DuckDB數據庫
已連接DuckDB數據庫
Received startup message, length: 87
Connection parameters: user=any_user, database=any_db
已讀取啟動消息

客戶端

psql -h 127.0.0.1 -U any_user -d any_db -p 5432
psql: error: connection to server at "127.0.0.1", port 5432 failed: received invalid response to SSL negotiation:export PGSSLMODE=disable
psql -h 127.0.0.1 -U any_user -d any_db -p 5432
psql: error: connection to server at "127.0.0.1", port 5432 failed: message contents do not agree with length in message type "S"
lost synchronization with server: got message type "i", length 1869479985

又改了一版

gcc goose4.c -o goose4 -I libduckdb -L libduckdb -lduckdb -lpthread
./goose4
GooseDB server listening on port 5432
You can connect using: psql -h 127.0.0.1 -U any_user -d any_db -p 5432
Note: Username and database name are logged but not used for authentication
New connection from 127.0.0.1:39146
Client connected on socket 4
已打開DuckDB數據庫
已連接DuckDB數據庫
Received startup message, length: 79
Received normal startup message
Connection parameters: user=, database=
已讀取啟動消息
Message too large: 4207 bytes, buffer size: 4096
Unknown message type: e

客戶端

export PGSSLMODE=disable
psql -h 127.0.0.1 -U abc -d def -p 5432
psql (15.13 (Debian 15.13-0+deb12u1), server 14.0)
Type "help" for help.def=> select 1 a;

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

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

相關文章

麥當勞APP逆向

版本 V 7.0.17.0反調試 梆梆企業加固 frida反調試部分代碼 headers {"biz_scenario": "500","biz_from": "1004","User-Agent": "mcdonald_Android/7.0.17.0 (Android)","ct": "102","…

大數據畢業設計選題推薦-基于大數據的結核病數據可視化分析系統-Hadoop-Spark-數據可視化-BigData

?作者主頁&#xff1a;IT畢設夢工廠? 個人簡介&#xff1a;曾從事計算機專業培訓教學&#xff0c;擅長Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦?…

Vue3 視頻播放器完整指南 – @videojs-player/vue 從入門到精通

前言 在 Vue 3 生態中&#xff0c;視頻播放功能是許多應用的核心需求。videojs-player/vue 是一個專門為 Vue 3 設計的視頻播放器組件&#xff0c;基于成熟的 Video.js 庫構建&#xff0c;提供了簡單而強大的視頻播放解決方案。 主要特性 Vue 3 組件化&#xff1a;原生 Vue …

【靶場練習】--DVWA第一關Brute Force(暴力破解)全難度分析

注意&#xff0c;這一關必須要使用Burpsuite來抓包 目錄Low1.抓包2.發送到爆破模塊3.選擇爆破模式爆破模式介紹4.添加載荷5.添加字典6.爆破查看查看源碼Medium查看源碼High1.抓包2.在bp的extensions中找到CSRF Token Tracker&#xff0c;并安裝3.構造字典4.成功爆破查看源碼Imp…

Java語言——排序算法

一、基本概念排序&#xff1a;將n個數字按一定順序排列&#xff08;比如&#xff1a;升序&#xff0c;或者降序&#xff09; ^內部排序 &#xff1a;若整個排序過程不需要訪問外存便能完成&#xff0c;則稱此類排序問題為內部排序 ^外部排序&#xff1a;若參加排序的記錄數量很…

【Linux】人事檔案——用戶及組管理

目錄 1 用戶及組管理 2?用戶及用戶組管理命令 2.1 useradd&#xff1a;建立用戶 useradd命令用于建立用戶&#xff0c;該 2.2 passwd&#xff1a;更改用戶密碼 2.3 usermod&#xff1a;更改用戶信息 2.4 groupadd&#xff1a;建立用戶組 2.5 finger&#xff1a;查找并顯…

給定一個有序的正數數組arr和一個正數range,如果可以自由選擇arr中的數字,想累加得 到 1~range 范圍上所有的數,返回arr最少還缺幾個數。

給定一個有序的正數數組arr和一個正數range&#xff0c;如果可以自由選擇arr中的數字&#xff0c;想累加得 到 1~range 范圍上所有的數&#xff0c;返回arr最少還缺幾個數。 #include <iostream> #include <vector>using namespace std;void func1(std::vector<…

BigemapPro快速添加歷史影像(Arcgis衛星地圖歷史地圖)

這是Esri(Arcgis)官方提供的歷史影像數據&#xff0c;可放心使用。https://livingatlas.arcgis.com/wayback如何快速添加到Bigemap Pro軟件里&#xff0c;詳細步驟如下&#xff1a;復制下面的文本保存為 配置.bmmap,然后拖入軟件就可以了{"BmLayerVersion":"1.0…

[免費]基于Python的Django醫院管理系統【論文+源碼+SQL腳本】

大家好&#xff0c;我是python222_小鋒老師&#xff0c;看到一個不錯的基于Python的Django醫院管理系統&#xff0c;分享下哈。 項目視頻演示 https://www.bilibili.com/video/BV1iPH8zmEut/ 項目介紹 隨著人民生活水平日益增長&#xff0c;科技日益發達的今天&#xff0c;…

MyBatis 從入門到精通(第三篇)—— 動態 SQL、關聯查詢與查詢緩存

在前兩篇博客中&#xff0c;我們掌握了 MyBatis 的基礎搭建、核心架構與 Mapper 代理開發&#xff0c;能應對簡單的單表 CRUD 場景。但實際項目中&#xff0c;業務往往更復雜 —— 比如 “多條件動態查詢”“員工與部門的關聯查詢”“高頻查詢的性能優化” 等。本篇將聚焦 MyBa…

Linux內核中IPv4的BEET模式封裝機制解析

引言 在Linux網絡棧中,IPSec提供了網絡層的數據加密和認證服務。傳統的IPSec支持兩種模式:傳輸模式(Transport Mode)和隧道模式(Tunnel Mode)。然而,這兩種模式各有優缺點:傳輸模式開銷小但無法隱藏原始IP頭;隧道模式提供完全封裝但增加了開銷。 BEET(Bound End-to…

設計模式——創建型模式

什么是設計模式&#xff1f;設計模式是軟件工程中解決常見問題的經典方案&#xff0c;它們代表了最佳實踐和經驗總結。通過使用設計模式&#xff0c;開發者可以創建更加靈活、可維護和可擴展的代碼結構。設計模式不是具體的代碼實現&#xff0c;而是針對特定問題的通用解決方案…

我愛學算法之—— 位運算(上)

常見位運算 對于位運算&#xff1a; &&#xff1a;按位與&#xff0c;有0則0。 |&#xff1a;按位或&#xff0c;有1則1。 ^&#xff1a;按位異或&#xff0c;相同為0、不同為1。&#xff08;無進位相加&#xff09; ~&#xff1a;二進制位按位取反。 對于位運算的常見使用…

智能語音系統

智能語音系統通過技術手段讓機器能夠“聽懂”、“理解”并“回應”人類的語音&#xff0c;是實現人機交互的關鍵技術之一。下面我將為你梳理智能語音系統的核心組成部分、工作原理、應用場景以及面臨的挑戰。&#x1f9e0; 核心技術與工作原理智能語音系統之所以能實現人機交互…

水泵自動化遠程監測與控制的御控物聯網解決方案

一、行業背景與痛點分析水泵作為工業生產、農業灌溉、城市供水等領域的核心設備&#xff0c;其運行效率直接影響系統穩定性與運營成本。然而&#xff0c;傳統管理模式存在三大核心痛點&#xff1a;人工巡檢低效&#xff1a;偏遠地區水泵分布分散&#xff0c;依賴人工定期巡檢&a…

Python實現點云法向量各種方向設定

本次我們分享點云法向量定向的四種方法&#xff0c;分別是XYZ軸、相機位置、最小生成樹(MST)和質心設定方法。通常出現在三維點云處理、三維重建、計算機視覺或圖形學中&#xff0c;需要估計點云的法向量方向。它們的核心任務是&#xff1a;在已知點坐標和局部幾何結構&#xf…

騰訊云智能體開發平臺

提供全球領先的云計算服務騰訊云&#xff0c;騰訊集團傾力打造的云計算品牌&#xff0c;面向全世界各個國家和地區的政府機構、企業組織和個人開發者&#xff0c;提供全球領先的云計算、大數據、人工智能等技術產品與服務&#xff0c;以卓越的科技能力打造豐富的行業解決方案&a…

css flex布局,設置flex-wrap:wrap換行后,如何保證子節點被內容撐高后,每一行的子節點高度一致。

flex布局&#xff0c;設置flex-wrap&#xff1a;wrap換行后&#xff0c;如何保證子節點被內容撐高后&#xff0c;每一行的子節點高度一致。核心&#xff1a;需要設置父節點和子節點&#xff1a;align-items: stretch&#xff0c;兩個都要。代碼&#xff1a;<div class"…

Nginx_Tomcat綜合案例

要求 需求&#xff1a;通過 nginx 來代理兩個 tomcat 服務器&#xff08;反向代理&#xff09;&#xff0c;然后通過 https://www.nginx.com 來進行訪問。主機名IP軟件nginx192.168.30.10nginxtomcat1192.168.30.11java&#xff0c;tomcattomcat2192.168.30.12java&#xff0c;…

【Vue2手錄12】單文件組件SFC

一、知識回顧-Vue2項目基礎操作與環境配置 1.1 項目啟動 項目打開方式&#xff1a;直接將項目文件夾&#xff08;如my-app&#xff09;拖拽到 Visual Studio Code&#xff08;推薦編輯器&#xff09;&#xff0c;避免拖拽父級文件夾&#xff0c;防止路徑混亂。啟動命令&#xf…