SaaS డేటాబేస్ ఆర్కిటెక్చర్ను రూపొందించడం
మీ మొదటి వారంలో తీసుకునే తప్పుడు డేటాబేస్ నిర్ణయాలు సంవత్సరాల తరబడి మిమ్మల్ని వేధిస్తాయి.
ఒక SaaS వ్యవస్థాపకుడికి మల్టీ-టెనెన్సీ (multi-tenancy), బిల్లింగ్ మరియు వృద్ధిని నిర్వహించగల స్కీమా అవసరం. మీరు దీన్ని తప్పుగా చేస్తే, ఆరు నెలల్లోనే మీ మొత్తం వ్యవస్థను మళ్ళీ రాయాల్సి వస్తుంది.
ప్రొడక్షన్-రెడీ (production-ready) స్కీమాను ఎలా నిర్మించాలో ఇక్కడ ఉంది.
1. మీ టెనెంట్ వ్యూహాన్ని (Tenant Strategy) ఎంచుకోండి
మీరు కస్టమర్ల మధ్య డేటాను వేరు చేయాలి.
• Row-level (Shared DB): తక్కువ సంక్లిష్టత. చాలా స్టార్టప్లకు ఇది ఉత్తమం. ప్రతి క్వెరీలో WHERE organization_id = ? ఫిల్టర్ను ఉపయోగించండి.
• Schema-level (Separate Schemas): మధ్యస్థ సంక్లిష్టత. నియంత్రణ అవసరాలకు (regulatory needs) ఇది మంచిది.
• Database-level (Separate DBs): అధిక సంక్లిష్టత. ఎంటర్ప్రైజ్ క్లయింట్లకు ఇది ఉత్తమం.
90% కొత్త ఉత్పత్తులకు, row-level multi-tenancy సరైన ఎంపిక.
2. సరైన ఎంటిటీ హైరార్కీ (Entity Hierarchy)
వినియోగదారులకు (Users) నేరుగా బిల్లు చేయకండి. వినియోగదారులు వస్తుంటారు, పోతుంటారు. కానీ సంస్థలు (Organizations) స్థిరంగా ఉంటాయి.
ఈ హైరార్కీ ఇలా ఉండాలి: User ── MemberOf ── Organization ── Subscription ── Invoice
• Users: ఈ టేబుల్ను కేవలం గుర్తింపు (identity) కోసం మాత్రమే ఉంచండి. దాడులను నివారించడానికి UUIDలను ఉపయోగించండి. • Organizations: ఇది మీ టెనెంట్ బౌండరీ. సబ్స్క్రిప్షన్లను ఎల్లప్పుడూ సంస్థతో (organization) లింక్ చేయండి. • Memberships: వినియోగదారులను సంస్థలతో లింక్ చేయడానికి ఒక join tableను ఉపయోగించండి. రోల్స్ను (roles) ఇక్కడ నిల్వ చేయండి, యూజర్ టేబుల్లో కాదు.
3. బిల్లింగ్ మరియు సబ్స్క్రిప్షన్లు
is_active వంటి సాధారణ బూలియన్ (boolean) విలువను ఎప్పుడూ ఉపయోగించకండి. ఇది గందరగోళమైన డేటాను సృష్టిస్తుంది.
సబ్స్క్రిప్షన్ల కోసం ఒక state machineని ఉపయోగించండి. సాధారణ స్టేట్లు ఇవి: • trialing • active • past_due • canceled • expired • incomplete
ఇది మాన్యువల్ డేటా ఫిక్స్లు లేకుండా పేమెంట్ ఫెయిల్యూర్లు మరియు గ్రేస్ పీరియడ్లను నిర్వహించడానికి మీకు అనుమతిస్తుంది.
4. డబ్బు మరియు ఇన్వాయిసింగ్
ఆర్థిక లోపాలను నివారించడానికి ఈ కఠినమైన నియమాలను పాటించండి:
• డబ్బు కోసం ఎప్పుడూ FLOAT లేదా REAL ఉపయోగించకండి. సెంట్లు (cents) నిల్వ చేయడానికి ఇంటిజర్లను (integers) ఉపయోగించండి. ఉదాహరణకు, $29.99 అనేది 2999 అవుతుంది.
• invoice_line_items టేబుల్ను ఉపయోగించండి. పన్ను నివేదికలు మరియు రీఫండ్ల కోసం మీకు ఇది అవసరం.
• కస్టమర్ మీ ఉత్పత్తిని ఎంత ఉపయోగిస్తారనే దాని ఆధారంగా మీరు ఛార్జ్ చేస్తే, usage_events టేబుల్ను ఉపయోగించండి.
5. పెర్ఫార్మెన్స్ చిట్కాలు
• మీ foreign keysలను ఇండెక్స్ చేయండి. • మీ status కాలమ్స్ను ఇండెక్స్ చేయండి. • మీ timestamp కాలమ్స్ను ఇండెక్స్ చేయండి. • N+1 క్వెరీలను నివారించండి. సంస్థ మరియు సబ్స్క్రిప్షన్ డేటాను ఒకేసారి పొందడానికి JOINs ఉపయోగించండి.
ఒక మంచి స్కీమా సరిగ్గా పనిచేస్తున్నప్పుడు అది కనిపించదు. అది విఫలమైనప్పుడు విపత్తుగా మారుతుంది.
సంస్థ కోసం నిర్మించండి. state machines ఉపయోగించండి. డబ్బును ఇంటిజర్లుగా నిల్వ చేయండి.
Optional learning community: https://t.me/GyaanSetuAi
