Document Database در مقابل Key-Value Store
Document Database (مثل MongoDB) داده را بهصورت اسناد JSON/BSON با ساختار تودرتو ذخیره میکند و امکان پرسوجو بر اساس فیلدهای داخلی سند را میدهد؛ Key-Value Store (مثل Redis) داده را صرفاً بهصورت جفت کلید-مقدار بدون آگاهی از ساختار داخلی مقدار ذخیره میکند و دسترسی تقریباً همیشه فقط از طریق کلید است.
| ویژگی | Document Database | Key-Value Store |
|---|---|---|
| ساختار داده | اسناد JSON/BSON تودرتو | جفت کلید-مقدار بدون ساختار مشخص |
| امکان Query روی محتوا | بله (روی فیلدهای داخلی) | معمولاً خیر (فقط بر اساس کلید) |
| سرعت دسترسی | سریع | فوقسریع (اغلب in-memory) |
| مثال | MongoDB / CouchDB | Redis / 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.
