SaaS தரவுத்தளக் கட்டமைப்பை வடிவமைத்தல்
உங்கள் முதல் வாரத்தில் நீங்கள் எடுக்கும் தவறான தரவுத்தள முடிவுகள் பல வருடங்களுக்கு உங்களைத் துரத்தும்.
ஒரு SaaS நிறுவனத் தொடங்குபவருக்கு (founder), multi-tenancy, billing மற்றும் வளர்ச்சி ஆகியவற்றை கையாளக்கூடிய ஒரு schema தேவைப்படுகிறது. நீங்கள் இதில் தவறு செய்தால், ஆறு மாதங்களிலேயே உங்கள் முழு அமைப்பையும் மீண்டும் எழுத வேண்டியிருக்கும்.
ஒரு production-ready schema-வை எவ்வாறு உருவாக்குவது என்பது இதோ.
1. உங்கள் Tenant Strategy-யைத் தேர்ந்தெடுக்கவும்
வாடிக்கையாளர்களுக்கிடையிலான தரவுகளை நீங்கள் தனிமைப்படுத்த வேண்டும்.
• Row-level (Shared DB): குறைந்த சிக்கல் தன்மை கொண்டது. பெரும்பாலான ஸ்டார்ட்அப்களுக்கு சிறந்தது. ஒவ்வொரு query-யிலும் WHERE organization_id = ? என்ற filter-ஐப் பயன்படுத்தவும்.
• Schema-level (Separate Schemas): நடுத்தர சிக்கல் தன்மை கொண்டது. ஒழுங்குமுறைத் தேவைகளுக்கு (regulatory needs) சிறந்தது.
• Database-level (Separate DBs): அதிக சிக்கல் தன்மை கொண்டது. பெரிய நிறுவன வாடிக்கையாளர்களுக்கு (enterprise clients) சிறந்தது.
90% புதிய தயாரிப்புகளுக்கு, row-level multi-tenancy என்பதே சரியான தேர்வாகும்.
2. சரியான Entity Hierarchy
பயனர்களுக்கு (users) நேரடியாகப் கட்டணம் வசூலிக்காதீர்கள். பயனர்கள் வந்து போவார்கள், ஆனால் நிறுவனங்கள் (organizations) நிலைத்திருக்கும்.
அந்த hierarchy இவ்வாறு இருக்க வேண்டும்: User ── MemberOf ── Organization ── Subscription ── Invoice
• Users: இந்த அட்டவணையை அடையாளத்திற்காக (identity) மட்டுமே வைத்திருக்கவும். தாக்குதல்களைத் தவிர்க்க UUIDs-களைப் பயன்படுத்தவும். • Organizations: இதுதான் உங்கள் tenant எல்லை. எப்போதும் subscription-களை organization-உடன் இணைக்கவும். • Memberships: பயனர்களை நிறுவனங்களுடன் இணைக்க ஒரு join table-ஐப் பயன்படுத்தவும். भूमिकाக்களை (roles) இங்கு சேமிக்கவும், user table-இல் அல்ல.
3. Billing மற்றும் Subscriptions
is_active போன்ற ஒரு எளிய boolean-ஐ ஒருபோதும் பயன்படுத்தாதீர்கள். இது குழப்பமான தரவுகளை (messy data) உருவாக்கும்.
Subscriptions-களுக்கு ஒரு state machine-ஐப் பயன்படுத்தவும். பொதுவான நிலைகள் (states) பின்வருமாறு:
• trialing
• active
• past_due
• canceled
• expired
• incomplete
இது கைமுறையாகத் தரவுகளைச் சரிசெய்யாமல், கட்டணத் தோல்விகள் (payment failures) மற்றும் கால அவகாசங்களை (grace periods) கையாள அனுமதிக்கிறது.
4. பணம் மற்றும் Invoicing
நிதித் தவறுகளைத் தவிர்க்க இந்தத் கடுமையான விதிகளைப் பின்பற்றவும்:
• பணத்திற்கு ஒருபோதும் FLOAT அல்லது REAL-ஐப் பயன்படுத்தாதீர்கள். சென்ட் (cents) மதிப்புகளைச் சேமிக்க integers-களைப் பயன்படுத்தவும். உதாரணமாக, $29.99 என்பது 2999 என மாறும்.
• ஒரு invoice_line_items அட்டவணையைப் பயன்படுத்தவும். வரி அறிக்கைகள் (tax reports) மற்றும் ரீஃபண்ட்களுக்கு (refunds) இது உங்களுக்குத் தேவைப்படும்.
• ஒரு வாடிக்கையாளர் உங்கள் தயாரிப்பைப் பயன்படுத்தும் அளவைப் பொறுத்து நீங்கள் கட்டணம் வசூலித்தால், usage_events அட்டவணையைப் பயன்படுத்தவும்.
5. செயல்திறன் குறிப்புகள் (Performance Tips)
• உங்கள் foreign keys-களை index செய்யவும். • உங்கள் status columns-களை index செய்யவும். • உங்கள் timestamp columns-களை index செய்யவும். • N+1 queries-களைத் தவிர்க்கவும். organization மற்றும் subscription தரவுகளை ஒரே முறையில் பெற JOINs-களைப் பயன்படுத்தவும்.
ஒரு சிறந்த schema சரியாகச் செயல்படும்போது அது கண்ணுக்குத் தெரியாது. அது தோல்வியடையும் போது பேரழிவாக அமையும்.
நிறுவனத்திற்காகக் கட்டமைக்கவும். State machines-களைப் பயன்படுத்தவும். பணத்தைச் சேமிக்க integers-களைப் பயன்படுத்தவும்.
Optional learning community: https://t.me/GyaanSetuAi
