برای ذخیره و پردازش دادههای جیسان کدام بانکاطلاعاتی را انتخاب کنیم ؟
🚀 مقایسه عملکرد ClickHouse با MongoDB، Elasticsearch، DuckDB و PostgreSQL در پردازش JSON

وبلاگ رسمی کلیک هوس اخیرا (اوایل سال ۲۰۲۵ – بهمن ماه ۱۴۰۳) مقاله ای منتشر کرده است با عنوان :
The billion docs JSON Challenge: ClickHouse vs. MongoDB, Elasticsearch, and more
در این مقاله، عملکرد پایگاههای داده محبوب در پردازش دادههای JSON بررسی شده است. با توجه به اینکه این نوع از دادهها یعنی دادههای JSON در کاربردهای روزانه تیمهای فنی بسیار رایج هستند و نتایج ارائه شده در این گزارش، میتواند در تصمیم گیری تیمهای فنی برای انتخاب ابزار یا دیتابیس مناسب برای ذخیره و پردازش این نوع از دادهها موثر باشد، تصمیم گرفتم خلاصه این مقاله و نتایج آنرا با هم مرور کنیم.
پایگاههای دادهای که در این آزمایش شرکت داشتند عبارتاند از:
۱️⃣ ClickHouse
2️⃣ MongoDB
3️⃣ Elasticsearch
4️⃣ DuckDB
5️⃣ PostgreSQL
✅ برای مقایسه، یک مجموعه دادهی بزرگ شامل یک میلیارد سند JSON استفاده شده است. هدف این بود که مشخص شود هر پایگاه داده چگونه این دادهها را ذخیره و پردازش میکند.
📌 سند JSON نمونه برای آزمایش
یک نمونه سند JSON که در این بنچمارک استفاده شده، بهصورت زیر است که در این بنچمارک یک میلیارد رکورد از این نوع از دیتاست BlueSky درج و پردازش شده است:
{
"data": {
"did": "user_12345",
"kind": "commit",
"commit": {
"collection": "app.bsky.feed.post",
"operation": "create",
"time_us": 1700000000000
}
}
}
این داده شامل:
📌 شناسه کاربر (did)
📌 نوع عملیات (commit)
📌 مجموعه دادهای که تغییر در آن رخ داده است
📌 زمان رویداد به میکروثانیه
🔥 بنچمارک چیست و چگونه انجام شده؟
🔹 در این آزمایش، از ابزار JSONBench استفاده شده است که توسط خود کلیک هوس برای این گزارش توسعه داده شده است (آدرس گیت: https://github.com/ClickHouse/JSONBench) و همانطور که در خود مقاله فوق آمده است سعی شده است تمامی بهینه سازیهای مرتبط با هر یک از دیتابیس های فوق در ذخیره و پردازش دادهها انجام شود که یک مقایسه عادلانه و جوانمردانه باشد.
🔹 علاوه بر بررسی میزان فضای مصرف شده برای ذخیره این حجم از داده، از پنج کوئری تحلیلی هم استفاده شده است که نمونهای از آنرا در این جا می بینید و برای مشاهده لیست کامل کوئری ها به آدرس گیت بالا مراجعه کنید.
🔍 مثال کوئری تحلیلی: شناسایی کاربران فعال و نوع فعالیتهایشان
SELECT
data.commit.collection AS event,
count() AS count,
uniqExact(data.did) AS users
FROM bluesky
WHERE data.kind = 'commit'
AND data.commit.operation = 'create'
GROUP BY event
ORDER BY count DESC;
خلاصه نتایج را در اسلایدر زیر می توانید مشاهده کنید که در همه آنها، کلیک هوس بهینه تر از بقیه عمل کرده است و الستیک سرچ هم در مقام دوم ایستاده است :
🔥 نتیجهگیری
🎯 ClickHouse در تمام سناریوهای آزمایششده از رقبا سریعتر و بهینهتر بود.
📉 فضای ذخیرهسازی موردنیاز آن بهشدت کمتر بود.
⚡ در پردازش JSON، ClickHouse نسبت به سایر پایگاههای داده، عملکردی فراتر از انتظار داشت.
⚠ اما صبر کنید!
🔹 این جمله بالا، نتیجهگیری ClickHouse از اجرای بنچمارک فوق و انتخاب خودش به عنوان برنده بود. اما بهتر است موارد زیر را برای تصمیم نهایی در این خصوص در نظر بگیریم :
✅ اگر قصد ذخیره نتایج فراخوانی API ها، لاگها، و رخدادهایی را داریم که از نوع JSON هستند و قرار نیست آنها را بهروزرسانی کنیم، ClickHouse میتواند گزینهی اول باشد.
✅ اگر با دادههای متنی کار میکنیم و علاوه بر ذخیره دادهها بهصورت JSON، قرار است پردازشهای مختلف متنی هم روی آنها انجام دهیم (مثلاً به ستونهای مختلف یک سند، وزن بیشتری در کوئریهای خود بدهیم)، Elasticsearch همچنان گزینهی اول ما خواهد بود.
✅ اگر پایگاه دادهی اصلی ما PostgreSQL است و یا حجم دیتای ما در حد چند ده گیگابایت است، میتوانیم از امکانات خود PostgreSQL برای ذخیره JSON استفاده کنیم.
✅ اگر قرار است علاوه بر ذخیره دادهها، بهصورت مداوم آنها را ویرایش و بهروزرسانی کنیم و ماهیت دادهها و پردازشهای ما غیر متنی است، MongoDB میتواند بهترین گزینه باشد.
پ.ن : خود مقاله فوق حاوی نکات فنی و مفیدی است و اگر واقعا قصد تصمیم گیری در این خصوص دارید، اصل مقاله را بادقت مطالعه کنید و کوئری های بیشتری را خودتان روی این مجموعه داده ها اجرا و نتایج را مشاهده کنید.