ਜਾਣੋ ਕਿ ਕਿਵੇਂ ਕਈ ਸਟਾਰਟਅਪ PostgreSQL ਨੂੰ ਡਿਫਾਲਟ ਚੁਣਦੇ ਹਨ: ਭਰੋਸੇਯੋਗਤਾ, JSONB ਵਰਗੀਆਂ ਖਾਸੀਅਤਾਂ, ਮਜ਼ਬੂਤ ਟੂਲਿੰਗ ਅਤੇ MVP ਤੋਂ ਸਕੇਲ ਤੱਕ ਇੱਕ ਸਾਫ਼ ਰਾਹ।

ਜਦੋਂ ਫਾਊਂਡਰ ਕਹਿੰਦੇ ਹਨ PostgreSQL "ਡਿਫਾਲਟ ਡੇਟਾਬੇਸ" ਹੈ, ਉਹ ਆਮ ਤੌਰ 'ਤੇ ਇਹ ਨਹੀਂ ਕਹਿ ਰਹੇ ਕਿ ਇਹ ਹਰ ਉਤਪਾਦ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਹੈ। ਉਹ ਇਹ ਮਤਲਬ ਲੈਂਦੇ ਹਨ ਕਿ ਇਹ ਉਹ ਚੋਣ ਹੈ ਜੋ ਤੁਸੀਂ ਸ਼ੁਰੂਆਤ ਵਿੱਚ ਚੁਣ ਸਕਦੇ ਹੋ—ਅਕਸਰ ਬਿਨਾਂ ਲੰਬੀ ਜਾਂਚ-ਪੜਤਾਲ ਦੇ—ਅਤੇ ਭਰੋਸਾ ਰੱਖ ਸਕਦੇ ਹੋ ਕਿ ਜਦੋਂ ਤੁਹਾਡਾ ਉਤਪਾਦ ਅਤੇ ਟੀਮ ਵੱਧਣਗੇ ਤਾਂ ਇਹ ਰੁਕਾਵਟ ਨਹੀਂ ਬਣੇਗੀ।
MVP ਲਈ, "ਡਿਫਾਲਟ" ਫੈਸਲਾ ਕਰਨੀ ਦੀ ਲੋੜ ਘੱਟ ਕਰਨਾ ਹੈ। ਤੁਸੀਂ ਐਸਾ ਡੇਟਾਬੇਸ ਚਾਹੁੰਦੇ ਹੋ ਜੋ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਸਮਝਿਆ ਜਾਂਦਾ ਹੋਵੇ, ਭਰਤੀ ਕਰਨ ਲਈ ਆਸਾਨ ਹੋਵੇ, ਹੋਸਟਿੰਗ ਪ੍ਰਦਾਤਿਆਂ ਦੁਆਰਾ ਚੰਗੀ ਤਰ੍ਹਾਂ ਸਪੋਰਟ ਕੀਤਾ ਗਿਆ ਹੋਵੇ, ਅਤੇ ਜਦੋਂ ਤੁਹਾਡਾ ਡੇਟਾ ਮਾਡਲ ਬਦਲੇ ਤਾਂ ਸਹਿਣਸ਼ੀਲ ਹੋਵੇ। ਇੱਕ ਡਿਫਾਲਟ ਚੋਣ ਉਹ ਹੁੰਦੀ ਹੈ ਜੋ ਆਮ ਸਟਾਰਟਅਪ ਰਾਹ ਨਾਲ ਮਿਲਦੀ ਹੈ: ਤੇਜ਼ੀ ਨਾਲ ਬਣਾਓ, ਯੂਜ਼ਰਾਂ ਤੋਂ ਸਿੱਖੋ, ਫਿਰ ਸੁਧਾਰ ਕਰੋ।
ਇਸੇ ਕਾਰਨ PostgreSQL ਅਨੇਕ ਆਧੁਨਿਕ "ਸਟੈਂਡਰਡ ਸਟੈਕ" ਵਿੱਚ ਮਿਲਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਪਲੇਟਫਾਰਮਾਂ ਜਿਵੇਂ Koder.ai Postgres ਨੂੰ ਤੁਰੰਤ ਅਸਲ ਐਪਲੀਕੇਸ਼ਨਾਂ ਸ਼ਿਪ ਕਰਨ ਲਈ ਬੈਕਬੋਨ ਵਜੋਂ ਵਰਤਦੇ ਹਨ (ਵੈੱਬ 'ਤੇ React, ਬੈਕਐਂਡ ਲਈ Go ਸਰਵਿਸਿਜ਼, ਡੇਟਾ ਲਈ PostgreSQL)। ਮੰਤਵ ਕੋਈ ਬ੍ਰੈਂਡ ਨਹੀਂ—ਇਹ ਪੈਟਰਨ ਹੈ: ਪ੍ਰਮਾਣਿਤ ਪ੍ਰਿਮਿਟਿਵ ਚੁਣੋ ਤਾਂ ਜੋ ਤੁਸੀਂ ਇੰਫ਼ਰਾਸਟਰੱਕਚਰ ਦੀਆਂ ਬਹਿਸਾਂ ਵਿੱਚ ਨਹੀਂ ਫਸੋ।
ਕਈ ਹਾਲਾਤ ਹਨ ਜਿੱਥੇ ਹੋਰ ਡੇਟਾਬੇਸ ਪਹਿਲੀ ਚੋਣ ਵਜੋਂ ਵਧੀਆ ਹੋ ਸਕਦਾ ਹੈ: ਬਹੁਤ ਉੱਚ ਲਿਖਤ throughput, time-series ਭਰਪੂਰ ਵਰਕਲੋਡ, ਜਾਂ ਬਹੁਤ ਖਾਸ ਖੋਜ ਖੇਤ੍ਰ। ਪਰ ਜ਼ਿਆਦਾਤਰ ਪ੍ਰਾਰੰਭਕ ਉਤਪਾਦ "ਯੂਜ਼ਰ + ਅਕਾਊਂਟ + ਪਰਮਿਸ਼ਨ + ਬਿਲਿੰਗ + ਐਕਟਿਵਿਟੀ" ਵਰਗੇ ਹੁੰਦੇ ਹਨ, ਅਤੇ ਇਸ ਰੂਪ ਨੂੰ ਰਿਲੇਸ਼ਨਲ ਡੇਟਾਬੇਸ ਨਾਲ ਅਸਾਨੀ ਨਾਲ ਨਿਭਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।
PostgreSQL ਇੱਕ ਓਪਨ-ਸੋਰਸ ਰਿਲੇਸ਼ਨਲ ਡੇਟਾਬੇਸ ਹੈ। "ਰਿਲੇਸ਼ਨਲ" ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਤੁਹਾਡਾ ਡੇਟਾ ਟੇਬਲਾਂ ਵਿੱਚ ਸਟੋਰ ਹੁੰਦਾ ਹੈ (ਇਕ ਤਰ੍ਹਾਂ ਦੀਆਂ spreadsheets) ਅਤੇ ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਟੇਬਲਾਂ ਨੂੰ ਭਰੋਸੇਯੋਗ ਤਰੀਕੇ ਨਾਲ ਜੋੜ ਸਕਦੇ ਹੋ (users ↔ orders ↔ subscriptions). ਇਹ SQL ਬੋਲਦਾ ਹੈ, ਜੋ ਉਦਯੋਗ ਭਰ ਵਿੱਚ ਵਰਤੀ ਜਾਣ ਵਾਲੀ ਇੱਕ ਮਿਆਰੀ ਕਯੂਰੀ ਭਾਸ਼ਾ ਹੈ।
ਅਸੀਂ ਵੇਖਾਂਗੇ ਕਿ PostgreSQL ਅਕਸਰ ਡਿਫਾਲਟ ਕਿਉਂ ਬਣਦਾ ਹੈ:
ਲਕੜੀਦਾ ਮਕਸਦ ਇੱਕ "ਇਕ ਠੀਕ ਜਵਾਬ" ਵੇਚਣਾ ਨਹੀਂ ਹੈ, ਬਲਕਿ ਉਹ ਪੈਟਰਨ ਹਾਈਲਾਈਟ ਕਰਨਾ ਹੈ ਜੋ PostgreSQL ਨੂੰ ਕਈ ਸਟਾਰਟਅਪਾਂ ਲਈ ਸੁਰੱਖਿਅਤ ਸ਼ੁਰੂਆਤ ਬਣਾਉਂਦੇ ਹਨ।
PostgreSQL ਉਮੀਦ ਕਾਇਮ ਰੱਖਣ ਵਾਲੀ ਡਿਜ਼ਾਈਨ ਕਰਕੇ ਭਰੋਸਾ ਜਿਤਦਾ ਹੈ—ਭਾਵੇਂ ਤੁਹਾਡੀ ਐਪ, ਸਰਵਰ ਜਾਂ ਨੈਟਵਰਕ ਸਹੀ ਤਰ੍ਹਾਂ ਕੰਮ ਨਾ ਕਰ ਰਹੇ ਹੋਣ। ਉਹ ਸਟਾਰਟਅਪ ਜਿਹੜੇ ਆਰਡਰ, ਭੁਗਤਾਨ, ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਜਾਂ ਯੂਜ਼ਰ ਪ੍ਰੋਫਾਈਲ ਸੰਭਾਲਦੇ ਹਨ, ਲਈ "ਅਧਿਕanshortly ਸਹੀ" ਕਬੂਲ ਨਹੀਂ ਹੁੰਦਾ।
PostgreSQL ACID ਟਰਾਂਜ਼ੈਕਸ਼ਨਾਂ ਨੂੰ ਸਪੋਰਟ ਕਰਦਾ ਹੈ, ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਬਦਲਾਅ ਦੇ ਸੈੱਟ 'ਤੇ "ਸਭ-ਜਾਂ-ਕੋਈ ਨਹੀਂ" ਰੈਪਪਰ ਵਜੋਂ ਸੋਚ ਸਕਦੇ ਹੋ।
ਜੇ ਇੱਕ checkout ਫਲੋ ਨੂੰ (1) ਇੱਕ ਆਰਡਰ ਬਣਾਉਣਾ, (2) ਇਨਵੈਂਟਰੀ ਰਿਜ਼ਰਵ ਕਰਨੀ, ਅਤੇ (3) ਭੁਗਤਾਨ ਇਰਾਦਾ ਦਰਜ ਕਰਨਾ ਲੋੜੀਂਦਾ ਹੈ, ਤਾਂ ਇੱਕ ਟਰਾਂਜ਼ੈਕਸ਼ਨ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਇਹ ਕਦਮ ਜਾਂ ਤਾਂ ਸਾਰੇ ਸਫਲ ਹੋਣ ਜਾਂ ਕੋਈ ਵੀ ਨਹੀਂ। ਜੇ ਇੱਕ ਸਰਵਰ ਅੱਧਾ ਰਿਹਾ, PostgreSQL ਅਧੂਰਾ ਕੰਮ rollback ਕਰ ਸਕਦਾ ਹੈ ਬਜਾਏ ਕਿ ਅਧੂਰੇ ਰਿਕਾਰਡ ਛੱਡ ਦੇਣ (ਜੋ ਰਿਫੰਡ, ਡਬਲ-ਚਾਰਜ ਜਾਂ "ਗੁੰਮ ਆਰਡਰ" ਬਣਾਉਂਦੇ)।
ਡੇਟਾ ਇੰਟੈਗ੍ਰਿਟੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਗਲਤ ਡੇਟਾ ਨੂੰ ਸਿਸਟਮ ਵਿੱਚ ਪ੍ਰਵੇਸ਼ ਕਰਨ ਤੋਂ ਰੋਕਦੀਆਂ ਹਨ:
ਇਸ ਨਾਲ ਸਹੀਪਨ "ਅਸੀਂ ਉਮੀਦ ਕਰਦੇ ਹਾਂ ਕਿ ਹਰ ਕੋਡ ਪਾਥ ਸਹੀ ਕਰੇਗਾ" ਤੋਂ "ਸਿਸਟਮ ਗਲਤ ਸਥਿਤੀਆਂ ਨੂੰ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦੇਵੇਗਾ" 'ਤੇ ਆ ਜਾਂਦਾ ਹੈ।
ਟੀਮ ਤੇਜ਼ੀ ਨਾਲ ਚਲਦੀਆਂ ਹਨ, ਅਤੇ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਦੀ ਸੰਰਚਨਾ ਬਦਲੇਗੀ। PostgreSQL ਸੁਰੱਖਿਅਤ migrations ਅਤੇ schema ਉਨਤੀ ਪੈਟਰਨ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ—ਕੋਲਮ ਜੋੜਨਾ, ਡੇਟਾ ਬੈਕਫਿੱਲ ਕਰਨਾ, ਨਵੇਂ constraints ਗਰੇਜੂਅਲੀ ਲਾਉਣਾ—ਤਾਂ ਜੋ ਤੁਸੀਂ ਫੀਚਰ ਸ਼ਿਪ ਕਰ ਸਕੋ ਬਿਨਾਂ ਮੌਜੂਦਾ ਡੇਟਾ ਨੂੰ ਖਰਾਬ ਕੀਤੇ।
ਜਦੋਂ ਟ੍ਰੈਫਿਕ spike ਕਰਦਾ ਹੈ ਜਾਂ ਨੋਡ ਰੀਸਟਾਰਟ ਹੁੰਦਾ ਹੈ, PostgreSQL ਦੀ durability ਗਾਰੰਟੀਆਂ ਅਤੇ ਪਰਪੱਕ concurrency control ਵਰ੍ਹੇ ਹੋਏ ਵਿਵਹਾਰ ਨੂੰ ਕਾਇਮ ਰੱਖਦੇ ਹਨ। ਖਾਮੋਸ਼ ਡੇਟਾ ਨੁਕਸਾਨ ਜਾਂ ਅਸੰਗਤ ਪੜ੍ਹਾਈ ਦੀ ਬਜਾਏ, ਤੁਹਾਨੂੰ ਸਾਫ਼ ਨਤੀਜੇ ਅਤੇ ਰਿਕਵਰੇਬਲ ਸਥਿਤੀਆਂ ਮਿਲਦੀਆਂ ਹਨ—ਸਹੀ ਉਹੀ ਜੋ ਤੁਸੀਂ ਗਾਹਕ ਦੇ ਨظارਿਆਂ 'ਤੇ ਚਾਹੁੰਦੇ ਹੋ।
PostgreSQL ਦਾ ਸਭ ਤੋਂ ਵੱਡਾ ਫਾਇਦਾ ਕਈ ਸਟਾਰਟਅਪਾਂ ਲਈ ਏਹ ਹੈ: SQL ਤੁਹਾਡੇ ਡੇਟਾ 'ਤੇ ਸਪਸ਼ਟ ਸਵਾਲ ਪੁੱਛਣਾ ਆਸਾਨ ਬਣਾਉਂਦਾ ਹੈ, ਚਾਹੇ ਤੁਹਾਡਾ ਉਤਪਾਦ ਕਿਵੇਂ ਵੀ ਬਦਲ ਰਿਹਾ ਹੋਵੇ। ਜਦੋਂ ਇੱਕ ਫਾਊਂਡਰ ਸਾਲਾਨਾ ਰੈਵੈਨਿਊ ਬ੍ਰੇਕਡਾਊਨ ਚਾਹੁੰਦਾ ਹੈ, ਇੱਕ PM ਕੋਹੋਰਟ ਰਿਪੋਰਟਚਾਹੁੰਦਾ ਹੈ, ਜਾਂ ਸਪੋਰਟ ਇੱਕ ਆਰਡਰ ਕਿਉਂ ਫੇਲ ਹੋਇਆ ਸਮਝਣਾ ਚਾਹੁੰਦੀ ਹੈ, SQL ਇੱਕ ਸਾਂਝੀ ਭਾਸ਼ਾ ਹੈ ਜੋ ਰਿਪੋਰਟਿੰਗ, ਡੀਬੱਗਿੰਗ ਅਤੇ ਇਕ-ਕਲਿਕ "ਤੁਰੰਤ-ਜਾਂਚ" ਲਈ ਕੰਮ ਕਰਦੀ ਹੈ।
ਜ਼ਿਆਦਾਤਰ ਉਤਪਾਦ ਸਧਾਰਨ ਤੌਰ 'ਤੇ ਸੰਬੰਧ ਰੱਖਦੇ ਹਨ: users ਟੀਮਾਂ ਨਾਲ ਜੁੜਦੇ ਹਨ, ਟੀਮਾਂ ਪ੍ਰੋਜੈਕਟ ਰੱਖਦੀਆਂ ਹਨ, ਪ੍ਰੋਜੈਕਟਾਂ ਦੇ ਟਾਸਕ ਹੁੰਦੇ ਹਨ, ਟਾਸਕਾਂ ਦੇ comments ਹੁੰਦੇ ਹਨ। ਰਿਲੇਸ਼ਨਲ ਮਾਡਲਿੰਗ ਤੁਹਾਨੂੰ ਇਹ ਸਬੰਧ ਸਿੱਧਾ ਪ੍ਰਗਟ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ, ਅਤੇ joins ਉਨ੍ਹਾਂ ਨੂੰ ਮਿਲਾਉਣਾ ਕਾਰਗਰ ਬਣਾਉਂਦੇ ਹਨ।
ਇਸਦਾ ਅਰਥ ਸਿਰਫ਼ ਇਕਥੇ ਢਾਂਚਾ ਨਹੀਂ—ਇਹ ਫੀਚਰ ਤੇਜ਼ੀ ਨਾਲ ਸ਼ਿਪ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਉਦਾਹਰਨਾਂ:
ਜਦੋਂ ਤੁਹਾਡਾ ਡੇਟਾ ਚੰਗੀ ਤਰ੍ਹਾਂ ਪਰਿਭਾਸ਼ਿਤ ਏਂਟਿਟੀਆਂ 'ਤੇ ਅਧਾਰਿਤ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਐਪ ਲਾਜਿਕ ਸਧਾਰਣ ਹੋ ਜਾਂਦੀ ਹੈ ਕਿਉਂਕਿ ਡੇਟਾਬੇਸ "ਕੌਣ ਕਿਸ ਨਾਲ ਜੁੜਿਆ ਹੈ" ਦਾ ਭਰੋਸੇਯੋਗ ਜਵਾਬ ਦੇ ਸਕਦਾ ਹੈ।
SQL ਡੇਟਾਬੇਸ ਰੋਜ਼ਮਰਰ ਦੇ ਕੁਝ ਟੂਲ ਦਿੰਦੇ ਹਨ ਜੋ ਸਮਾਂ ਬਚਾਉਂਦੇ ਹਨ:
SQL ਦੀ ਪੜ੍ਹਾਈ ਆਮ ਤੌਰ 'ਤੇ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਅਤੇ ਇਸ ਦਾ ਵਰਤਾਉ ਵਿਆਪਕ ਹੈ। ਇਹ ਭਰਤੀ ਕਰਨ ਦੇ ਸਮੇਂ ਜ਼ਰੂਰੀ ਹੈ। ਇੱਕ ਸਟਾਰਟਅਪ ਲੋਕਾਂ ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ onboard ਕਰ ਸਕਦਾ ਹੈ ਜਦੋਂ ਕਈ ਉਮੀਦਵਾਰ ਪਹਿਲਾਂ ਤੋਂ SQL ਪੜ੍ਹਨਾ ਅਤੇ ਲਿਖਣਾ ਜਾਣਦੇ ਹਨ—ਅਤੇ ਜਦੋਂ ਡੇਟਾਬੇਸ ਖੁਦ ਸਾਫ਼, query-able ਢਾਂਚਾ ਉਤਸ਼ਾਹਤ ਕਰਦਾ ਹੈ।
ਸਟਾਰਟਅਪਾਂ ਵਿੱਖਰੇ ਰੂਪ ਦੇ ਡੇਟਾ ਨਾਲ ਦੌਰਾਂਦਿਆਂ ਵਕਤ-ਵਕਤ ਨਿਰਪੱਖ ਮਾਡਲ ਨਹੀਂ ਹੁੰਦੇ। PostgreSQL ਦਾ JSONB ਤੁਹਾਨੂੰ ਅਰਧ-ਸੰਰਚਿਤ ਡੇਟਾ ਲਈ ਪ੍ਰੈਟਿਕਲ "ਦਬਾਅ ਬਚਾਉਣ ਵਾਲੀ ਬਲਵ" ਦਿੰਦਾ ਹੈ, ਅਤੇ ਸਾਰਾ ਕੁਝ ਇੱਕ ਹੀ ਡੇਟਾਬੇਸ ਵਿੱਚ ਰੱਖਦਾ ਹੈ।
JSONB JSON ਡੇਟਾ ਨੂੰ ਇੱਕ ਬਿਨਰੀ ਫਾਰਮੈਟ ਵਿੱਚ ਸਟੋਰ ਕਰਦਾ ਹੈ ਜਿਸਨੂੰ PostgreSQL ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਰੀਕੇ ਨਾਲ query ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਆਪਣੇ ਕੋਰ ਟੇਬਲ (users, accounts, subscriptions) ਰਿਲੇਸ਼ਨਲ ਰੱਖ ਸਕਦੇ ਹੋ ਅਤੇ ਉਹਨਾਂ ਲਈ ਉਹ ਖੇਤਰ ਜੋ ਅਕਸਰ ਬਦਲਦੇ ਹਨ ਜਾਂ ਗ੍ਰਾਹਕ ਮੁਤਾਬਕ ਵੱਖ-ਵੱਖ ਹੁੰਦੇ ਹਨ, ਇੱਕ JSONB ਕਾਲਮ ਜੋੜ ਸਕਦੇ ਹੋ।
ਆਮ, ਸਟਾਰਟਅਪ-ਦੋਸਤਾਨਾ ਵਰਤੋਂ:
{"beta": true, "new_checkout": "variant_b"}JSONB ਰਿਲੇਸ਼ਨਲ ਮਾਡਲਿੰਗ ਦੀ ਜਗ੍ਹਾ ਨਹੀਂ ਹੈ। ਜਦੋਂ ਤੁਹਾਨੂੰ ਮਜ਼ਬੂਤ constraints, joins, ਅਤੇ ਸਪਸ਼ਟ ਰਿਪੋਰਟਿੰਗ ਚਾਹੀਦੀ ਹੈ (ਉਦਾਹਰਣ ਲਈ, billing status, permissions, order totals) ਤਾਂ ਡੇਟਾ ਨੂੰ ਰਿਲੇਸ਼ਨਲ ਰੱਖੋ। JSONB ਉਹਨਾਂ ਅਸਲੀ ਲਚੀਲੇ ਗੁਣਾਂ ਲਈ ਵਰਤੋ, ਅਤੇ ਇਸਨੂੰ "ਇੱਕ ਵਿਕਸਤ ਹੋਣ ਵਾਲਾ schema" ਸਮਝੋ ਨਾ ਕਿ ਸਾਰਾ ਕੁਝ dump ਕਰਨ ਵਾਲੀ ਥਾਂ।
ਪ੍ਰਦਰਸ਼ਨ ਇੰਡੈਕਸਿੰਗ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ। PostgreSQL ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ:
props @> '{\"beta\":true}')(props->>\'plan\'))ਇਹ ਵਿਕਲਪ ਮਾਪ ਦੇਣ ਵਾਲੇ ਹਨ ਕਿਉਂਕਿ ਬਿਨਾਂ ਇੰਡੈਕਸਾਂ ਦੇ, JSONB ਫਿਲਟਰ rows ਵਧਣ ਉੱਤੇ ਟੇਬਲ ਸਕੈਨ ਬਣ ਸਕਦੇ ਹਨ—ਇੱਕ ਸੁਵਿਧਾ ਜੋ ਹੌਲੀ-ਹੌਲੀ ਸਲੋ ਏਂਡਪੌਇੰਟ ਬਣ ਸਕਦੀ ਹੈ।
ਇੱਕ ਵਜ੍ਹਾਂ ਕਿ ਸਟਾਰਟਅਪ PostgreSQL ਨੂੰ ਉਮੀਦ ਤੋਂ ਲੰਮਾ ਚਲਾਉਂਦੇ ਹਨ ਉਹ ਹੈ ਐਕਸਟੈਂਸ਼ਨ: ਵਿਕਲਪਿਕ "ऐਡ-ਆਨ" ਜੋ ਤੁਸੀਂ ਪ੍ਰਤੀ ਡੇਟਾਬੇਸ ਯੋਗ ਕਰਕੇ Postgres ਦੀ ਸਮਰੱਥਾ ਵਧਾ ਸਕਦੇ ਹੋ। ਹਰ ਨਵੇਂ ਲੋੜ ਲਈ ਨਵੀਂ ਸਰਵਿਸ ਸ਼ਾਮਿਲ ਕਰਨ ਦੀ ਥਾਂ, ਤੁਸੀਂ ਬਹੁਤ ਵਾਰ ਉਹ ਲੋੜੀ ਦੇ ਨਾਲ ਹੀ ਉਸੇ ਡੇਟਾਬੇਸ ਦੇ ਅੰਦਰ ਪੂਰੀ ਕਰ ਸਕਦੇ ਹੋ।
ਐਕਸਟੈਂਸ਼ਨ ਨਵੀਂ ਡੇਟਾ ਟਾਈਪਾਂ, ਇੰਡੈਕਸਿੰਗ ਵਿਧੀਆਂ, ਖੋਜ ਸਮਰੱਥਾਵਾਂ, ਅਤੇ ਯੂਟਿਲਿਟੀ ਫੰਕਸ਼ਨ ਜੋੜ ਸਕਦੇ ਹਨ। ਕੁਝ ਆਮ ਅਤੇ ਮਾਹਰ-ਪਸੰਦ ਉਦਾਹਰਨ:
ਇਹ ਲੋਕਪ੍ਰਿਯ ਹਨ ਕਿਉਂਕਿ ਇਹ ਅਸਲੀ ਉਤਪਾਦ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਦੇ ਹਨ ਬਿਨਾਂ ਵੱਖ-ਵੱਖ ਇਨਫਰਾ ਜੋੜਨ ਦੇ।
ਐਕਸਟੈਂਸ਼ਨ ਮੱਧ-ਅਵਸਥਾ ਵਿੱਚ ਵੱਖਰੀ ਸਿਸਟਮ ਦੀ ਲੋੜ ਘਟਾ ਸਕਦੇ ਹਨ:
ਇਸਦਾ ਮਤਲਬ ਇਹ ਨਹੀਂ ਕਿ Postgres ਹਰ ਚੀਜ਼ ਸਦਾ ਲਈ ਕਰੇ—ਪਰ ਇਹ ਤੁਹਾਨੂੰ ਘੱਟ ਚਲਾਉਣ ਵਾਲੇ ਹਿੱਸਿਆਂ ਨਾਲ ਜਲਦੀ ਸ਼ਿਪ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ।
ਐਕਸਟੈਂਸ਼ਨ ਆਪਰੇਸ਼ਨਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦੇ ਹਨ। ਇੱਕ ਤੇ ਨਿਰਭਰ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਪੱਕਾ ਕਰੋ:
ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ dependencies ਵਾਂਗ ਵਰਤੋ: ਜ਼ਿਆਦਾ ਸੋਚ ਕੇ ਚੁਣੋ, ਵਰਤੋਂ ਦਾ ਕਾਰਨ ਦਸਤਾਵੇਜ਼ ਕਰੋ, ਅਤੇ ਪ੍ਰੋਡਕਸ਼ਨ ਤੋਂ ਪਹਿਲਾਂ ਸਟੇਜਿੰਗ ਵਿੱਚ ਟੈਸਟ ਕਰੋ।
ਡੇਟਾਬੇਸ ਪ੍ਰਦਰਸ਼ਨ ਅਕਸਰ ਫਰਕ ਬਣਾਉਂਦਾ ਹੈ ਇੱਕ ਐਪ ਵਿਚ ਜੋ "ਚੁਸਤ ਮਹਿਸੂਸ ਹੁੰਦੀ ਹੈ" ਅਤੇ ਇੱਕ ਵਿਚ ਜੋ ਅਣਵਿਸ਼ਵਾਸਯੋਗ ਲੱਗਦੀ ਹੈ—ਭਾਵੇਂ ਉਹ ਤਕਨੀਕੀ ਤੌਰ 'ਤੇ ਸਹੀ ਹੋਵੇ। PostgreSQL ਨਾਲ, ਤੁਹਾਨੂੰ ਗਤੀ ਲਈ ਮਜ਼ਬੂਤ ਬੁਨਿਆਦ ਮਿਲਦੀ ਹੈ, ਪਰ ਤੁਸੀਂ ਅਜੇ ਵੀ ਦੋ ਮੁੱਖ ਵਿਚਾਰਾਂ ਨੂੰ ਸਮਝਣਾ ਲਾਜ਼ਮੀ ਹੈ: ਇੰਡੈਕਸ ਅਤੇ ਕਯੂਰੀ ਪਲੈਨਰ।
ਇੰਡੈਕਸ ਤੁਹਾਡੇ ਡੇਟਾ ਲਈ ਇੱਕ ਸਾਰਣੀ ਸੂਚੀ (table of contents) ਵਾਂਗ ਹੈ। ਬਿਨਾਂ ਇਸਦੇ, PostgreSQL ਨੂੰ ਉਹ ਲੱਭਣ ਲਈ ਕਈ ਪੰਗਤੀਆਂ ਸਕੈਨ ਕਰਨੀ ਪੈ ਸਕਦੀਆਂ ਹਨ—ਕੁਝ ਹਜ਼ਾਰ ਰਿਕਾਰਡ ਲਈ ਠੀਕ, ਪਰ ਕੁਝ ਮਿਲੀਅਨ ਤੇ ਦਰਦਨਾਕ।
ਇਹ ਸਿੱਧਾ ਯੂਜ਼ਰ-ਅਨੁਭਵ ਵਿੱਚ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ:
ਕੈਚ: ਇੰਡੈਕਸ ਮੁਫ਼ਤ ਨਹੀਂ। ਉਹ ਡਿਸਕ ਸਪੇਸ ਲੈਂਦੇ ਹਨ, ਲਿਖਤਾਂ 'ਤੇ ਓਵਰਹੈੱਡ ਪਾਉਂਦੇ ਹਨ (ਹਰ insert/update ਨੂੰ ਇੰਡੈਕਸ ਸੰਭਾਲਣਾ ਪੈਂਦਾ ਹੈ), ਅਤੇ ਬਹੁਤ ਜਿਆਦਾ ਇੰਡੈਕਸ ਕੁੱਲ throughput ਘਟਾ ਸਕਦੇ ਹਨ। ਲਕਸ਼ ਹੈ "ਹਰ ਚੀਜ਼ ਨੂੰ ਇੰਡੈਕਸ ਕਰੋ" ਨਹੀਂ—ਲਕੜੀ ਹੈ "ਜੋ ਤੁਸੀਂ ਹਕੀਕਤ ਵਿੱਚ ਵਰਤਦੇ ਹੋ ਉਹੀ ਇੰਡੈਕਸ ਕਰੋ"।
ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਕਯੂਰੀ ਚਲਾਉਂਦੇ ਹੋ, PostgreSQL ਇੱਕ ਯੋਜਨਾ ਬਣਾਉਂਦਾ ਹੈ: ਕਿਹੜੇ ਇੰਡੈਕਸ ਵਰਤਣੇ ਹਨ (ਜੇ ਕੋਈ), ਟੇਬਲਾਂ ਨੂੰ ਕਿਸ ਕ੍ਰਮ ਵਿੱਚ join ਕਰਨਾ ਹੈ, ਸਕੈਨ ਕਰਨਾ ਹੈ ਜਾਂ ਖੋਜਣਾ ਹੈ, ਅਤੇ ਹੋਰ। ਉਹ ਪਲੈਨਰ PostgreSQL ਨੂੰ ਕਈ ਵਰਕਲੋਡਾਂ 'ਤੇ ਚੰਗਾ ਪ੍ਰਦਰਸ਼ਨ ਦਿਵਾਉਂਦਾ ਹੈ—ਪਰ ਇਸਦਾ ਮਤਲਬ ਇਹ ਵੀ ਹੈ ਕਿ ਦੋ ਅਜਿਹੀਆਂ ਕਯੂਰੀਆਂ ਜੋ ਸਮਾਨ ਲੱਗਦੀਆਂ ਹਨ, ਵੱਖ-ਵੱਖ ਵਿਹਾਰ ਕਰ ਸਕਦੀਆਂ ਹਨ।
ਜਦੋਂ ਕੁਝ ਧੀਮਾ ਹੁੰਦਾ ਹੈ, ਤੁਸੀਂ ਪਲੈਨ ਸਮਝਣ ਤੋਂ ਪਹਿਲਾਂ ਅਨੁਮਾਨ ਨਾ ਲਗਾਓ। ਦੋ ਆਮ ਟੂਲ ਮਦਦਗਾਰ ਹਨ:
EXPLAIN: PostgreSQL ਜੋ ਯੋਜਨਾ ਵਰਤੇਗਾ ਉਹ ਦਿਖਾਉਂਦਾ ਹੈ।EXPLAIN ANALYZE: ਕਯੂਰੀ ਚਲਾਉਂਦਾ ਅਤੇ ਅਸਲ ਵਿੱਚ ਕੀ ਹੋਇਆ (ਟਾਈਮਿੰਗ, row counts) ਦਿਖਾਂਦਾ ਹੈ—ਅਕਸਰ ਅਸਲੀ ਡੀਬੱਗਿੰਗ ਲਈ ਇਹੀ ਚਾਹੀਦੀ ਜਾਣਕਾਰੀ ਹੁੰਦੀ ਹੈ।ਤੁਸੀਂ ਹਰ ਲਾਈਨ ਨੂੰ ਵਿਸ਼ੇਸ਼জ্ঞ ਜਿਹਾ ਨਹੀਂ ਪੜ੍ਹਨਾ ਚਾਹੀਦਾ। ਊਪਰਲੇ ਪੱਧਰ 'ਤੇ ਵੀ ਤੁਸੀਂ ਲਾਲ ਝੰਡੇ ਵੇਖ ਸਕਦੇ ਹੋ ਜਿਵੇਂ "sequential scan" ਇੱਕ ਵੱਡੀ ਟੇਬਲ ਉੱਤੇ ਜਾਂ joins ਜੋ ਉਮੀਦ ਨਾਲੋਂ ਕਈ ਵੱਧ rows ਰिटਰਨ ਕਰ ਰਹੇ ਹਨ।
EXPLAIN (ANALYZE) ਨਾਲ ਦੁਬਾਰਾ ਚੈੱਕ ਕਰੋ।ਇਹ ਰਵੈਏ ਨਾਲ ਤੁਹਾਡੀ ਐਪ ਤੇਜ਼ ਰਹਿੰਦੀ ਹੈ ਬਿਨਾਂ ਡੇਟਾਬੇਸ ਨੂੰ ਅਣਵਸ਼ਯਕ premature optimizations ਦਾ ਢੇਰ ਬਣਾ ਦਿੱਤੇ।
PostgreSQL ਇੱਕ scrappy MVP ਲਈ ਚੰਗਾ ਕੰਮ ਕਰਦਾ ਹੈ ਕਿਉਂਕਿ ਤੁਸੀਂ ਛੋਟਾ ਸ਼ੁਰੂ ਕਰ ਸਕਦੇ ਹੋ ਬਿਨਾਂ ਆਪਣੇ ਆਪ ਨੂੰ ਇਕ ਕੋਨੇ 'ਚ ਫੰਸਾਉਣ ਦੇ। ਜਦੋਂ ਗਰੋਥ ਆਉਂਦੀ ਹੈ, ਬਹੁਤ ਵਾਰੀ ਤੁਹਾਨੂੰ ਡ੍ਰਾਮੇਟਿਕ re-architecture ਦੀ ਲੋੜ ਨਹੀਂ ਪੈਂਦੀ—ਸਿਰਫ਼ ਇਕ ਲੜੀ ਸੰਵਿਆਨਸ਼ੀਲ ਕਦਮਾਂ ਦੀ।
ਸਧਾਰਨ ਪਹਿਲਾ ਕਦਮ ਹੈ vertical scaling: ਵੱਡਾ instance (ਜ਼ਿਆਦਾ CPU, RAM, ਤੇਜ਼ਾ ਸਟੋਰੇਜ) ਲਵੋ। ਬਹੁਤ ਸਟਾਰਟਅਪਾਂ ਲਈ ਇਹ ਕੁੱਝ ਮਹੀਨੇ (ਜਾਂ ਸਾਲ) ਦਾ ਸਮਾਂ ਖਰੀਦ ਲੈਂਦਾ ਹੈ ਬਿਨਾਂ ਬਹੁਤ ਕੋਡ ਬਦਲੇ। ਇਹ rollback ਕਰਨ ਵਿੱਚ ਵੀ ਆਸਾਨ ਹੁੰਦਾ ਹੈ ਜੇ ਤੁਸੀਂ overestimate ਕਰ ਲਉ।
ਜਦੋਂ ਤੁਹਾਡੇ ਐਪ 'ਤੇ ਬਹੁਤ ਪੜ੍ਹਨ ਵਾਲੀਆਂ ਕਯੂਰੀਆਂ ਹਨ—ਡੈਸ਼ਬੋਰਡ, analytics ਪੰਨੇ, admin views—read replicas ਮਦਦਗਾਰ ਹੋ ਸਕਦੇ ਹਨ। ਤੁਸੀਂ ਇੱਕ primary ਰੱਖਦੇ ਹੋ ਜਿਸ 'ਤੇ ਲਿਖਤਾਂ ਹੁੰਦੀਆਂ ਹਨ, ਅਤੇ read-heavy ਕਯੂਰੀਆਂ ਨੂੰ replicas 'ਤੇ ਭੇਜ ਦਿੰਦੇ ਹੋ।
ਇਹ ਕੋਮਲ ਰਿਪੋਰਟਿੰਗ ਲਈ ਖਾਸ ਹੈ: ਤੁਸੀਂ replica 'ਤੇ ਅਸੁਲ-ਤਰੀਕੇ ਦਾ ਜਟਿਲ ਕਯੂਰੀ ਚਲਾ ਸਕਦੇ ਹੋ ਬਿਨਾਂ core product experience ਨੂੰ ਜੋਖਮ ਵਿੱਚ ਪਾਏ। ਵਪਸੀ ਟਰੇਡ-ਆਫ ਇਹ ਹੈ ਕਿ replicas ਥੋੜ੍ਹੀ ਦੇਰ ਨਾਲ primary ਤੋਂ ਲੈਗ ਕਰ ਸਕਦੇ ਹਨ, ਇਸ ਲਈ ਉਹਨਾਂ ਨੂੰ "ਲਿਖਣ-ਤੁਰੰਤ-ਪੜ੍ਹਾਈ" ਵਾਲੇ ਪ੍ਰਵਾਹਾਂ ਲਈ ਨਹੀਂ ਵਰਤਣਾ ਚਾਹੀਦਾ।
ਜੇ ਕੁਝ ਟੇਬਲਤਣ ਲੱਖਾਂ ਜਾਂ ਕਰੋੜਾਂ ਰਿਕਾਰਡਾਂ ਵਿੱਚ ਵਧ ਜਾਂਦੀਆਂ ਹਨ, partitioning ਇੱਕ ਵਿਕਲਪ ਬਣ ਜਾਂਦਾ ਹੈ। ਇਹ ਇੱਕ ਵੱਡੀ ਟੇਬਲ ਨੂੰ ਛੋਟੇ ਹਿੱਸਿਆਂ ਵਿੱਚ ਵੰਡਦਾ ਹੈ (ਅਕਸਰ ਸਮੇਂ ਜਾਂ tenant ਦੁਆਰਾ), ਜਿਸ ਨਾਲ ਰੱਖ-ਰਖਾਵ ਅਤੇ ਕੁਝ ਕਿਊਰੀਆਂ ਬਹੁਤ ਸ੍ਹੀਲ ਹੁੰਦੀਆਂ ਹਨ।
ਹਰ ਪ੍ਰਦਰਸ਼ਨ ਸਮੱਸਿਆ SQL ਨਾਲ ਹੱਲ ਨਹੀਂ ਹੁੰਦੀ। ਪ੍ਰਚਲਿਤ ਰੀਡਾਂ ਨੂੰ cache ਕਰਨਾ ਅਤੇ ਹੌਲੀ ਕੰਮ (ਈਮੇਲ, exports, rollups) ਨੂੰ background jobs 'ਚ ਭੇਜਣਾ ਅਕਸਰ ਡੇਟਾਬੇਸ 'ਤੇ ਦਬਾਅ ਘਟਾਉਂਦਾ ਹੈ ਅਤੇ ਉਤਪਾਦ ਨੂੰ ਜਵਾਬਦੇਹ ਰੱਖਦਾ ਹੈ।
PostgreSQL ਚੁਣਨਾ ਫੈਸਲਾ ਦਾ ਅੱਧਾ ਹਿੱਸਾ ਹੈ। ਦੂਜਾ ਹਿੱਸਾ ਇਹ ਹੈ ਕਿ ਤੁਸੀਂ ਇਹ ਕਿਵੇਂ ਚਲਾਉਂਗੇ—ਜਦon deployments ਆਮ ਹੋਣ, ਟ੍ਰੈਫਿਕ ਅਣਜਾਣ ਹੋਵੇ, ਅਤੇ ਕੋਈ ਵੀ Friday ਦੀ ਰਾਤ ਡਿਸਕ ਸਪੇਸ ਡੀਬੱਗ ਕਰਨਾ ਨਹੀਂ ਚਾਹੁੰਦਾ।
ਅਕੀਦਾ managed PostgreSQL ਸੇਵਾ ਉਹ ਰੋਜ਼ਮਰਾ ਕੰਮ ਸਾਂਭ ਲੈਂਦੀ ਹੈ ਜੋ ਸ਼ਾਂਤ-ਛੇਤੀ ਬਹਿਸਾਂ ਦਾ ਕਾਰਨ ਬਣਦਾ ਹੈ:
ਇਸ ਨਾਲ ਇੱਕ ਛੋਟੀ ਟੀਮ ਉਤਪਾਦ 'ਤੇ ਧਿਆਨ ਦੇ ਸਕਦੀ ਹੈ ਜਦੋਂ ਕਿ ਪ੍ਰੋਫੈਸ਼ਨਲ-ਸਤਹ ਦੇ ਆਪਰੇਸ਼ਨ ਮਿਲਦੇ ਹਨ।
ਸਭ managed Postgres ਦੀਆਂ ਸੇਵਾਵਾਂ ਇਕੋ ਜਿਹੀਆਂ ਨਹੀਂ ਹੁੰਦੀਆਂ। ਸਟਾਰਟਅਪਾਂ ਨੂੰ ਇਹ ਪੱਕਾ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ:
ਜੇ ਤੁਹਾਡੀ ਟੀਮ ਕੋਲ ਘੱਟ DB ਮਹਿਰਤ ਹੈ, managed Postgres ਉੱਚ-ਪੈਦਾ-ਨਿਵੇਸ਼ਾ ਚੋਣ ਹੋ ਸਕਦਾ ਹੈ। ਜੇ uptime ਦੀ ਮੰਗ ਸਖਤ ਹੈ (ਪੇਡ ਪਲੈਨ, B2B SLA), ਤਾਂ HA, ਤੇਜ਼ restore ਸਮੇਂ, ਅਤੇ ਸਾਫ਼ operational visibility ਨੂੰ ਪ੍ਰਾਥਮਿਕਤਾ ਦਿਓ। ਜੇ ਬਜਟ ਕਸਿਆ ਹੋਇਆ ਹੈ, ਤਾਂ ਕੁੱਲ ਲਾਗਤ (instance + storage + backups + replicas + egress) ਦੀ ਤੁਲਨਾ ਕਰੋ—ਅਪਣੇ ਅਗਲੇ 6–12 ਮਹੀਨਿਆਂ ਲਈ ਕਿਸ reliability ਦੀ ਲੋੜ ਹੈ, ਉਸ ਦੇ ਅਨੁਸਾਰ ਫੈਸਲਾ ਕਰੋ।
ਅਖੀਰ ਵਿੱਚ, ਰੈਗੁਲਰ ਰੀਸਟੋਰ ਟੈਸਟ ਕਰੋ। ਜਿਸ ਬੈਕਅੱਪ ਨੂੰ ਤੁਸੀਂ ਕਦੇ restore ਨਹੀਂ ਕੀਤਾ, ਉਹ ਆਸ ਹੈ, ਯੋਜਨਾ ਨਹੀਂ।
ਇੱਕ ਸਟਾਰਟਅਪ ਐਪ ਅਕਸਰ "ਇੱਕ-ਵੱਖ-ਵੱਖ ਯੂਜ਼ਰ" ਵਾਲੀ ਨਹੀਂ ਹੁੰਦੀ। ਤੁਹਾਡੇ ਕੋਲ ਗ੍ਰਾਹਕ ਬ੍ਰਾਊਜ਼ ਕਰ ਰਹੇ ਹੁੰਦੇ ਹਨ, background jobs ਰਿਕਾਰਡ ਅਪਡੇਟ ਕਰ ਰਹੇ ਹੁੰਦੇ ਹਨ, analytics events ਲਿਖ ਰਹੇ ਹੁੰਦੇ ਹਨ, ਅਤੇ ਇੱਕ admin ਡੈਸ਼ਬੋਰਡ maintenance ਕਰ ਰਿਹਾ ਹੁੰਦਾ ਹੈ—ਸਾਰੇ ਇਕੱਠੇ। PostgreSQL ਇੱਥੇ ਮਜ਼ਬੂਤ ਹੈ ਕਿਉਂਕਿ ਇਹ ਮਿਲੇ-ਜੁਲੇ ਵਰਕਲੋਡਾਂ ਹੇਠਾਂ ਡੇਟਾਬੇਸ ਨੂੰ ਰیسਪਾਂਸਿਵ ਰੱਖਣ ਲਈ ਬਣਿਆ ਗਿਆ ਹੈ।
PostgreSQL MVCC (Multi-Version Concurrency Control) ਵਰਤਦਾ ਹੈ। ਸਧਾਰਨ ਸ਼ਬਦਾਂ ਵਿੱਚ: ਜਦੋਂ ਇੱਕ row update ਹੁੰਦੀ ਹੈ, PostgreSQL ਆਮ ਤੌਰ 'ਤੇ ਪੁਰਾਣੀ ਵਰਜ਼ਨ ਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਰੱਖਦਾ ਹੈ ਅਤੇ ਨਵਾਂ ਵਰਜ਼ਨ ਬਣਾਉਂਦਾ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਪੜ੍ਹਨ ਵਾਲੇ ਅਕਸਰ ਪੁਰਾਣੀ ਵਰਜ਼ਨ ਪੜ੍ਹਦੇ ਰਹਿ ਸਕਦੇ ਹਨ ਜਦੋਂ ਲਿਖਣ ਵਾਲੇ ਅਪਡੇਟ ਕਰ ਰਹੇ ਹੁੰਦੇ ਹਨ, ਬਦਲੇ ਵਿੱਚ ਸਭ ਨੂੰ ਰੁਕਣ ਦੇ।
ਇਸ ਨਾਲ ਉਹ "ਟ੍ਰੈਫਿਕ ਜਮ" ਪ੍ਰਭਾਵ ਘੱਟ ਹੁੰਦਾ ਹੈ ਜੋ ਕੁਝ ਸਿਸਟਮਾਂ ਵਿੱਚ ਜ਼ਿਆਦਾ ਹੁੰਦਾ ਹੈ ਜਿੱਥੇ ਪੜ੍ਹਾਈ ਲਿਖਾਈ ਨੂੰ ਬਲਾਕ ਕਰਦੀ ਹੈ।
MVCC ਆਮ ਪੈਟਰਨਾਂ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਜਿਵੇਂ:
PostgreSQL ਕੁਝ operations ਲਈ locks ਵਰਤਦਾ ਹੈ, ਪਰ MVCC ਰੋਜ਼ਮਰਾਰ ਪੜ੍ਹਨ-ਲਿਖਨ ਨੂੰ ਇਕੱਠੇ ਚਲਾਉਣਾ ਆਸਾਨ ਬਣਾਉਂਦਾ ਹੈ।
ਉਹ ਪੁਰਾਣੇ row ਵਰਜ਼ਨ ਤੁਰੰਤ ਗਾਇਬ ਨਹੀਂ ਹੁੰਦੇ। PostgreSQL ਇਹ ਸਪੇਸ VACUUM ਰਾਹੀਂ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ (ਆਮ ਤੌਰ 'ਤੇ autovacuum ਦੁਆਰਾ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ)। ਜੇ cleanup ਪਿੱਛੇ ਰਹਿ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਤੁਸੀਂ "bloat" (ਵਰਜ ਘਰਬ-ਖਰਾਬ ਸਪੇਸ) ਅਤੇ ਧੀਮੀ ਕਯੂਰੀਆਂ ਦੇਖ ਸਕਦੇ ਹੋ।
ਪ੍ਰਯੋਗਿਕ ਨਤੀਜਾ: table bloat ਅਤੇ ਲੰਮੇ ਚਲ ਰਹੀਆਂ ਟਰਾਂਜ਼ੈਕਸ਼ਨਾਂ ਨੂੰ ਮਾਨੀਟਰ ਕਰੋ। ਲੰਮੇ ਟਰਾਂਜ਼ੈਕਸ਼ਨਾਂ cleanup ਰੋਕ ਸਕਦੀਆਂ ਹਨ, ਜਿਸ ਨਾਲ bloat ਤੇਜ਼ ਹੋ ਜਾਂਦਾ ਹੈ। slow queries, ਸੈਸ਼ਨ ਜੋ "ਹਮੇਸ਼ਾਂ ਚੱਲਦੇ ਰਹਿੰਦੇ ਹਨ", ਅਤੇ autovacuum ਜੇ ਪਿੱਛੇ ਰਹਿ ਰਿਹਾ ਹੈ, ਉੱਤੇ ਨਜ਼ਰ ਰੱਖੋ।
ਸ਼ੁਰੂ ਵਿੱਚ ਡੇਟਾਬੇਸ ਚੁਣਨਾ "ਸਭ ਤੋਂ ਵਧੀਆ" ਚੁਣਣ ਬਾਰੇ ਨਹੀਂ, ਬਲਕਿ ਤੁਹਾਡੇ ਉਤਪਾਦ ਦੀ ਸ਼ਕਲ: ਡੇਟਾ ਮਾਡਲ, ਕਯੂਰੀ ਪੈਟਰਨ, ਟੀਮ ਦੀ ਸਕੀਲ, ਅਤੇ ਕਿੰਨੀ ਤੇਜ਼ੀ ਨਾਲ ਲੋੜਾਂ ਬਦਲਣਗੀਆਂ, ਨਾਲ ਮੇਲ ਖਾਣ ਬਾਰੇ ਹੈ।
PostgreSQL ਇੱਕ ਆਮ ਡਿਫਾਲਟ ਹੈ ਕਿਉਂਕਿ ਇਹ ਵੱਖ-ਵੱਖ ਲੋੜਾਂ ਨੂੰ ਚੰਗੀ ਤਰ੍ਹਾਂ ਸੰਭਾਲਦਾ ਹੈ: ਮਜ਼ਬੂਤ ACID ਟਰਾਂਜ਼ੈਕਸ਼ਨ, ਰਿਚ SQL ਫੀਚਰ, ਸ਼ਾਨਦਾਰ ਇੰਡੈਕਸਿੰਗ ਵਿਕਲਪ, ਅਤੇ schema ਨੂੰ ਵਿਕਸਤ ਕਰਨ ਦੀ ਥਾਂ। ਬਹੁਤ ਸਟਾਰਟਅਪਾਂ ਲਈ, ਇਹ ਇੱਕ "ਇਕ ਡੇਟਾਬੇਸ" ਹੈ ਜੋ ਬਿਲਿੰਗ, ਯੂਜ਼ਰ ਅਕਾਊਂਟ, ਥੋੜ੍ਹੇ-ਬਹੁਤ analytics queries, ਅਤੇ ਇਨ-DB semi-structured data (JSONB) ਨੂੰ ਕਵਰ ਕਰ ਸਕਦਾ ਹੈ—ਬਿਨਾਂ ਦੇਰ ਨਾਲ ਵੱਖ-ਵੱਖ ਸਿਸਟਮਾਂ ਵਿੱਚ ਵੰਡੇ।
ਜਿੱਥੇ ਇਹ ਭਾਰੀ ਮਹਿਸੂਸ ਹੋ ਸਕਦਾ ਹੈ: ਜਦੋਂ ਤੁਸੀਂ ਵਧਦੇ ਹੋ ਤਾਂ ਡੇਟਾ ਮਾਡਲਿੰਗ ਅਤੇ ਕਯੂਰੀ ਟਿਊਨਿੰਗ 'ਤੇ ਵੱਧ ਸਮਾਂ ਲੱਗ ਸਕਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਜੇ ਤੁਸੀਂ ਜਟਿਲ joins ਅਤੇ ਰਿਪੋਰਟਿੰਗ ਵੱਲ ਜ਼ੋਰ ਦੇ ਰਹੇ ਹੋ।
MySQL ਵਧੀਆ ਚੋਣ ਹੋ ਸਕਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਸਪੱਸ਼ਟ OLTP ਵਰਕਲੋਡ ਲਈ (ਆਮ ਵੈੱਬ ਐਪ ਰੀਡ/ਰਾਈਟ) ਅਤੇ ਉਨ੍ਹਾਂ ਟੀਮਾਂ ਲਈ ਜੋ ਪਹਿਲਾਂ ਤੋਂ ਇਸਨੂੰ ਜਾਣਦੀਆਂ ਹਨ। ਇਹ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਸਪੋਰਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਮੈਨੇਜਡ ਵਿਕਲਪ ਪੱਕੇ ਹਨ, ਅਤੇ ਕੁਝ ਵਾਤਾਵਰਣਾਂ 'ਚ ਚਲਾਉਣਾ ਆਸਾਨ ਹੋ ਸਕਦਾ ਹੈ।
ਟਰੇਡ-ਆਫ: feature ਲੋੜਾਂ (ਅਡਵਾਂਸਡ ਇੰਡੈਕਸਿੰਗ, ਜਟਿਲ ਕਯੂਰੀਆਂ, constraints ਦੀ ਕਠੋਰਤਾ) ਦੇ ਮਾਮਲੇ ਵਿੱਚ, PostgreSQL ਅਕਸਰ ਬਾਕੀ ਉਪਕਰਣ ਦੇ ਤੌਰ 'ਤੇ ਹੋਰ ਟੂਲ ਦਿੰਦਾ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਇਹ ਨਹੀਂ ਕਿ MySQL "ਵਧੀਆ ਨਹੀਂ"—ਸਿਰਫ਼ ਕਿ ਕੁਝ ਟੀਮ feature ਸੀਮਾਵਾਂ ਨੂੰ ਜਲਦੀ ਟੱਕਰ ਦੇ ਸਕਦੀਆਂ ਹਨ।
NoSQL ਡੇਟਾਬੇਸ ਉਸ ਸਮੇਂ ਚਮਕਦੇ ਹਨ ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ:
ਟਰੇਡ-ਆਫ: ਤੁਸੀਂ ਆਮ ਤੌਰ 'ਤੇ ਕਈ ਤਰ੍ਹਾਂ ਦੇ-ad-hoc querying, cross-entity constraints, ਜਾਂ multi-row transactional guarantees ਨੂੰ ਘਵਾ ਦੇਂਦੇ ਹੋ—ਤਾਂ ਇਹ ਗੱਲਾਂ application code ਵਿੱਚ ਦੁਬਾਰਾ ਬਣਾਣੀਆਂ ਪੈ ਸਕਦੀਆਂ ਹਨ।
ਜੇ ਤੁਸੀਂ ਅਣਿਸ਼ਚਿਤ ਹੋ, PostgreSQL ਅਕਸਰ ਸਭ ਤੋਂ ਸੁਰੱਖਿਅਤ ਡਿਫਾਲਟ ਹੁੰਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਹੋਰ ਦਰਵਾਜ਼ੇ ਖੁੱਲੇ ਰੱਖਦਾ ਹੈ ਬਿਨਾਂ ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਹੀ ਕਿਸੇ ਖਾਸ ਸਿਸਟਮ ਵਿੱਚ ਬੰਨ੍ਹਨ ਦੇ।
ਡੇਟਾਬੇਸ ਚੁਣਨਾ ਇੱਕ ਵਪਾਰੀ ਸੰਬੰਧ ਚੁਣਨ ਦੇ ਬਰਾਬਰ ਹੈ। ਭਾਵੇਂ ਅੱਜ ਪ੍ਰੋਡਕਟ ਵਧੀਆ ਹੋਵੇ, ਪਰ ਮੂਲਿਆਂ, ਸ਼ਰਤਾਂ, ਅਤੇ ਤਰਜੀਹਾਂ ਬਦਲ ਸਕਦੀਆਂ ਹਨ—ਅਕਸਰ ਉਸ ਵੇਲੇ ਜਦੋਂ ਤੁਹਾਡੀ ਸਟਾਰਟਅਪ ਘੱਟ ਸਮਰਥਿਆ ਵਾਲੀ ਹੁੰਦੀ ਹੈ।
PostgreSQL ਦਾ ਕੋਰ ਡੇਟਾਬੇਸ ਓਪਨ-ਸੋਰਸ ਹੈ ਅਤੇ ਪ੍ਰੈਮੀਸ਼ਨ ਲਾਇਸੈਂਸ ਹੇਠਾਂ ਆਉਂਦਾ ਹੈ। ਰੁਪਾਇਤੀ ਤੌਰ 'ਤੇ, ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਤੁਸੀਂ PostgreSQL ਖੁਦ ਵਰਤਣ ਲਈ ਪ੍ਰਤੀ-ਕੋਰ ਜਾਂ ਪ੍ਰਤੀ-ਫੀਚਰ ਲਾਇਸੈਂਸ ਫੀਸ ਨਹੀਂ ਭ੍ਰਗ੍ਹਣੇ ਹੋ ਅਤੇ ਤੁਸੀਂ ਕਿਸੇ ਇਕ ਵਿਨਡਰ ਵਰਗੇ ਸੰਸਕਰਨ 'ਤੇ ਨਿਰਭਰ ਨਹੀਂ ਹੋ।
"Vendor lock-in" ਆਮ ਤੌਰ 'ਤੇ ਦੋ ਤਰੀਕਿਆਂ ਨਾਲ ਉਭਰਦਾ ਹੈ:
PostgreSQL ਇਹ ਜੋਖਮ ਘਟਾਉਂਦਾ ਹੈ ਕਿਉਂਕਿ DB ਵਿਹਾਰ ਚੰਗੀ ਤਰ੍ਹਾਂ ਜਾਣਿਆ ਹੋਇਆ ਹੈ, ਬਹੁਤ ਸਾਰੀਆਂ ਜਗ੍ਹਾਂ 'ਤੇ ਲਾਗੂ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਪ੍ਰਦਾਤਿਆਂ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
PostgreSQL ਲਗਭਗ ਕਿਸੇ ਵੀ ਜਗ੍ਹਾ ਚਲ ਸਕਦਾ ਹੈ: ਤੁਹਾਡੇ ਲੈਪਟੌਪ, ਇੱਕ VM, Kubernetes, ਜਾਂ ਇੱਕ managed service। ਇਹ ਲਚੀਲਾਪਨ ਵਿਕਲਪ ਹੈ—ਜੇ ਕੋਈ ਪ੍ਰਦਾਤਾ ਕੀਮਤ ਵਧਾ ਦੇਵੇ, outage pattern ਅਸਹਿਣਯੋਗ ਹੋਵੇ, ਜਾਂ compliance ਲੋੜਾਂ ਨੂੰ ਪੂਰਾ ਨਾ ਕਰੇ, ਤਾਂ ਤੁਸੀਂ ਘੱਟ rewrite ਕਰਕੇ move ਕਰ ਸਕਦੇ ਹੋ।
ਇਸਦਾ ਮਤਲਬ ਇਹ ਨਹੀਂ ਕਿ migrations ਆਸਾਨ ਹਨ, ਪਰ ਇਹ ਤੁਹਾਨੂੰ negotiation ਅਤੇ ਯੋਜਨਾ ਬਣਾਉਣ ਲਈ ਮਜ਼ਬੂਤ ਮੌਕਾ ਦਿੰਦਾ ਹੈ।
PostgreSQL ਮਿਆਰੀ SQL ਤੇ ਇੱਕ ਵੱਡੇ ਟੂਲਿੰਗ ਇਕੋਸਿਸਟਮ 'ਤੇ ਨਿਰਭਰ ਹੈ: ORMs, migration frameworks, backup tools, ਅਤੇ monitoring। ਤੁਸੀਂ ਬਹੁਤ ਸਾਰੇ clouds ਅਤੇ specialists ਤੋਂ PostgreSQL ਲਭੋਗੇ, ਅਤੇ ਜ਼ਿਆਦਾਤਰ ਟੀਮਾਂ ਲਈ ਭਰਤੀ ਵੀ ਆਸਾਨ ਹੁੰਦੀ ਹੈ।
ਪੋਰਟੇਬਿਲਿਟੀ ਨੂੰ ਉਚੀ ਰੱਖਣ ਲਈ ਸਾਵਧਾਨ ਰਹੋ:
ਚੋਣ-ਵਿਕਲਪ ਸਿਰਫ਼ ਹੋਸਟਿੰਗ ਬਾਰੇ ਨਹੀਂ—ਇਹ ਇਸ ਬਾਰੇ ਵੀ ਹੈ ਕਿ ਤੁਹਾਡਾ ਡੇਟਾ ਮਾਡਲ ਕਿੰਨਾ ਸਪষ্ট ਹੈ। ਸ਼ੁਰੂਆਤੀ ਆਦਤਾਂ ਬਾਅਦ ਵਿੱਚ ਫਾਇਦੇ ਦਿੰਦੀਆਂ ਹਨ:
ਇਹ ਪ੍ਰਥਾਵਾਂ audits, incident response, ਅਤੇ provider moves ਨੂੰ ਬਹੁਤ ਘੱਟ ਤਣਾਅ ਵਾਲਾ ਬਣਾ ਦਿੰਦੀਆਂ ਹਨ—ਬਿਨਾਂ ਤੁਹਾਡੇ MVP ਨੂੰ ਦਰਕਿਨਾਰ ਕੀਤੇ।
ਇਹ ਗੱਲ ਅਚ੍ਛੀ ਹੈ: ਜਿਹੜੀਆਂ ਟੀਮਾਂ PostgreSQL ਨੂੰ ਸਹੀ ਕਾਰਨਾਂ ਲਈ ਚੁਣਦੀਆਂ ਹਨ, ਉਹ ਵੀ ਕੁਝ ਆਮ ਸਮੱਸਿਆਵਾਂ 'ਤੇ ਠੋਕਰ ਖਾਂਦੀਆਂ ਹਨ। ਖੁਸ਼ਕਿਸਮਤੀ ਨਾਲ: ਜ਼ਿਆਦਾਤਰ ਪ੍ਰਭਾਵੀ ਤੱਮੀਰਾਂ ਨਾਲ ਰੋਕੀ ਜਾ ਸਕਦੀਆਂ ਹਨ।
ਇੱਕ ਆਮ गलਤੀ ਹੈ ਵੱਡਾ JSONB: JSONB ਨੂੰ ਸਬ ਕੁਝ "ਬਾਦ ਵਿੱਚ ਮਾਡਲ ਕਰਾਂਗੇ" ਲਈ dump ਸਥਾਨ ਸਮਝਣਾ। JSONB ਲਚੀਲਾ ਹੈ, ਪਰ ਵੱਡੇ, ਘੁੰਮਫਿਰੇ ਦਸਤਾਵੇਜ਼ ਮੁਸ਼ਕਲ ਹੋ ਜਾਂਦੇ ਹਨ—ਵੈਲਿਡੇਟ ਕਰਨਾ ਔਖਾ, ਇੰਡੈਕਸ ਕਰਨਾ ਔਖਾ, ਅਤੇ ਅਪਡੇਟ ਮਹਿੰਗਾ।
ਮੂਲ ਇਕਾਈਆਂ relational ਰੱਖੋ (users, orders, subscriptions), ਅਤੇ JSONB ਨੂੰ ਵਾਸਤਵ ਵਿੱਚ ਵੱਖ-ਵੱਖ ਖੇਤਰਾਂ ਲਈ ਵਰਤੋ। ਜੇ ਤੁਸੀਂ ਅਕਸਰ JSONB keys 'ਤੇ filter ਕਰ ਰਹੇ ਹੋ, ਤਾਂ ਉਹਨਾਂ ਨੂੰ ਅਸਲ column ਬਣਾਉਣ 'ਤੇ ਸੋਚੋ।
ਹੋਰ ਆਮ ਮੁੱਦੇ: missing indexes। 1,000 rows 'ਤੇ ਐਪ ਠੀਕ ਲੱਗਦਾ ਹੈ ਅਤੇ 1,000,000 'ਤੇ ਹੱਡੀ-ਹੱਡੀ ਹੋ ਜਾਂਦਾ ਹੈ। ਅਸਲ query patterns (WHERE, JOIN, ORDER BY) ਦੇ ਆਧਾਰ 'ਤੇ ਇੰਡੈਕਸ ਜੋੜੋ ਅਤੇ EXPLAIN ਨਾਲ ਜਾਂਚੋ ਜਦੋਂ ਕੁਝ slow ਹੋਵੇ।
ਅਤੇ ਅਨਬਾਉਂਡ-ਗਰੋਥ ਟੇਬਲਾਂ (event logs, audit trails, session tables) ਨੂੰ ਸੁੰਨਢ ਨਾ ਛੱਡੋ। retention policies, partitioning ਅਤੇ scheduled purges ਸ਼ੁਰੂ ਤੋਂ ਹੀ ਜੋੜੋ।
PostgreSQL ਦੇ connection limits ਹੁੰਦੇ ਹਨ; ਇੱਕ ਅਚਾਨਕ spike ਅਤੇ ਇੱਕ-ਕਨੈਕਸ਼ਨ-ਪ੍ਰਤੀ-ਰਿਕਵੇਸਟ ਪੈਟਰਨ ਉਨ੍ਹਾਂ ਨੂੰ ਖਤਮ ਕਰ ਸਕਦਾ ਹੈ। connection pooler ਵਰਤੋ ਅਤੇ ਟਰਾਂਜ਼ੈਕਸ਼ਨਾਂ ਨੂੰ ਛੋਟਾ ਰੱਖੋ।
N+1 queries ਤੋਂ ਬਚੋ: related data ਬੈਚਾਂ ਵਿੱਚ ਲੈਓ ਜਾਂ joins ਨਾਲ ਲਾਓ। ਅਤੇ slow migrations ਦੀ ਯੋਜਨਾ ਕਰੋ: ਵੱਡੇ ਟੇਬਲ rewrites ਲਿਖਤਾਂ ਨੂੰ ਰੋਕ ਸਕਦੇ ਹਨ—additive migrations ਅਤੇ backfills ਪਸੰਦ ਕਰੋ।
slow query logs ਚਾਲੂ ਕਰੋ, ਬੁਨਿਆਦੀ metrics (connections, CPU, I/O, cache hit rate) ਟ੍ਰੈਕ ਕਰੋ, ਅਤੇ ਸਧਾਰਨ alerts ਸੈੱਟ ਕਰੋ। ਤੁਸੀਂ regressions ਨੂੰ ਵਰਤੋਂਕਾਰਾਂ ਤੋਂ ਪਹਿਲਾਂ ਪਕੜ ਸਕੋਗੇ।
ਇੱਕ ਘੱਟੋ-ਘੱਟ schema ਦਾ ਪ੍ਰੋਟੋਟਾਈਪ ਬਣਾਓ, ਆਪਣੀਆਂ ਟੌਪ 3–5 ਕਯੂਰੀਆਂ ਨੂੰ load-test ਕਰੋ, ਅਤੇ ਆਪਣੀ hosting pendek ਨੂੰ ਆਪਣੀ ਟੀਮ ਦੀ ਆਪਰੇਸ਼ਨਲ ਆਸਾਨੀ ਦੇ ਅਧਾਰ ਤੇ ਚੁਣੋ (managed PostgreSQL vs self-hosted)।
ਜੇ ਤੁਹਾਡਾ ਲਕੜੀ ਮਕਸਦ ਤੇਜ਼ੀ ਨਾਲ ਚਲਣਾ ਅਤੇ ਇੱਕ ਪਰੰਪਰਾਗੱਤ, ਸਕੇਲਯੋਗ ਸਟੈਕ ਰੱਖਣਾ ਹੈ, ਤਾਂ ਸੋਚੋ ਕਿ ਸ਼ੁਰੂ ਤੋਂ ਹੀ Postgres ਨੂੰ workflow 'ਚ ਰੱਖ ਲਓ। ਉਦਾਹਰਨ ਵਜੋਂ, Koder.ai ਟੀਮਾਂ ਨੂੰ chat ਰਾਹੀਂ ਵੈੱਬ/ਸਰਵਰ/ਮੋਬਾਈਲ ਐਪ ਬਣਾਉਣ ਦਿੰਦਾ ਹੈ ਅਤੇ ਜਾਣ-ਪਛਾਣ ਵਾਲੀ ਆਰਕੀਟੈਕਚਰ (React + Go + PostgreSQL) ਜਨਰੇਟ ਕਰਦਾ ਹੈ, planning mode, source export, deployment/hosting, ਅਤੇ snapshots/rollback ਵਰਗੀਆਂ choices ਦੇ ਨਾਲ—ਉਹ ਲੋਕਾਂ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ ਜਿਹੜੇ ਤੇਜ਼ੀ ਚਾਹੁੰਦੇ ਹਨ ਬਿਨਾਂ ਨੋ-ਕੋਡ ਬਲੈਕ ਬਾਕਸ ਵਿੱਚ ਆਪਰੇਸ਼ਨਲ ਲਾਕ-ਇਨ ਦੇ।
ਇਸਦਾ ਮਤਲਬ ਇਹ ਹੈ ਕਿ PostgreSQL ਇੱਕ ਸੁਰੱਖਿਅਤ, ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਅਨੁਕੂਲ ਸ਼ੁਰੂਆਤੀ ਚੋਣ ਹੈ ਜੋ ਤੁਸੀਂ ਬਿਨਾਂ ਲੰਮਾ ਜ਼ਹਿਰ-ਖੋਜ ਕਰਨ ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ ਅਪਣਾਈ ਜਾ ਸਕਦੀ ਹੈ.
ਬਹੁਤੇ ਸਟਾਰਟਅਪਾਂ ਲਈ, ਇਹ ਫੈਸਲਾ ਘੱਟ ਕਰਨ ਦਾ ਮਤਲਬ ਹੈ ਕਿਉਂਕਿ ਇਹ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਸਮਝਿਆ ਜਾਂਦਾ ਹੈ, ਭਰਤੀ ਕਰਨ ਵਿੱਚ ਆਸਾਨ ਹੈ, ਟੂਲਿੰਗ/ਹੋਸਟਿੰਗ ਨਾਲ ਚੰਗੀ ਤਰ੍ਹਾਂ ਸਹਾਇਤਾ ਮਿਲਦੀ ਹੈ ਅਤੇ ਜਦੋਂ ਲੋੜ ਬਦਲੀ ਤਾਂ ਇਹ ਆਮ ਤੌਰ 'ਤੇ ਤੁਰੰਤ ਰੀਰਾਇਟ ਦੀ ਲੋੜ ਨਹੀਂ ਪੈਂਦਾ।
PostgreSQL ਇੱਕ ਰਿਲੇਸ਼ਨਲ ਡੇਟਾਬੇਸ ਹੈ ਜੋ ਉਹ ਸ਼ੇਪ ਦੇ ਕਾਰਜਾਂ ਲਈ ਬਹੁਤ ਚੰਗਾ ਹੈ ਜੋ ਅਕਸਰ "ਯੂਜ਼ਰ + ਅਕਾਊਂਟ + ਪਰਮਿਸ਼ਨ + ਬਿਲਿੰਗ + ਐਕਟਿਵਿਟੀ" ਵਰਗੇ ਹੁੰਦੇ ਹਨ.
ਇਹ ਤੁਹਾਨੂੰ ਦਿੰਦਾ ਹੈ:
ਜਦੋਂ ਤੁਹਾਨੂੰ ਕਈ ਸਬੰਧਿਤ ਲਿਖਤਾਂ 'ਤੇ ਸਹੀਪਨ ਦੀ ਲੋੜ ਹੋਵੇ (ਉਦਾਹਰਣ ਨੂੰ ਹੁਕਮ ਬਣਾਓ + ਇਨਵੈਂਟਰੀ ਰੀਜ਼ਰਵ ਕਰੋ + ਭੁਗਤਾਨ ਇਰਾਦਾ ਦਰਜ ਕਰੋ), ਤਦੋਂ ACID ਟਰਾਂਜ਼ੈਕਸ਼ਨਾਂ ਦੀ ਜ਼ਰੂਰਤ ਹੁੰਦੀ ਹੈ.
ਇਹ ਕਦਮ ਇੱਕ ਟਰਾਂਜ਼ੈਕਸ਼ਨ ਵਿੱਚ ਰੱਖੋ ਤਾਂ ਜੋ ਉਹ ਇਕੱਠੇ ਜਾਂ ਫੇਲ ਹੋਣ—ਇਸ ਨਾਲ ਆਧੇ-ਅਧੂਰੇ ਰਿਕਾਰਡਾਂ (ਗੁੰਮ ਹੋਏ ਆਰਡਰ, ਦੁਹਰਾਉਣ ਵਾਲੇ ਚਾਰਜ) ਤੋਂ ਬਚਾਅ ਹੁੰਦਾ ਹੈ।
Constraints ਅਤੇ foreign keys ਡੇਟਾਬੇਸ ਸਰਹੱਦ 'ਤੇ ਨਿਯਮ ਲਗਾਉਂਦੇ ਹਨ ਤਾਂ ਕਿ ਗਲਤ ਸਥਿਤੀਆਂ ਸਿਸਟਮ ਵਿੱਚ ਪ੍ਰਵੇਸ਼ ਨਾ ਕਰ ਸਕਣ.
ਉਦਾਹਰਨਾਂ:
UNIQUE(email) ਨਕਲ ਖਾਤਿਆਂ ਤੋਂ ਰੋਕਦਾ ਹੈCHECK(quantity >= 0) ਗਲਤ ਮੁੱਲਾਂ ਨੂੰ ਅਣਮੁਨਾਸਿਬ ਕਰਦਾ ਹੈਇਸ ਨਾਲ ਇਹ ਭਰੋਸਾ ਬਣਦਾ ਹੈ ਕਿ ਸਹੀਪਨ ਹਰ ਕੋਡ ਪਾਥ 'ਤੇ ਨਿਰਭਰ ਨਹੀਂ ਰਹਿੰਦਾ।
JSONB ਨੂੰ ਉਹਨਾਂ ਫੀਲਡਾਂ ਲਈ ਇਕ “ਪਰੈਸ਼ਰ ਵੈਲਵ” ਵਜੋਂ ਵਰਤੋਂ ਜੇੜੀਆਂ ਵਕਰ-ਵਕਰ ਹੁੰਦੀਆਂ ਹਾਂ ਜਾਂ ਤੇਜ਼ ਬਦਲਦੀਆਂ ਰਹਿੰਦੀਆਂ ਹਨ, ਪਰ ਮੂਲ ਇਕਾਈਆਂ ਨੂੰ ਰਿਲੇਸ਼ਨਲ ਰੱਖੋ.
ਚੰਗੇ ਇਸਤੇਮਾਲ:
ਜੇ ਤੁਸੀਂ ਆਮ ਤੌਰ 'ਤੇ JSONB ਕੀਜ਼ 'ਤੇ ਛੰਨੀ ਕਰ ਰਹੇ ਹੋ, ਤਾਂ ਸੰਭਵ ਹੈ ਕਿ ਤੁਸੀਂ ਉਹਨਾਂ ਖੇਤਰਾਂ ਨੂੰ ਕਾਲਮ ਬਣਾਉਣਾ ਚਾਹੀਦਾ ਹੈ।
ਤੁਸੀਂ ਉਹ ਹਿੱਸੇ ਇੰਡੈਕਸ ਕਰੋ ਜਿਹੜੇ ਤੁਸੀਂ ਬਾਰ-ਬਾਰ ਕਿਊਰੀ ਕਰਦੇ ਹੋ.
ਆਮ ਚੋਣਾਂ:
props @> '{\"beta\":true}')(props->>\'plan\'))ਇੰਡੈਕਸਾਂ ਦੇ ਬਿਨਾਂ, JSONB ਫਿਲਟਰ rows ਵਧਣ ਤੇ ਫੁੱਲ ਟੇਬਲ ਸਕੈਨ ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹਨ—ਇੱਕ ਸਹੂਲਤ ਜੋ ਇਕ ਸست ਐਂਡਪੌਇੰਟ ਬਣ ਸਕਦੀ ਹੈ।
ਐਕਸਟੈਂਸ਼ਨ ਉਹ 추가apabilities ਹਨ ਜੋ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਵਿੱਚ ਨਵੇਂ ਡੇਟਾ ਟਾਈਪ, ਇੰਡੈਕਸਿੰਗ ਜਾਂ ਖੋਜ ਸਮਰੱਥਾਵਾਂ ਜੋੜ ਸਕਦੀਆਂ ਹਨ ਬਗੈਰ ਨਵੀਂ ਸਰਵਿਸ ਜੋੜੇ.
ਮੁਹਤੱਵਪੂਰਨ ਉਦਾਹਰਨ:
pg_trgm: ਤੇਜ਼ fuzzy text matching ਲਈ trigram indexuuid-ossp: SQL ਵਿੱਚ UUID ਬਣਾਉਣ ਲਈ functionsਕਿਸੇ ਐਕਸਟੈਂਸ਼ਨ 'ਤੇ ਨਿਰਭਰ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡਾ managed provider ਉਸਨੂੰ ਸਪੋਰਟ ਕਰਦਾ ਹੈ ਅਤੇ ਉਸਦੇ ਆਪਰੇਸ਼ਨਲ ਪ੍ਰਭਾਵ ਨੂੰ ਸਟੇਜਿੰਗ 'ਚ ਟੈਸਟ ਕਰੋ।
ਸਬ ਤੋਂ ਪਹਿਲਾਂ ਅਸਲ ਢੀਠ ਕੀ ਹੈ ਉਹ ਲੱਭੋ—ਅਨੁਮਾਨ ਲਗਾਉਣ ਦੀ ਬਜਾਏ.
ਵਿਸ਼ੇਸ਼ ਤਰੀਕਾ:
EXPLAIN ANALYZE ਚਲਾਕੀ ਨਾਲ ਵੇਖੋ ਕਿ ਅਸਲ ਵਿੱਚ ਕੀ ਹੋਇਆWHERE/JOIN/ ਨੂੰ ਮਿਲਦਿਆਂ ਇੰਡੈਕਸ ਜੋੜੋ ਜਾਂ ਬਦਲੋਆਮ ਰਾਹ:
ਇਸਦੇ ਨਾਲ caching ਅਤੇ background jobs ਵਰਗੀਆਂ ਤਕਨੀਕਾਂ ਨਾਲ DB 'ਤੇ ਦਬਾਅ ਘਟਾਓ।
Managed Postgres ਆਮ ਤੌਰ 'ਤੇ ਬੈਕਅੱਪ, patching, ਮਾਨੀਟਰਨਿੰਗ ਅਤੇ HA ਦੇ ਵਿਕਲਪ ਸੁਪਰਵਾਈਜ਼ ਕਰਦਾ ਹੈ—ਪਰ ਵੇਖੋ ਕਿ ਵੇਰਵੇ ਕੀ ਹਨ.
ਚੈਕਲਿਸਟ:
ਕਨੈਕਸ਼ਨ ਲਿਮਿਟਸ ਲਈ ਪੂਲਿੰਗ ਵਰਤੋਂ ਅਤੇ ਟਰਾਂਜ਼ੈਕਸ਼ਨ ਛੋਟੇ ਰੱਖੋ ਤਾਂ ਕਿ ਸਪਾਈਕ ਦੇ ਦੌਰਾਨ DB ਖਤਮ ਨਾ ਹੋਵੇ।
ORDER BYਧਿਆਨ ਰੱਖੋ ਕਿ ਇੰਡੈਕਸ ਮੁਫ਼ਤ ਨਹੀਂ ਹੁੰਦੇ: ਉਹ ਡਿਸਕ ਲੈਂਦੇ ਹਨ ਅਤੇ ਲਿਖਤਾਂ 'ਤੇ ਓਵਰਹੈੱਡ ਵਧਾਉਂਦੇ ਹਨ, ਇਸ ਲਈ ਥੋੜ੍ਹੇ-ਥੋੜ੍ਹੇ ਅਤੇ ਸੋਚ-ਵਿਚਾਰ ਕੇ ਜੋੜੋ।