Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

chDB for Bun

يوفّر chDB-bun واجهات ربط FFI (Foreign Function Interface) تجريبية لـ chDB، ما يتيح لك تشغيل استعلامات ClickHouse مباشرةً داخل تطبيقات Bun من دون أي تبعيات خارجية.

التثبيت

تثبيت تبعيات النظام

أولًا، ثبّت تبعيات النظام المطلوبة:

تثبيت libchdb

curl -sL https://lib.chdb.io | bash

تثبيت أدوات البناء

ستحتاج إلى تثبيت gcc أو clang على نظامك:

تثبيت chDB-bun

# التثبيت من مستودع GitHub
bun add github:chdb-io/chdb-bun

# أو استنساخه وبناءه محليًا
git clone https://github.com/chdb-io/chdb-bun.git
cd chdb-bun
bun install
bun run build

الاستخدام

يدعم chDB-bun وضعَي استعلام: الاستعلامات المؤقتة للعمليات التي تُنفَّذ لمرة واحدة، والجلسات المستمرة للحفاظ على حالة قاعدة البيانات.

الاستعلامات المؤقتة

للاستعلامات البسيطة التي تُنفَّذ لمرة واحدة ولا تتطلب حالة محفوظة:

import { query } from 'chdb-bun';

// Basic query
const result = query("SELECT version()", "CSV");
console.log(result); // "23.10.1.1"

// Query with different output formats
const jsonResult = query("SELECT 1 as id, 'Hello' as message", "JSON");
console.log(jsonResult);

// Query with calculations
const mathResult = query("SELECT 2 + 2 as sum, pi() as pi_value", "Pretty");
console.log(mathResult);

// Query system information
const systemInfo = query("SELECT * FROM system.functions LIMIT 5", "CSV");
console.log(systemInfo);

الجلسات المستمرة

للعمليات المعقدة التي تتطلب الحفاظ على الحالة عبر الاستعلامات:

import { Session } from 'chdb-bun';

// Create a session with persistent storage
const sess = new Session('./chdb-bun-tmp');

try {
    // Create a database and table
    sess.query(`
        CREATE DATABASE IF NOT EXISTS mydb;
        CREATE TABLE IF NOT EXISTS mydb.users (
            id UInt32,
            name String,
            email String
        ) ENGINE = MergeTree() ORDER BY id
    `, "CSV");

    // Insert data
    sess.query(`
        INSERT INTO mydb.users VALUES 
        (1, 'Alice', 'alice@example.com'),
        (2, 'Bob', 'bob@example.com'),
        (3, 'Charlie', 'charlie@example.com')
    `, "CSV");

    // Query the data
    const users = sess.query("SELECT * FROM mydb.users ORDER BY id", "JSON");
    console.log("Users:", users);

    // Create and use custom functions
    sess.query("CREATE FUNCTION IF NOT EXISTS hello AS () -> 'Hello chDB'", "CSV");
    const greeting = sess.query("SELECT hello() as message", "Pretty");
    console.log(greeting);

    // Aggregate queries
    const stats = sess.query(`
        SELECT 
            COUNT(*) as total_users,
            MAX(id) as max_id,
            MIN(id) as min_id
        FROM mydb.users
    `, "JSON");
    console.log("Statistics:", stats);

} finally {
    // Always cleanup the session to free resources
    sess.cleanup(); // This deletes the database files
}
Navigation