فرض کن دفتر یک بانک را میچینی. پول را نمیشود در پوشه شلوول گذاشت: هر برداشت باید به یک حساب وصل باشد، و دو نفر همزمان نتوانند همان موجودی را دوبار بردارند. برای این کار یک دفتر ستونی با قاعده میسازی. اسم این دفتر در نرمافزار RDBMS است — همان خانواده SQL.
اما همه چیز پول نیست. آخرین جای پیک را فقط با شماره پیک برمیداری. کاتالوگ کالا هر هفته فیلد تازه میگیرد. پیامها مثل سیل میآیند و فقط با کلید گفتگو خوانده میشوند. برای اینها دفتر ستونی دستوپاگیر است. خانوادهشان را NoSQL مینامند.

پیشفرض، و وقتی از آن جدا میشوی
قاعده ساده است: اول SQL. NoSQL را وقتی میآوری که یک دلیل مشخص داشته باشی — مقیاس نوشتن عظیم، مدل داده خاص، یا Schema که مدام عوض میشود. محبوبیت ابزار دلیل نیست. اگر قاطی کنی، یا JOIN را جایی میخواهی که وجود ندارد، یا تراکنش پول را به جایی میسپاری که قولش را نمیدهد.
چهار خانواده NoSQL — هر کدام یک شغل
NoSQL یک ابزار نیست. چهار جور کمد جداست. کمد را از روی کاری که داده انجام میدهد انتخاب میکنی، نه از روی اسم مد روز.
| نوع | نمونه | شغلش |
|---|---|---|
| Key-Value | Redis, DynamoDB | جعبه را فقط با شماره قفل برمیداری: Cache، session، شمارنده، آخرین وضعیت. |
| Document | MongoDB | یک پوشه خودکفا با برگههای متغیر: پروفایل، کاتالوگ. Schema سفت نمیخواهد. |
| Wide-Column | Cassandra, HBase | نوشتن سیلآسا و سریزمانی: پیام، لاگ، لوکیشن. Horizontal Scaling بومی است. |
| Graph | Neo4j | نقشه رابطه: چه کسی که را میشناسد، تقلب، پیشنهادگر. پیمایش عمیق، نه جدول پهن. |
چطور انتخاب میکنی؟
سؤال این نیست «کدام دیتابیس بهتر است؟» سؤال این است این داده چه قولی میخواهد، و با چه کلیدی خوانده میشود.
- سفارش، پرداخت، موجودی → SQL. ACID را مفت میگیری؛ اینجا آزمایشگاه NoSQL نیست.
- نوشتن بیامان، کوئری ساده و ازپیشمعلوم → Wide-Column.
- دسترسی فقط-با-کلید و Latency زیر میلیثانیه → Key-Value در RAM.
- الگوی رایج سیستم بزرگ: Polyglot — هر داده در ابزار خودش: سفارش در PostgreSQL، session در Redis، پیام در Cassandra، جستجو در Elasticsearch.
به زبان ساده
دفتر بانک برای پول SQL است؛ کمدهای دیگر برای کار دیگر. NoSQL را با دلیل میآوری، نه با مد.
مثال واقعی
سفارش و پرداخت در SQL میروند چون تراکنش مهم است؛ آخرین جای پیک در Redis میرود چون فقط با شماره پیک خوانده میشود.