Turso libSQL ਬਨਾਮ Cloudflare D1
ਇੱਕ Astro monorepo ਲਈ ਡਾਟਾਬੇਸ ਚੁਣਨਾ ਤੁਹਾਡੇ ਵਰਕਫਲੋ (workflow) ਬਾਰੇ ਹੈ।
ਮੈਂ ਹਾਲ ਹੀ ਵਿੱਚ ਤਿੰਨ Astro SSG ਸਾਈਟਾਂ ਲਈ ਇੱਕ ਸਾਂਝਾ ਡਾਟਾਬੇਸ ਬਣਾਇਆ ਹੈ। ਮੇਰੇ ਕੋਲ ਦੋ ਵਿਕਲਪ ਸਨ: Turso (libSQL) ਜਾਂ Cloudflare D1।
ਮੈਂ Turso ਨੂੰ ਚੁਣਿਆ।
ਇੱਥੇ ਦੱਸਿਆ ਗਿਆ ਹੈ ਕਿ ਵਿਵਹਾਰਕ (practical) ਅੰਤਰ ਕਿਉਂ ਮਹੱਤਵਪੂਰਨ ਸੀ।
Cloudflare D1, Cloudflare Workers ਲਈ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ server-side rendering ਲਈ Workers ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ D1 ਜੇਤੂ ਹੈ। ਇਹ ਉੱਥੇ ਰਹਿੰਦਾ ਹੈ ਜਿੱਥੇ ਤੁਹਾਡਾ ਕੋਡ ਚੱਲਦਾ ਹੈ।
ਮੇਰਾ ਸੈੱਟਅੱਪ ਵੱਖਰਾ ਹੈ। ਮੇਰੀਆਂ ਸਾਈਟਾਂ Cloudflare Pages 'ਤੇ static Astro 5 SSG ਹਨ। ਮੈਂ Workers ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰਦਾ। ਮੇਰੀ ETL pipeline GitHub Actions ਵਿੱਚ ਚੱਲਦੀ ਹੈ।
GitHub Actions ਤੋਂ D1 ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਮੁਸ਼ਕਲ ਹੈ। ਤੁਹਾਨੂੰ Cloudflare API ਜਾਂ Wrangler CLI ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਪਵੇਗੀ। ਦੋਵਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਤੁਹਾਨੂੰ ਡਿਵੈਲਪਮੈਂਟ ਦੌਰਾਨ ਕੁਐਰੀ (query) ਕਰਨ ਲਈ ਸਥਾਨਕ (local) SQLite ਫਾਈਲ ਨਹੀਂ ਦਿੰਦਾ। ਤੁਹਾਨੂੰ ਹਰ ਟੈਸਟ ਲਈ ਇੱਕ ਰਿਮੋਟ ਡਾਟਾਬੇਸ ਨਾਲ ਜੁੜਨਾ ਪੈਂਦਾ ਹੈ।
Turso ਇਸ ਨੂੰ @libsql/client ਪੈਕੇਜ ਨਾਲ ਹੱਲ ਕਰਦਾ ਹੈ। ਇਹ ਇੱਕ URL ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ। ਉਹ URL ਇੱਕ ਰਿਮੋਟ ਲਿੰਕ ਜਾਂ ਇੱਕ ਸਥਾਨਕ ਫਾਈਲ ਪਾਥ (file path) ਹੋ ਸਕਦਾ ਹੈ।
ਮੇਰਾ ਕੋਡ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ:
CI ਵਿੱਚ URL ਇੱਕ ਰਿਮੋਟ Turso ਲਿੰਕ ਹੈ। ਮੇਰੇ ਲੈਪਟਾਪ 'ਤੇ, ਕਲਾਇੰਟ ਇੱਕ ਸਥਾਨਕ ਫਾਈਲ ਖੋਲ੍ਹਦਾ ਹੈ। ਪੈਕੇਜ, ਕੁਐਰੀਆਂ (queries) ਅਤੇ schema ਉਹੀ ਰਹਿੰਦੇ ਹਨ।
ਕੋਡ ਪਾਥ (code path) ਬਿਲਕੁਲ ਇੱਕੋ ਜਿਹਾ ਹੈ।
ਇਹ ਮੈਨੂੰ ਇਹ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ:
- ETL ਸਕ੍ਰਿਪਟਾਂ ਨੂੰ ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਚਲਾਉਣਾ।
- ਕਿਸੇ ਵੀ SQLite viewer ਨਾਲ ਡਾਟਾਬੇਸ ਦੀ ਜਾਂਚ ਕਰਨਾ।
- ਉਹੀ ਫੰਕਸ਼ਨ ਵਰਤ ਕੇ migrations ਚਲਾਉਣਾ ਜੋ production ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
ਮੈਨੂੰ Docker ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। ਮੈਨੂੰ ਵਿਸ਼ੇਸ਼ ਫਲੈਗਸ (special flags) ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। ਉਹੀ SQL ਹਰ ਜਗ੍ਹਾ ਕੰਮ ਕਰਦਾ ਹੈ।
ਮੈਂ migrations ਲਈ ਇੱਕ idempotent ਪਹੁੰਚ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। ਮੇਰਾ ਕੋਡ ਟੇਬਲ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਜਾਂਚ ਕਰਦਾ ਹੈ ਕਿ ਕੀ ਉਹ ਟੇਬਲ ਮੌਜੂਦ ਹੈ। ਇਹ ਇਸਨੂੰ ਵਾਰ-ਵਾਰ ਚਲਾਉਣ ਲਈ ਸੁਰੱਖਿਅਤ ਬਣਾਉਂਦਾ ਹੈ।
ਤੁਹਾਨੂੰ D1 ਕਦੋਂ ਚੁਣਨਾ ਚਾਹੀਦਾ ਹੈ? ਜੇਕਰ ਤੁਸੀਂ ਸਰਚ ਜਾਂ API ਰੂਟਸ ਲਈ Cloudflare Workers ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ D1 ਬਿਹਤਰ ਹੈ। ਕਨੈਕਸ਼ਨ ਤੇਜ਼ ਹੁੰਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਇੱਕੋ ਡਾਟਾ ਸੈਂਟਰ ਦੇ ਅੰਦਰ ਰਹਿੰਦਾ ਹੈ।
ਮੇਰਾ ਆਰਕੀਟੈਕਚਰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਟੈਟਿਕ ਹੈ। ਕਿਉਂਕਿ ਮੈਂ Workers ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰਦਾ, D1 ਆਪਣਾ ਮੁੱਖ ਫਾਇਦਾ ਗੁਆ ਲੈਂਦਾ ਹੈ।
ਮੌਜੂਦਾ trade-offs:
- Write performance: ਮੇਰੀ ETL ਕੰਮਾਂ ਨੂੰ ਇੱਕ-ਇੱਕ ਕਰਕੇ ਚਲਾਉਂਦੀ ਹੈ। ਮੈਂ ਉੱਚ-ਗਤੀ ਵਾਲੇ concurrent writes ਦੀ ਜਾਂਚ ਨਹੀਂ ਕੀਤੀ ਹੈ।
- Schema changes: ਕਾਲਮ ਜੋੜਨਾ ਆਸਾਨ ਹੈ। ਕਾਲਮਾਂ ਦਾ ਨਾਮ ਬਦਲਣ ਲਈ ਵਧੇਰੇ ਸਾਵਧਾਨੀ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
- Pricing: ਦੋਵਾਂ ਦੇ ਉਦਾਰ ਮੁਫ਼ਤ ਤੌਰ (free tiers) ਹਨ। ਤਿੰਨ ਸਾਈਟਾਂ ਲਈ, ਮੇਰੀ ਲਾਗਤ ਜ਼ੀਰੋ ਹੈ।
ਡਾਟਾਬੇਸ ਦੀ ਚੋਣ ਮੁੱਖ ਉਦੇਸ਼ ਨਹੀਂ ਸੀ। ਸਥਾਨਕ ਫਾਈਲ ਫਾਲਬੈਕ (local file fallback) ਉਹ ਕਾਰਨ ਸੀ ਜਿਸ ਕਰਕੇ ਮੈਂ Turso ਨੂੰ ਚੁਣਿਆ। ਇਹ ਡਿਵੈਲਪਮੈਂਟ ਨੂੰ ਸਰਲ ਬਣਾਉਂਦਾ ਹੈ।
