SQL یا NoSQL؟
انتخاب دیتابیس: مقایسه SQL و انواع NoSQL (Key-Value، Document، Column، Graph) و راهنمای تصمیمگیری
جنگ بزرگ دیتابیسها
اولین تصمیم بزرگ هر سیستم: کدام دیتابیس؟ پاسخ درست: «بستگی دارد» — اما به چه؟
SQL (رابطهای)
PostgreSQL، MySQL، SQL Server — جداول با اسکیمای ثابت:
- مزایا: ACID کامل، تراکنش، Join قدرتمند، بلوغ ۴۰ ساله
- عیوب: شاردینگ افقی سخت، اسکیمای صلب، مقیاس عمودیمحور
انواع NoSQL
| نوع | مثال | مدل | کاربرد |
|---|---|---|---|
| Key-Value | Redis، DynamoDB | کلید → مقدار | کش، Session، شمارنده |
| Document | MongoDB | JSON انعطافپذیر | محتوا، پروفایل، کاتالوگ |
| Column-Family | Cassandra، HBase | ستونهای پراکنده | سری زمانی، لاگ عظیم |
| Graph | Neo4j | گره + یال | شبکه اجتماعی، توصیهگر |
مقایسه کلیدی
| معیار | SQL | NoSQL |
|---|---|---|
| اسکیما | ثابت و سختگیر | انعطافپذیر ✓ |
| تراکنش ACID | عالی ✓✓ | متنوع (اغلب پایینتر) |
| مقیاس افقی | سخت | بومی ✓✓ |
| Join/کوئری پیچیده | قدرتمند ✓✓ | محدود |
| داده مرتبط پیچیده | طبیعی ✓ | دستوپاگیر |
راهنمای تصمیم
- داده شدیداً مرتبط + تراکنش مهم؟ (بانک، سفارش) ← SQL
- اسکیما متغیر/تکاملپذیر؟ ← Document
- خواندن/نوشتن فوقسریع ساده؟ ← Key-Value
- نوشتن عظیم سری زمانی؟ ← Column
- روابط شبکهای عمیق؟ ← Graph
واقعیت مدرن: Polyglot
سیستمهای بزرگ از چند دیتابیس همزمان استفاده میکنند:
فروشگاه آنلاین:
- PostgreSQL: سفارشها و پرداخت (ACID!)
- Redis: سبد خرید و کش
- Elasticsearch: جستجوی محصول
- S3: عکسها
هر ابزار برای کار خودش — نه «یک دیتابیس برای همه»!
نکته مصاحبه: هرگز «فقط NoSQL چون مقیاسپذیر است» نگویید! اول نیازمندی داده را تحلیل کنید: رابطهها؟ تراکنش؟ اسکیما؟ بعد انتخاب با دلیل.
جمعبندی
- SQL: ACID و رابطه — تراکنشمحور
- NoSQL چهار خانواده: KV، Document، Column، Graph
- تصمیم = تحلیل داده و الگوی دسترسی
- Polyglot: چند دیتابیس در یک سیستم، طبیعی است
این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.