CodeShot

Document Database در مقابل Key-Value Store

Document Database (مثل MongoDB) داده را به‌صورت اسناد JSON/BSON با ساختار تودرتو ذخیره می‌کند و امکان پرس‌وجو بر اساس فیلدهای داخلی سند را می‌دهد؛ Key-Value Store (مثل Redis) داده را صرفاً به‌صورت جفت کلید-مقدار بدون آگاهی از ساختار داخلی مقدار ذخیره می‌کند و دسترسی تقریباً همیشه فقط از طریق کلید است.

ویژگیDocument DatabaseKey-Value Store
ساختار دادهاسناد JSON/BSON تودرتوجفت کلید-مقدار بدون ساختار مشخص
امکان Query روی محتوابله (روی فیلدهای داخلی)معمولاً خیر (فقط بر اساس کلید)
سرعت دسترسیسریعفوق‌سریع (اغلب in-memory)
مثالMongoDB / CouchDBRedis / DynamoDB (حالت ساده)

کِی از Document Database استفاده کنیم؟

وقتی داده شما ساختار نیمه‌ساخت‌یافته و تودرتو دارد (مثل پروفایل کاربر با آدرس‌ها و سفارش‌های متعدد) و نیاز دارید بر اساس فیلدهای داخلی جستجو یا فیلتر کنید، از Document Database استفاده کنید.

کِی از Key-Value Store استفاده کنیم؟

وقتی فقط به دسترسی فوق‌سریع بر اساس یک کلید مشخص نیاز دارید (مثل کش، session state یا شمارنده) و ساختار داخلی مقدار برایتان بی‌اهمیت است، از Key-Value Store استفاده کنید.

مثال Document Database

// MongoDB - query by nested field
db.users.find({ "address.city": "Tehran", "orders.status": "shipped" })

مثال Key-Value Store

# Redis - access purely by key, value is opaque
SET session:8841 '{"userId":203,"expires":1723600000}'
GET session:8841

اشتباه رایج

استفاده از Key-Value Store برای داده‌ای که نیاز به پرس‌وجو بر اساس فیلدهای داخلی دارد (مجبور می‌شوید کل مقدار را از حافظه بخوانید و در کد اپلیکیشن فیلتر کنید که بسیار ناکارآمد است)؛ یا برعکس، استفاده از Document Database برای یک کش ساده که سربار غیرضروری سریالایز/دیسریالایز و ایندکس اضافه می‌کند.

جمع‌بندی

نیاز به جستجو داخل ساختار داده → Document Database؛ فقط دسترسی سریع بر اساس کلید → Key-Value Store.