چند وقتی بود که میدیدم تو بعضی از ویدیوهای یوتیوب تازگیا از #Prisma زیاد تعریف میکنن، سر همین گفتم یه نگاهی بهش بندازم.
اگه با Prisma آشنا نیستین، یک ORM برای Nodejsه (مثل TypeORM، Mongoose، Sequelize و...)
برای تست کردنش یه سرویس خیلی کوچیک CRUD رو با Nodejs بالا اوردم تا بتونم تست هارو انجام بدم.
نتیجه کار به این صورت شد:
برای دیتابیس های SQLی، به نظر مشکلی نداره و میتونه انتخاب خوبی باشه، ولی برای Mongo یک مشکل خیلی بزرگ داره!
اونم اینکه حتی تو حالت Development هم شما رو مجبور میکنه که از Mongodb Atlas استفاده کنید! (در اصل گفته نیاز به Replica Set داره)
https://github.com/prisma/prisma/issues/11860
https://github.com/prisma/prisma/discussions/9994
https://github.com/prisma/prisma/issues/8266
درسته که توی Production بهتره از Replication استفاده کرد (و تو خیلی از پروژه ها یک نیاز اساسیه) ولی اینکه توی Development هم مجبور کنه، به نظرم منطقی نیست!
بعد از 2-3 روز سرچ کردن، تموم روشهایی که برای حل این مشکل پیدا کردم رو تست کردم ولی هیچ کدوم به طور کامل مشکل رو برطرف نکرد!
البته خود Prisma هم تو مستنداتش گفته:
Prisma Client requires a MongoDB replica set. We note this constraint in our MongoDB guides under "Prerequisites". It is possible to set up replica sets locally, but Mongo Atlas is definitely the easiest way to get started.
(روشی که تو مستنداتش برای حالت local پیشنهاد داده مشکل رو به صورت کامل برطرف نمیکنه)
خلاصه که اگه برای پروژههای Nodejsی میخواین یک ORM خوب و مطمئن رو انتخاب کنید: (#نظر_شخصی)
پیشنهاد اول Prisma و پیشنهاد دوم TypeORM (از نظر Syntaxی به نظرم Prisma بهتر کار کرده و استفاده ازش حس بهتری بهتون میده)
پیشنهاد اول Mongoose و پیشنهاد دوم TypeORM
البته Mongoose یه مشکلی داره، اگه بخواین بین populate ها فیلترهای تو در تو بزنین فقط تا 3 سطح رو میتونین از توابع داخلیش استفاده کنید ( ولی خب نمیشه از این نظر بهش ایراد گرفت، چون نباید ساختار رو جوری در نظر گرفت که نیاز به چندین سطح populate باشه)
و در آخر اینکه، به نظرم در آینده نزدیک احتمالا Prisma محبوبتر از چیزی که الان هست میشه (البته امیدوارم زودتر مشکلی که توضیح دادم رو برای Mongo برطرف کنه)