اتصال به دیتابیس ClickHouse در برنامه‌های NodeJS


روش‌ها و کتابخانه‌های مختلفی برای اتصال به ClickHouse در NodeJS وجود دارد. یکی از این راه‌ها، استفاده از پکیج clickhouse است که در ابتدا، با اجرای دستور زیر، باید آن را نصب کنید:

کپی
npm install @clickhouse/client

پس از آن، کافیست تا اطلاعات مربوط به دیتابیس خود را به متغیرهای محیطی برنامه خود، اضافه کنید؛ به عنوان مثال:

کپی
CLICKHOUSE_HOST=http://rainier.liara.cloud:33273
CLICKHOUSE_USER=root
CLICKHOUSE_PASSWORD=x4y2LJvdFyG5wVO87VbXDrpg

اکنون، می‌توانید متغیرهای محیطی را در برنامه خود خوانده و به دیتابیس متصل شوید؛ در ادامه، یک قطعه کد مثال برای اتصال به دیتابیس برای شما، قرار گرفته است:

کپی
require('dotenv').config();

const { createClient } = require('@clickhouse/client');

const client = createClient({
url: process.env.CLICKHOUSE_HOST,
username: process.env.CLICKHOUSE_USER,
password: process.env.CLICKHOUSE_PASSWORD,
request_timeout: 10000,
});

async function connect() {
try {
  await client.query({
    query: 'SELECT 1',
    format: 'JSONEachRow',
  });

  console.log('ClickHouse connection successful');
} catch (error) {
  console.error('ClickHouse connection failed');
  process.exit(1);
}
}

connect();

استفاده از Connection Pooling

مفهوم Connection pooling به معنای استفاده از یک مجموعه اتصالات از پیش ساخته شده برای اتصال به پایگاه داده است. این تکنیک باعث می‌شود به جای ایجاد و بستن مکرر اتصالات، از اتصالات موجود در مجموعه استفاده شود که کارایی را افزایش می‌دهد.

برای فعال‌سازی قابلیت Connection Pooling در دیتابیس ClickHouse کافیست تا پکیج mysql2 را با استفاده از دستور زیر در پروژه خود نصب کنید:

کپی
npm install mysql2

سپس، می‌توانید مانند قطعه کد زیر، از Connection Pooling استفاده کنید:

کپی
const mysql = require('mysql2/promise');

const dbConfig = {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASS,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
};
const pool = mysql.createPool(dbConfig);


(async () => {
try {
  const connection = await pool.getConnection();
  console.log('Connected to the MySQL server.');
  connection.release();
} catch (error) {
  console.error('Error connecting to the MySQL server:', error);
}
})();