چرا برای پروژههای کوچک SQLite کافی است
یک عادت بد قدیمی داشتم: هر پروژهی جدید را با بالاآوردن یک Postgres شروع میکردم، حتی اگر در عمل یک ابزار شخصی بود که فقط خودم استفاده میکردم. مدتی است که پیشفرضم را عوض کردهام و با SQLite شروع میکنم؛ تا وقتی واقعاً به چیز بیشتری نیاز پیدا کنم.
چرا SQLite اغلب کافی است
- هیچ سرویس جداگانهای لازم نیست؛ کل دیتابیس یک فایل است.
- بکاپ یعنی
cp data.db data.db.bak. همین. - برای خواندنِ همزمانِ زیاد، سرعتش واقعاً خوب است.
- جابهجا کردن پروژه بین دو ماشین فقط کپی یک فایل است.
یک تنظیم که حتماً انجام بده
حالت پیشفرض نوشتن در SQLite میتواند زیر بار همزمان قفل شود. روشنکردن WAL تفاوت بزرگی میسازد:
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
با WAL، خوانندهها و نویسنده دیگر همدیگر را بلاک نمیکنند و برای بیشتر بارهای کاری سبک، گلوگاه عملاً از بین میرود.
کِی واقعاً باید مهاجرت کنی
نقطهی تصمیم برای من معمولاً یکی از اینهاست:
- چند فرایند جدا میخواهند همزمان بنویسند.
- به دسترسی شبکهای از چند ماشین نیاز داری.
- حجم داده از چند گیگابایت بالاتر میرود و کوئریها سنگین میشوند.
تا قبل از رسیدن به این نقطهها، Postgres فقط یک سرویس اضافه است که باید نگهداریاش کنی.
نکتهی خوب این است که چون از همان اول با SQL استاندارد کار میکنی، مهاجرت بعدی به Postgres هم آنقدرها دردناک نیست.