در دنیای پایگاه دادههای تحلیلی، افزایش حجم داده و نیاز به مقیاسپذیری بالا باعث شده است که معماریهای توپولوژیشده و جداشده بهویژه معماری Shared-Nothing و جداسازی منابع محاسباتی (Compute) از ذخیرهسازی (Storage) اهمیت پیدا کنند. ClickHouse بهصورت پیشفرض چنین معماریای ندارد، اما با تنظیمات مناسب میتوان از مزایای آن بهرهمند شد.
در حالت سنتی، در اکثر پایگاه دادهها محاسبات و ذخیرهسازی روی همان نود انجام میشود. این موضوع محدودیتهای زیر را ایجاد میکند:
با جداسازی Storage و Compute، میتوان:
معماری Shared-Nothing به معنای این است که هر نود بهصورت مستقل عمل میکند و منابع (CPU، RAM، Disk) با دیگر نودها به اشتراک گذاشته نمیشود. مزایای این معماری عبارتاند از:
در ClickHouse، برای پیادهسازی این معماری باید Storage و Compute را جدا کنیم و از سرویسهایی مانند S3 برای ذخیرهسازی استفاده کنیم.

ClickHouse با استفاده از S3BackedMergeTree اجازه میدهد دادهها را روی S3 ذخیره کنیم و از MergeTree برای پردازش دادهها استفاده کنیم. مراحل کلی به شرح زیر است:
ابتدا فایل کانفیگ storage_config.xml را در مسیر /etc/clickhouse-server/config.d/ ایجاد کنید:
<clickhouse>
<storage_configuration>
<disks>
<s3_disk>
<type>s3</type>
<endpoint>$BUCKET</endpoint>
<access_key_id>$ACCESS_KEY_ID</access_key_id>
<secret_access_key>$SECRET_ACCESS_KEY</secret_access_key>
<metadata_path>/var/lib/clickhouse/disks/s3_disk/</metadata_path>
</s3_disk>
<s3_cache>
<type>cache</type>
<disk>s3_disk</disk>
<path>/var/lib/clickhouse/disks/s3_cache/</path>
<max_size>10Gi</max_size>
</s3_cache>
</disks>
<policies>
<s3_main>
<volumes>
<main>
<disk>s3_disk</disk>
</main>
</volumes>
</s3_main>
</policies>
</storage_configuration>
</clickhouse>
سپس مالکیت فایل را به کاربر ClickHouse تغییر دهید و سرویس را ریاستارت کنید:
chown clickhouse:clickhouse /etc/clickhouse-server/config.d/storage_config.xml
service clickhouse-server restart
برای اطمینان از عملکرد دیسک S3، یک جدول ایجاد کنید:
CREATE TABLE my_s3_table
(
id UInt64,
column1 String
)
ENGINE = MergeTree
ORDER BY id
SETTINGS storage_policy = 's3_main';
INSERT INTO my_s3_table (id, column1) VALUES (1,'abc'),(2,'xyz');
SELECT * FROM my_s3_table;
پیادهسازی معماری Shared-Nothing و جداسازی Compute از Storage در ClickHouse:
این معماری برای محیطهای ابری، پایگاههای داده بزرگ و سازمانهایی که نیاز به بهینهسازی هزینه و منابع دارند، بسیار مناسب است.