SaaS ਡਾਟਾਬੇਸ ਆਰਕੀਟੈਕਚਰ ਨੂੰ ਡਿਜ਼ਾਈਨ ਕਰਨਾ
ਤੁਹਾਡੇ ਪਹਿਲੇ ਹਫ਼ਤੇ ਵਿੱਚ ਲਏ ਗਏ ਡਾਟਾਬੇਸ ਦੇ ਮਾੜੇ ਫੈਸਲੇ ਤੁਹਾਨੂੰ ਸਾਲਾਂ ਤੱਕ ਪਰੇਸ਼ਾਨ ਕਰਨਗੇ।
ਇੱਕ SaaS ਸੰਸਥਾਪਕ (founder) ਨੂੰ ਅਜਿਹੇ schema ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਜੋ multi-tenancy, ਬਿਲਿੰਗ ਅਤੇ ਵਿਕਾਸ (growth) ਨੂੰ ਸੰਭਾਲ ਸਕੇ। ਜੇਕਰ ਤੁਸੀਂ ਗਲਤੀ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਛੇ ਮਹੀਨਿਆਂ ਵਿੱਚ ਆਪਣਾ ਸਾਰਾ ਸਿਸਟਮ ਦੁਬਾਰਾ ਲਿਖਣਾ ਪਵੇਗਾ।
ਇੱਥੇ ਇੱਕ production-ready schema ਬਣਾਉਣ ਦਾ ਤਰੀਕਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
- ਆਪਣੀ Tenant Strategy ਚੁਣੋ
ਤੁਹਾਨੂੰ ਗਾਹਕਾਂ ਦੇ ਵਿਚਕਾਰ ਡਾਟਾ ਨੂੰ ਵੱਖ ਕਰਨਾ (isolate) ਚਾਹੀਦਾ ਹੈ।
• Row-level (Shared DB): ਘੱਟ ਜਟਿਲਤਾ (Low complexity)। ਜ਼ਿਆਦਾਤਰ ਸਟਾਰਟਅੱਪਸ ਲਈ ਵਧੀਆ। ਹਰ query 'ਤੇ WHERE organization_id = ? ਫਿਲਟਰ ਦੀ ਵਰਤੋਂ ਕਰੋ।
• Schema-level (Separate Schemas): ਦਰਮਿਆਨੀ ਜਟਿਲਤਾ (Medium complexity)। ਰੈਗੂਲੇਟਰੀ ਲੋੜਾਂ ਲਈ ਵਧੀਆ।
• Database-level (Separate DBs): ਉੱਚ ਜਟਿਲਤਾ (High complexity)। ਐਂਟਰਪ੍ਰਾਈਜ਼ ਕਲਾਇੰਟਸ ਲਈ ਵਧੀਆ।
90% ਨਵੇਂ ਉਤਪਾਦਾਂ ਲਈ, row-level multi-tenancy ਹੀ ਸਹੀ ਚੋਣ ਹੈ।
- ਸਹੀ Entity Hierarchy
ਯੂਜ਼ਰਸ ਨੂੰ ਸਿੱਧਾ ਬਿੱਲ ਨਾ ਭੇਜੋ। ਯੂਜ਼ਰਸ ਆਉਂਦੇ-ਜਾਂਦੇ ਰਹਿੰਦੇ ਹਨ। ਸੰਸਥਾਵਾਂ (Organizations) ਟਿਕਦੀਆਂ ਹਨ।
Hierarchy ਇਸ ਤਰ੍ਹਾਂ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ: User ── MemberOf ── Organization ── Subscription ── Invoice
• Users: ਇਸ ਟੇਬਲ ਨੂੰ ਸਿਰਫ਼ ਪਛਾਣ (identity) ਲਈ ਰੱਖੋ। ਹਮਲਿਆਂ ਤੋਂ ਬਚਣ ਲਈ UUIDs ਦੀ ਵਰਤੋਂ ਕਰੋ। • Organizations: ਇਹ ਤੁਹਾਡੀ tenant boundary ਹੈ। ਹਮੇਸ਼ਾ subscriptions ਨੂੰ organization ਨਾਲ ਜੋੜੋ। • Memberships: ਯੂਜ਼ਰਸ ਨੂੰ organizations ਨਾਲ ਜੋੜਨ ਲਈ ਇੱਕ join table ਦੀ ਵਰਤੋਂ ਕਰੋ। ਰੋਲ (roles) ਇੱਥੇ ਸਟੋਰ ਕਰੋ, ਯੂਜ਼ਰ ਟੇਬਲ 'ਤੇ ਨਹੀਂ।
- ਬਿਲਿੰਗ ਅਤੇ Subscriptions
ਕਦੇ ਵੀ is_active ਵਰਗੇ ਸਧਾਰਨ boolean ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ। ਇਸ ਨਾਲ ਡਾਟਾ ਖਰਾਬ (messy) ਹੋ ਜਾਂਦਾ ਹੈ।
Subscriptions ਲਈ ਇੱਕ state machine ਦੀ ਵਰਤੋਂ ਕਰੋ। ਆਮ ਸਟੇਟਸ (states) ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ: • trialing • active • past_due • canceled • expired • incomplete
ਇਹ ਤੁਹਾਨੂੰ ਮੈਨੂਅਲ ਡਾਟਾ ਫਿਕਸਾਂ ਤੋਂ ਬਿਨਾਂ ਭੁਗਤਾਨ ਦੀਆਂ ਅਸਫਲਤਾਵਾਂ (payment failures) ਅਤੇ ਗ੍ਰੇਸ ਪੀਰੀਅਡਾਂ (grace periods) ਨੂੰ ਸੰਭਾਲਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।
- ਪੈਸਾ ਅਤੇ Invoicing
ਵਿੱਤੀ ਗਲਤੀਆਂ ਤੋਂ ਬਚਣ ਲਈ ਇਹ ਸਖ਼ਤ ਨਿਯਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ:
• ਪੈਸੇ ਲਈ ਕਦੇ ਵੀ FLOAT ਜਾਂ REAL ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ। ਸੈਂਟਸ (cents) ਸਟੋਰ ਕਰਨ ਲਈ integers ਦੀ ਵਰਤੋਂ ਕਰੋ। ਉਦਾਹਰਨ ਲਈ, $29.99 ਬਣ ਜਾਂਦਾ ਹੈ 2999।
• invoice_line_items ਟੇਬਲ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਟੈਕਸ ਰਿਪੋਰਟਾਂ ਅਤੇ ਰਿਫੰਡਾਂ ਲਈ ਤੁਹਾਨੂੰ ਇਸਦੀ ਲੋੜ ਪਵੇਗੀ।
• ਜੇਕਰ ਤੁਸੀਂ ਗਾਹਕ ਦੁਆਰਾ ਤੁਹਾਡੇ ਉਤਪਾਦ ਦੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ 'ਤੇ ਚਾਰਜ ਕਰਦੇ ਹੋ, ਤਾਂ usage_events ਟੇਬਲ ਦੀ ਵਰਤੋਂ ਕਰੋ।
- ਪਰਫਾਰਮੈਂਸ ਟਿਪਸ
• ਆਪਣੀਆਂ foreign keys ਨੂੰ index ਕਰੋ। • ਆਪਣੇ status columns ਨੂੰ index ਕਰੋ। • ਆਪਣੇ timestamp columns ਨੂੰ index ਕਰੋ। • N+1 queries ਤੋਂ ਬਚੋ। ਇੱਕੋ ਵਾਰ ਵਿੱਚ organization ਅਤੇ subscription ਡਾਟਾ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ JOINs ਦੀ ਵਰਤੋਂ ਕਰੋ।
ਇੱਕ ਵਧੀਆ schema ਕੰਮ ਕਰਦੇ ਸਮੇਂ ਅਣਦਿੱਖ ਹੁੰਦਾ ਹੈ। ਜਦੋਂ ਇਹ ਫੇਲ੍ਹ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਇਹ ਭਿਆਨਕ ਹੁੰਦਾ ਹੈ।
ਸੰਸਥਾ (organization) ਲਈ ਬਣਾਓ। State machines ਦੀ ਵਰਤੋਂ ਕਰੋ। ਪੈਸੇ ਨੂੰ integers ਵਜੋਂ ਸਟੋਰ ਕਰੋ।
ਵਿਕਲਪਿਕ ਸਿੱਖਣ ਕਮਿਊਨਿਟੀ: https://t.me/GyaanSetuAi
