Sequelize dhidi ya Prisma
Mwanzo
Hivi sasa katika eBay, ninahamisha zana zetu za ndani kutoka kutumia MongoDB kwenda Postgres. Mradi ambao ni mgumu sana lakini ninafurahia kuukabili moja kwa moja. Wakati wa kufanya utafiti, nilibaini kwamba kwa msimbo wetu, kutumia ORM kungekuwa bora zaidi kwa sababu msimbo tayari ulikuwa umebuniwa kutumia Mongoose. Lakini sasa changamoto ni, ni ORM gani itakuwa bora kwa msimbo wetu? Katika blogu hii, nitaingia kwa kina kwenye swali hilo. Tafadhali tambua kwamba siwezi kufichua kila kitu katika blogu hii kutokana na asili ya mawasiliano yangu na mwajiri wangu.
Mahitaji
Baada ya uchambuzi makini wa mahitaji ya mradi, niliweka vigezo muhimu vifuatavyo ambavyo suluhisho lolote la ORM lingehitaji kutimiza:
- Iwe kifurushi cha JavaScript; kwa sababu sehemu kubwa ya msimbo imeandikwa kwa JavaScript
- Lazima iunge mkono Postgres na vipengele vyake vingi
- Utendaji wake lazima uwe angalau sawa au bora kuliko Mongoose
- Lazima iwe chanzo huria na inayodumishwa
ORMs
Baada ya kufanya utafiti mwingi, nilibaini kwamba ORMs tatu bora zinazolingana na mahitaji ni: Sequelize, Prisma, & TypeORM. Hatimaye niliamua kuangazia tu Sequelize na Prisma kwa sababu sikuwa na muda wa kupima kikamilifu ORM tatu tofauti kutokana na tarehe za mwisho.
Mazingira ya Upimaji
Kwa mazingira yangu ya upimaji, niliendesha Postgres kupitia Docker. Nilichukua seti yetu kubwa zaidi na yenye ugumu zaidi wa data, nikaibadilisha kutoka muundo wa hati kwenda muundo wa jedwali, na nikaiongeza kwenye mfano wangu wa ndani wa Postgres. Nilibadilisha seti ya data kwa kutumia safu wima, mahusiano ya mmoja-kwa-mmoja, mahusiano ya mmoja-kwa-wengi, na baadhi ya safu wima za JSONB.
Kuanzia hapo, ningeandika msimbo wa JavaScript uliotumia ORM hiyo maalum na kupima:
- Ilichukua muda gani kuunda ingizo
- Ilichukua muda gani kusasisha ingizo
- Ilichukua muda gani kusasisha ingizo lililowekwa ndani (uhusiano na/au jozi ya thamani-funguo katika JSON)
- Ilichukua muda gani kufuta ingizo
- Ilichukua muda gani kuuliza/kupata ingizo
Niliunda hazina kwa kila mazingira ya upimaji ya ORM. Ningependa sana kushiriki hazina hizi lakini kisheria zinamilikiwa na eBay, kwa hiyo siwezi kuzishiriki.
Matokeo
Karibu tarehe 15 Mei, 2023, niliamua kwamba Sequelize ilikuwa ORM bora zaidi kwa kesi yetu ya matumizi na kwamba ndiyo ingekuwa ORM itakayotumika kwa uhamiaji wetu kutoka MongoDB kwenda Postgres. Hatimaye, nilichagua Sequelize kwa sababu:
- Ilikuwa “chanzo huria kweli” na haikudumishwa na kampuni changa yenye ufadhili.
- Iliunga mkono vipengele vingi vya Postgres.
- Ilikuwa na utendaji mzuri, hasa ikilinganishwa na Prisma.
- Ina nyaraka nzuri, ingawa si zilizoandikwa vizuri kama nyaraka za Prisma.
Nilikaa na Sequelize, lakini pia nilitengeneza orodha ya faida na hasara kwa kila ORM niliyopima kwa matumaini kwamba itawasaidia watu kubaini vizuri zaidi kama Sequelize au Prisma inaweza kufanya kazi kwa kesi yenu ya matumizi.
Faida na Hasara za Sequelize
Faida:
- Ina kazi ya sync() ambayo huunda kiotomatiki na kushughulikia majedwali kwa ajili yako
- Inaweza kushughulikia uunganishaji changamano (data iliyowekwa ndani)
- Inaunga mkono chaguo nyingi za kuchuja (kama vile Regex)
- Uwakilishi wa muundo wa mfano/hati hufanywa katika JavaScript ghafi kwa kutumia madarasa ambayo yanaweza kubinafsishwa sana.
- Sequelize hushughulikia miunganisho kwa hifadhidata(ziwa) lako ulilochagua.
- Sequelize inaunga mkono miunganisho mingi ya kusoma
- Inaunga mkono hoja ghafi za SQL.
- Kufikia tarehe 15 Mei, 2023:
- Kwenye NPM, Sequelize ilisasishwa mwisho “siku 14 zilizopita” na hupata upakuaji wa kila wiki 1,505,835.
- Kwenye GitHub, Sequelize ilisasishwa mwisho “jana”, ina Forks 4.2k, na Stars 27.9k.
- Sequelize ina leseni ya MIT na imekuwa chanzo huria kwa zaidi ya miaka 10. Hivyo kuna uwezekano mkubwa itaendelea kuwa chanzo huria kwa muda unaoonekana.
Hasara:
- Uwakilishi wa muundo wa mfano/hati unaweza kuwa mgumu sana na uliovimba kupita kiasi. Kwa mfano, uwakilishi wa Mongoose wa seti yetu kubwa ya data ulikuwa takriban mistari 262 (ikiwa ni pamoja na nafasi). Seti hiyo hiyo ya data iliyowakilishwa kupitia Sequelize ilikuwa mistari 564 (ikiwa ni pamoja na nafasi).
- Sintaksia ya Sequelize inakuwa ya kutatanisha sana na changamano katika baadhi ya hali.
- Kuhamisha hifadhidata yako (kuibadilisha) ni kazi ya usumbufu mkubwa. Unaweza kutumia sequelize-cli kutengeneza skripti za kiolezo cha uhamiaji cha JavaScript. LAKINI, inaonekana hali hii ni ile ile karibu katika ORMs zote. Kuhamisha katika hifadhidata ya uhusiano si rahisi katika hali nyingi.
- Nyaraka si nzuri sana. Zimeboreshwa lakini bado zinahitaji kazi. Lakini kwa zana kama ChatGPT, hili si tatizo kubwa kama lilivyokuwa zamani kwa sababu ChatGPT ina uelewa mzuri sana wa Sequelize, kwa uwezekano mkubwa kutokana na Sequelize kuwepo kwa muongo mmoja.
- Sequelize si nyeti sana kwa aina za data ikilinganishwa na Prisma, jambo ambalo linaweza kusababisha matatizo.
- Haiungi mkono TypeScript vizuri, ambayo kwa mradi wangu si tatizo lakini kwa miradi mingine mingi inaweza kuwa tatizo kubwa.
Faida na Hasara za Prisma
Faida:
- Ina lugha yake ya schema. Hii inamaanisha kwamba unaweza kwa urahisi zaidi na kwa usafi zaidi kutengeneza schema/model yako. Kwa mfano, uwakilishi wa Mongoose wa seti yetu kubwa ya data ulikuwa takriban mistari 262 (ikiwa ni pamoja na nafasi). Lakini seti hiyo hiyo ya data iliyowakilishwa na Prisma ilikuwa mistari 221 pekee (ikiwa ni pamoja na nafasi).
- Prisma ina zana ya CLI inayofanya iwe rahisi zaidi katika uundaji na uhamiaji (urekebishaji) wa hifadhidata yako. Ambayo ni rahisi sana. Si suluhisho la miujiza lakini ni kitu bora zaidi ambacho nimeona hadi sasa kutoka kwa ORM.
- Inaunga mkono hoja ghafi za SQL.
- Msimbo wa Prisma ni safi na rahisi. Bado unapaswa kujifunza na kuuelewa sintaksia ya Prisma lakini ni rahisi zaidi kuelewa kuliko sintaksia ya Sequelize.
- Prisma ina mteja unaozalisha kiotomatiki wajenzi wa hoja kwa Node.js & TypeScript.
- Nyaraka ni nzuri sana na safi. ChatGPT bado inaweza kusaidia lakini si ya kisasa sana kuhusu Prisma kama ilivyo kwa Sequelize.
- Kufikia tarehe 15 Mei, 2023:
- Kwenye NPM, Prisma ilisasishwa mwisho “siku 6 zilizopita” na hupata upakuaji wa kila wiki 1,344,705.
- Kwenye GitHub, Prisma ilisasishwa mwisho “saa 3 zilizopita”, ina Forks 1.1k, na Stars 31.3k.
Hasara:
- Haiungi mkono uchujaji wa Regex kwa Postgres lakini ina chaguo za kichujio “contains”, “includes”, na “startsWith”.
- Kutokana na upimaji wangu, Prisma ni polepole kwa kiasi kikubwa katika kuunda ingizo za seti yetu kubwa ya data katika Postgres. Sequelize iliunda ingizo hizo kubwa kwa kasi ya takriban sekunde 2.26 kwa kila ingizo (faili ya JSON). Wakati Prisma ilikuwa na kasi ya takriban sekunde 11.21 kwa kila ingizo (faili ya JSON). Kulingana na matokeo haya, Prisma ni takriban mara 5 polepole kuliko Sequelize katika kazi hii.
- Pia, kufuta ingizo moja kutoka kwenye seti kubwa ya data kulisababisha muda wa kusubiri wa karibu dakika 4, jambo ambalo ni baya sana.
- Sequelize ilikuwa haraka zaidi sana katika kufuta ingizo katika seti kubwa na yenye ugumu zaidi ya data katika majaribio yangu. Sequelize haikuwa na faida dhidi ya Prisma linapokuja suala la uundaji wa seti ya data. Zote mbili zililazimika kushughulika na uhusiano wa tabaka tatu kwa kina kwa seti hii kubwa ya data, kwa hiyo ningesema ulikuwa ulinganisho wa haki.
- Prisma ni kampuni changa, maana yake Prisma ni kampuni ya faida yenye ufadhili wa dola milioni 56.5. Nikijua hili, msimbo/kifurushi kikuu cha ORM cha Prisma ni chanzo huria chenye leseni ya Apache-2.0. Hili ni zuri, lakini kwa kuwa Prisma ina wawekezaji, singeshangaa kama wangefanya kama MongoDB linapokuja suala la leseni yao.
Vyanzo
- https://www.bitovi.com/blog/battle-of-the-node.js-orms-objection-prisma-sequelize
- https://www.prisma.io/docs/orm/more/comparisons/prisma-and-sequelize
- https://github.com/prisma/prisma
- https://github.com/sequelize/sequelize
- https://www.youtube.com/watch?v=rLRIB6AF2Dg
- https://www.youtube.com/watch?v=RebA5J-rlwg
- https://www.youtube.com/watch?v=a5Wh_LDXtLc
- https://www.youtube.com/watch?v=4QN1BzxF8wM