SaaS डेटाबेस आर्किटेक्चर डिझाइन करणे
तुमच्या पहिल्या आठवड्यातील डेटाबेसचे चुकीचे निर्णय तुम्हाला वर्षानुवर्षे त्रास देतील.
एका SaaS संस्थापकाला (founder) अशा स्कीमाची गरज असते जो multi-tenancy, billing आणि वाढ (growth) हाताळू शकेल. जर तुम्ही यात चूक केली, तर तुम्हाला सहा महिन्यांत तुमची संपूर्ण सिस्टीम पुन्हा लिहावी लागेल.
प्रोडक्शन-रेडी (production-ready) स्कीमा कसा तयार करायचा, ते खाली दिले आहे.
1. तुमची टेनंट स्ट्रॅटेजी (Tenant Strategy) निवडा
तुम्हाला ग्राहकांमधील डेटा वेगळा (isolate) ठेवावा लागेल.
• Row-level (Shared DB): कमी गुंतागुंत (Low complexity). बहुतेक स्टार्टअप्ससाठी सर्वोत्तम. प्रत्येक क्वेरीवर WHERE organization_id = ? फिल्टर वापरा.
• Schema-level (Separate Schemas): मध्यम गुंतागुंत. नियामक गरजांसाठी (regulatory needs) चांगले.
• Database-level (Separate DBs): उच्च गुंतागुंत. एंटरप्राइझ क्लायंट्ससाठी सर्वोत्तम.
९०% नवीन उत्पादनांसाठी, row-level multi-tenancy हा योग्य पर्याय आहे.
2. योग्य एंटिटी हायरार्की (Entity Hierarchy)
वापरकर्त्यांना (users) थेट बिल करू नका. वापरकर्ते येतात आणि जातात. संस्था (Organizations) कायम राहतात.
हायरार्की अशी असावी: User ── MemberOf ── Organization ── Subscription ── Invoice
• Users: हे टेबल फक्त ओळखीसाठी (identity) ठेवा. हल्ले (attacks) रोखण्यासाठी UUIDs वापरा. • Organizations: ही तुमची टेनंट बाउंड्री (tenant boundary) आहे. सबस्क्रिप्शन नेहमी संस्थेशी (organization) जोडा. • Memberships: वापरकर्त्यांना संस्थांशी जोडण्यासाठी join table वापरा. भूमिका (roles) येथे साठवा, युजर टेबलवर नाही.
3. बिलिंग आणि सबस्क्रिप्शन्स (Billing and Subscriptions)
is_active सारखा साधा boolean कधीही वापरू नका. यामुळे डेटा विस्कळीत (messy) होतो.
सबस्क्रिप्शन्ससाठी state machine वापरा. सामान्य स्टेट्समध्ये (states) खालील गोष्टींचा समावेश होतो: • trialing • active • past_due • canceled • expired • incomplete
यामुळे तुम्हाला मॅन्युअल डेटा फिक्स न करता पेमेंट फेल्युअर आणि ग्रेस पिरीयड्स (grace periods) हाताळता येतात.
4. पैसे आणि इनव्हॉइसिंग (Money and Invoicing)
आर्थिक चुका टाळण्यासाठी या कडक नियमांचे पालन करा:
• पैशांसाठी कधीही FLOAT किंवा REAL वापरू नका. सेंट्स (cents) साठवण्यासाठी integers वापरा. उदाहरणार्थ, $29.99 चे 2999 करा.
• invoice_line_items टेबल वापरा. टॅक्स रिपोर्ट आणि रिफंडसाठी तुम्हाला याची गरज पडेल.
• जर तुम्ही ग्राहक तुमच्या उत्पादनाचा किती वापर करतो यावर आधारित शुल्क आकारत असाल, तर usage_events टेबल वापरा.
5. परफॉर्मन्स टिप्स
• तुमच्या foreign keys ला इंडेक्स (index) करा. • तुमच्या status columns ला इंडेक्स करा. • तुमच्या timestamp columns ला इंडेक्स करा. • N+1 क्वेरीज टाळा. संस्था आणि सबस्क्रिप्शन डेटा एकाच वेळी मिळवण्यासाठी JOINs वापरा.
एक चांगला स्कीमा काम करत असताना अदृश्य असतो. तो निकामी झाल्यास विनाशकारी ठरू शकतो.
संस्थेसाठी (organization) बांधणी करा. state machines वापरा. पैसे integers म्हणून साठवा.
Optional learning community: https://t.me/GyaanSetuAi
