Sequelize వర్సెస్ Prisma
ప్రారంభం
ప్రస్తుతం eBayలో, నేను మా అంతర్గత సాధనాలను MongoDB వాడకం నుండి Postgresకు మార్చుతున్నాను. ఇది చాలా కష్టమైన ప్రాజెక్ట్, కానీ దీనిని ధైర్యంగా స్వీకరించడానికి నేను ఉత్సాహంగా ఉన్నాను. పరిశోధన చేస్తున్నప్పుడు, మా కోడ్బేస్ ఇప్పటికే Mongooseను ఉపయోగించేందుకు రూపొందించబడినందున, మా కోడ్బేస్కు ORM ఉపయోగించడం ఉత్తమమని నిర్ణయించాను. కానీ ఇప్పుడు సవాలు ఏమిటంటే, మా కోడ్బేస్కు ఏ ORM ఉత్తమంగా ఉంటుంది? ఈ బ్లాగ్లో, నేను ఆ ప్రశ్నను లోతుగా పరిశీలిస్తాను. నా యజమానితో ఉన్న సంబంధం స్వభావం కారణంగా ఈ బ్లాగ్లో ప్రతిదీ వెల్లడించలేనని దయచేసి గమనించండి.
అవసరాలు
ప్రాజెక్ట్ అవసరాలను జాగ్రత్తగా విశ్లేషించిన తర్వాత, ఏ ORM పరిష్కారమైనా తప్పనిసరిగా తీరాల్సిన కింది ముఖ్యమైన ప్రమాణాలను నేను నిర్ణయించాను:
- JavaScript ప్యాకేజీ అయి ఉండాలి; ఎందుకంటే ఎక్కువ కోడ్ JavaScriptలో వ్రాయబడింది
- Postgresను మరియు దాని ఎక్కువ ఫీచర్లను తప్పనిసరిగా మద్దతు ఇవ్వాలి
- దాని పనితీరు కనీసం Mongooseతో సమానంగా లేదా దానికంటే మెరుగ్గా ఉండాలి
- ఓపెన్ సోర్స్ అయి ఉండాలి మరియు నిర్వహించబడుతూ ఉండాలి
ORMలు
చాలా పరిశోధన చేసిన తర్వాత, అవసరాలకు సరిపోయే అగ్ర మూడు ORMలు ఇవని నేను నిర్ణయించాను: Sequelize, Prisma, మరియు TypeORM. గడువుల కారణంగా మూడు వేర్వేరు ORMలను పూర్తిగా పరీక్షించడానికి నాకు సమయం లేకపోవడంతో, చివరికి Sequelize మరియు Prismaపై మాత్రమే దృష్టి పెట్టాలని నిర్ణయించుకున్నాను.
పరీక్షా వాతావరణం
నా పరీక్షా వాతావరణం కోసం, నేను Docker ద్వారా Postgresను నడిపాను. మా వద్ద ఉన్న అతిపెద్ద మరియు మరింత సంక్లిష్టమైన డేటాసెట్ను తీసుకుని, దానిని డాక్యుమెంట్ నిర్మాణం నుండి టేబుల్ నిర్మాణంగా మార్చి, నా స్థానిక Postgres ఇన్స్టాన్స్కు జోడించాను. కాలమ్లు, ఒకటి-కు-ఒకటి సంబంధాలు, ఒకటి-కు-అనేక సంబంధాలు మరియు కొన్ని JSONB కాలమ్లను ఉపయోగించి డేటాసెట్ను మార్చాను.
ఆ తర్వాత, నిర్దిష్ట ORMను ఉపయోగించే JavaScript కోడ్ను వ్రాసి, కింది విషయాలను కొలిచాను:
- ఒక ఎంట్రీని సృష్టించడానికి ఎంత సమయం పడుతుంది
- ఒక ఎంట్రీని నవీకరించడానికి ఎంత సమయం పడుతుంది
- ఒక నెస్టెడ్ ఎంట్రీని (సంబంధం మరియు/లేదా JSONలోని కీ-విలువ) నవీకరించడానికి ఎంత సమయం పడుతుంది
- ఒక ఎంట్రీని తొలగించడానికి ఎంత సమయం పడుతుంది
- ఒక ఎంట్రీని క్వెరీ చేయడానికి/పొందడానికి ఎంత సమయం పడుతుంది
ప్రతి ORM పరీక్షా వాతావరణం కోసం నేను రిపోజిటరీలను సృష్టించాను. ఈ రిపోజిటరీలను పంచుకోవాలని నాకు చాలా ఇష్టం, కానీ సాంకేతికంగా అవి eBayకు చెందినవి కాబట్టి, వాటిని పంచుకోలేను.
ఫలితాలు
2023 మే 15 ప్రాంతంలో, మా వినియోగ సందర్భానికి Sequelizeనే మెరుగైన ORM అని, MongoDB నుండి Postgresకు మా మైగ్రేషన్ కోసం ఉపయోగించబోయే ORM కూడా అదే అని నేను నిర్ణయించుకున్నాను. చివరికి, నేను Sequelizeను ఎంచుకున్న కారణాలు:
- అది “నిజంగా ఓపెన్-సోర్స్"ది, మరియు నిధులు పొందిన స్టార్టప్ ద్వారా నిర్వహించబడేది కాదు.
- Postgres ఫీచర్లలో ఎక్కువ భాగానికి మద్దతు ఇచ్చింది.
- ముఖ్యంగా Prismaతో పోలిస్తే, మంచి పనితీరును కలిగి ఉంది.
- మంచి డాక్యుమెంటేషన్ ఉంది, అయితే Prisma డాక్యుమెంటేషన్ంతగా వివరంగా లేదు.
నేను Sequelizeను ఎంచుకున్నాను, కానీ నేను పరీక్షించిన ప్రతి ORM కోసం అనుకూలతలు మరియు ప్రతికూలతల జాబితాను కూడా తయారు చేశాను. ఇది మీ వినియోగ సందర్భానికి Sequelize లేదా Prisma సరిపోతుందో మరింతగా నిర్ణయించుకోవడానికి ప్రజలకు సహాయపడుతుందని ఆశిస్తున్నాను.
Sequelize అనుకూలతలు & ప్రతికూలతలు
అనుకూలతలు:
- మీ కోసం టేబుళ్లను స్వయంచాలకంగా సృష్టించి నిర్వహించే sync() ఫంక్షన్ ఉంది
- సంక్లిష్టమైన జాయిన్లను (నెస్టెడ్ డేటా) నిర్వహించగలదు
- అనేక ఫిల్టరింగ్ ఎంపికలకు (Regex వంటి వాటికి) మద్దతు ఇస్తుంది
- మోడల్/స్కీమా ప్రాతినిధ్యం అత్యంత అనుకూలీకరించగల క్లాస్లను ఉపయోగించి ముడి JavaScriptలో రూపొందించబడుతుంది.
- మీరు ఎంచుకున్న డేటాబేస్(ల) కోసం Sequelize కనెక్షన్లను నిర్వహిస్తుంది.
- Sequelize అనేక రీడ్-కనెక్షన్లకు మద్దతు ఇస్తుంది
- ముడి SQL క్వెరీలకు మద్దతు ఇస్తుంది.
- 2023 మే 15 నాటికి:
- NPMలో, Sequelize చివరిసారిగా “14 రోజుల క్రితం” నవీకరించబడింది మరియు వారానికి 1,505,835 డౌన్లోడ్లను పొందుతోంది.
- GitHubలో, Sequelize చివరిసారిగా “నిన్న” నవీకరించబడింది, దీనికి 4.2k ఫోర్క్లు మరియు 27.9k స్టార్లు ఉన్నాయి.
- Sequelizeకు MIT లైసెన్స్ ఉంది మరియు ఇది 10 సంవత్సరాలకు పైగా ఓపెన్ సోర్స్గా ఉంది. కాబట్టి సమీప భవిష్యత్తులో కూడా ఇది ఓపెన్ సోర్స్గా కొనసాగడానికి చాలా అవకాశం ఉంది.
ప్రతికూలతలు:
- మోడల్/స్కీమా ప్రాతినిధ్యం చాలా సంక్లిష్టంగా మరియు అధిక పరిమాణంగా మారవచ్చు. ఉదాహరణకు, మా పెద్ద డేటాసెట్కు సంబంధించిన Mongoose ప్రాతినిధ్యం సుమారు 262 లైన్లు (ఖాళీలతో కలిపి) ఉంది. అదే డేటాసెట్ను Sequelize ద్వారా ప్రాతినిధ్యం వహిస్తే 564 లైన్లు (ఖాళీలతో కలిపి) ఉన్నాయి.
- కొన్ని సందర్భాల్లో Sequelize సింటాక్స్ చాలా గందరగోళంగా మరియు సంక్లిష్టంగా మారుతుంది.
- మీ డేటాబేస్ను మైగ్రేట్ చేయడం (దాన్ని సవరించడం) చాలా ఇబ్బందికరంగా ఉంటుంది. JavaScript మైగ్రేషన్ టెంప్లేట్ స్క్రిప్ట్లను రూపొందించడానికి మీరు sequelize-cliను ఉపయోగించవచ్చు. అయితే, దాదాపు అన్ని ORMలలో ఇదే పరిస్థితిగా కనిపిస్తోంది. రిలేషనల్ డేటాబేస్లో మైగ్రేషన్ చేయడం చాలా సందర్భాల్లో సులభం కాదు.
- డాక్యుమెంటేషన్ అంత గొప్పగా లేదు. ఇది మెరుగుపడింది, కానీ ఇంకా పని అవసరం. అయితే ChatGPT వంటి సాధనాలతో, ఇది గతంలో ఉన్నంత పెద్ద సమస్య కాదు, ఎందుకంటే Sequelize ఒక దశాబ్దంగా ఉనికిలో ఉండటం వల్ల ChatGPTకు Sequelizeపై చాలా మంచి అవగాహన ఉండే అవకాశం ఉంది.
- Prismaతో పోలిస్తే Sequelize టైప్ల పట్ల అంత సున్నితంగా ఉండదు, దీనివల్ల సమస్యలు తలెత్తవచ్చు.
- ఇది TypeScriptకు బాగా మద్దతు ఇవ్వదు. నా ప్రాజెక్ట్కు ఇది సమస్య కాదు, కానీ అనేక ఇతర ప్రాజెక్ట్లకు ఇది పెద్ద సమస్య కావచ్చు.
Prisma అనుకూలతలు మరియు ప్రతికూలతలు
అనుకూలతలు:
- దీనికి స్వంత స్కీమా భాష ఉంది. అంటే మీరు మీ స్కీమా/మోడల్ను మరింత సులభంగా మరియు శుభ్రంగా రూపొందించవచ్చు. ఉదాహరణకు, మా పెద్ద డేటాసెట్కు సంబంధించిన Mongoose ప్రాతినిధ్యం సుమారు 262 లైన్లు (ఖాళీలతో కలిపి) ఉంది. కానీ Prisma ద్వారా ప్రాతినిధ్యం వహించిన అదే డేటాసెట్ కేవలం 221 లైన్లు (ఖాళీలతో కలిపి) మాత్రమే ఉంది.
- మీ డేటాబేస్ సృష్టి మరియు మైగ్రేషన్ (సవరణ)ను సులభతరం చేసే CLI సాధనం Prismaకు ఉంది. ఇది చాలా సౌకర్యవంతంగా ఉంటుంది. ఇది అన్ని సమస్యలను పరిష్కరించే సాధనం కాదు, కానీ ORM నుంచి ఇప్పటివరకు నేను చూసిన వాటిలో ఇదే ఉత్తమమైనది.
- ముడి SQL క్వెరీలకు మద్దతు ఇస్తుంది.
- Prisma కోడ్ శుభ్రంగా మరియు సరళంగా ఉంటుంది. మీరు ఇప్పటికీ Prisma సింటాక్స్ను నేర్చుకుని, దానికి అలవాటు పడాలి, కానీ Sequelize సింటాక్స్ కంటే అర్థం చేసుకోవడం చాలా సులభం.
- Node.js & TypeScript కోసం క్వెరీ బిల్డర్లను స్వయంచాలకంగా రూపొందించే క్లయింట్ Prismaకు ఉంది.
- డాక్యుమెంటేషన్ చాలా చాలా మంచిగా మరియు శుభ్రంగా ఉంది. ChatGPT ఇప్పటికీ సహాయపడగలదు, కానీ Sequelizeతో ఉన్నంతగా Prisma గురించి ఇది తాజా సమాచారంతో ఉండదు.
- 2023 మే 15 నాటికి:
- NPMలో, Prisma చివరిసారిగా “6 రోజుల క్రితం” నవీకరించబడింది మరియు వారానికి 1,344,705 డౌన్లోడ్లను పొందుతోంది.
- GitHubలో, Prisma చివరిసారిగా “3 గంటల క్రితం” నవీకరించబడింది, దీనికి 1.1k ఫోర్క్లు మరియు 31.3k స్టార్లు ఉన్నాయి.
ప్రతికూలతలు:
- Postgres కోసం Regex ఫిల్టరింగ్కు మద్దతు ఇవ్వదు, కానీ “contains”, “includes”, మరియు “startsWith” ఫిల్టర్ ఎంపికలు ఉన్నాయి.
- నా పరీక్షల ప్రకారం, Postgresలో మా పెద్ద డేటాసెట్ ఎంట్రీలను సృష్టించడంలో Prisma గణనీయంగా నెమ్మదిగా ఉంది. Sequelize ఆ పెద్ద ఎంట్రీలను ఒక్కో ఎంట్రీకి సుమారు 2.26 సెకన్ల వేగంతో (JSON ఫైల్) సృష్టించింది. అయితే Prisma ఒక్కో ఎంట్రీకి సుమారు 11.21 సెకన్ల వేగాన్ని (JSON ఫైల్) కలిగి ఉంది. ఈ ఫలితాల ఆధారంగా, ఈ పనిలో Prisma Sequelize కంటే సుమారు 5 రెట్లు నెమ్మదిగా ఉంది.
- అలాగే, పెద్ద డేటాసెట్ నుండి ఒక ఎంట్రీని తొలగించడానికి దాదాపు 4 నిమిషాల నిరీక్షణ సమయం పట్టింది, ఇది చాలా చాలా చెడ్డది.
- నా పరీక్షల్లో అతిపెద్ద మరియు అత్యంత సంక్లిష్టమైన డేటాసెట్లో ఒక ఎంట్రీని తొలగించడంలో Sequelize చాలా వేగంగా ఉంది. డేటాసెట్ నిర్మాణం విషయానికి వస్తే Sequelizeకు Prismaపై ఎలాంటి ప్రయోజనం లేదు. ఈ పెద్ద డేటాసెట్ కోసం రెండూ మూడు-స్థాయిల లోతు గల సంబంధాన్ని నిర్వహించాల్సి వచ్చింది, కాబట్టి ఇది న్యాయమైన పోలిక అని నేను చెప్పగలను.
- Prisma ఒక స్టార్టప్, అంటే Prisma 56.5 మిలియన్ డాలర్ల నిధులతో నడిచే లాభాపేక్ష సంస్థ. ఇది తెలిసిన నేపథ్యంలో, Prisma యొక్క ప్రధాన ORM కోడ్/ప్యాకేజీ Apache-2.0 లైసెన్స్తో ఓపెన్ సోర్స్గా ఉండటం మంచిదే. కానీ Prismaకు పెట్టుబడిదారులు ఉన్నందున, వారి లైసెన్స్ విషయానికి వస్తే వారు MongoDBలా వ్యవహరిస్తే నాకు ఆశ్చర్యం ఉండదు.
మూలాలు
- 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