𝗧𝘂𝗿𝘀𝗼 𝗹𝗶𝗯𝗦𝗤𝗟 𝘃𝘀 𝗖𝗹𝗼𝘂𝗱𝗳𝗹𝗮𝗿𝗲 𝗗𝟭
ഒരു Astro monorepo-യ്ക്കായി ഒരു ഡാറ്റാബേസ് തിരഞ്ഞെടുക്കുന്നത് നിങ്ങളുടെ വർക്ക്ഫ്ലോയെ (workflow) ആശ്രയിച്ചിരിക്കും.
അടുത്തിടെ മൂന്ന് Astro SSG സൈറ്റുകൾക്കായി ഞാൻ ഒരു ഷെയർഡ് ഡാറ്റാബേസ് നിർമ്മിച്ചു. എനിക്ക് രണ്ട് ഓപ്ഷനുകൾ ഉണ്ടായിരുന്നു: Turso (libSQL) അല്ലെങ്കിൽ Cloudflare D1.
ഞാൻ Turso ആണ് തിരഞ്ഞെടുത്തത്.
പ്രായോഗികമായ വ്യത്യാസങ്ങൾ എന്തുകൊണ്ട് പ്രസക്തമാകുന്നു എന്ന് താഴെ നൽകുന്നു.
Cloudflare D1 നിർമ്മിച്ചിരിക്കുന്നത് Cloudflare Workers-ന് വേണ്ടിയാണ്. സെർവർ സൈഡ് റെൻഡറിംഗിനായി (server-side rendering) നിങ്ങൾ Workers ഉപയോഗിക്കുന്നുണ്ടെങ്കിൽ, D1 ആണ് മികച്ചത്. നിങ്ങളുടെ കോഡ് പ്രവർത്തിക്കുന്ന ഇടത്ത് തന്നെയായിരിക്കും ഇത് നിലനിൽക്കുന്നത്.
എന്റെ സെറ്റപ്പ് വ്യത്യസ്തമാണ്. എന്റെ സൈറ്റുകൾ Cloudflare Pages-ലെ സ്റ്റാറ്റിക് Astro 5 SSG ആണ്. ഞാൻ Workers ഉപയോഗിക്കുന്നില്ല. എന്റെ ETL പൈപ്പ്ലൈൻ GitHub Actions-ലാണ് പ്രവർത്തിക്കുന്നത്.
GitHub Actions-ൽ നിന്ന് D1 ഉപയോഗിക്കുന്നത് പ്രയാസകരമാണ്. നിങ്ങൾ Cloudflare API അല്ലെങ്കിൽ Wrangler CLI ഉപയോഗിക്കേണ്ടി വരും. ഡെവലപ്മെന്റ് സമയത്ത് ക്വറി (query) ചെയ്യാൻ ഇവയൊന്നും ഒരു ലോക്കൽ SQLite ഫയൽ നൽകുന്നില്ല. ഓരോ ടെസ്റ്റിനും നിങ്ങൾ ഒരു റിമോട്ട് ഡാറ്റാബേസിനെ തന്നെ ആശ്രയിക്കേണ്ടി വരും.
@libsql/client പാക്കേജ് ഉപയോഗിച്ച് Turso ഈ പ്രശ്നം പരിഹരിക്കുന്നു. ഇത് ഒരു URL സ്വീകരിക്കുന്നു. ആ URL ഒരു റിമോട്ട് ലിങ്കോ അല്ലെങ്കിൽ ഒരു ലോക്കൽ ഫയൽ പാത്തോ ആകാം.
എന്റെ കോഡ് ഇപ്രകാരമാണ്:
CI-യിൽ URL ഒരു റിമോട്ട് Turso ലിങ്കാണ്. എന്റെ ലാപ്ടോപ്പിൽ, ക്ലയന്റ് ഒരു ലോക്കൽ ഫയൽ തുറക്കുന്നു. പാക്കേജ്, ക്വറികൾ, സ്കീമ എന്നിവയിൽ മാറ്റമില്ലാതെ തുടരുന്നു.
കോഡ് പാത്ത് (code path) ഒന്നുതന്നെയാണ്.
ഇത് എനിക്ക് താഴെ പറയുന്നവ ചെയ്യാൻ അനുവദിക്കുന്നു:
- ETL സ്ക്രിപ്റ്റുകൾ ലോക്കലായി റൺ ചെയ്യാം.
- ഏതെങ്കിലും SQLite വ്യൂവർ ഉപയോഗിച്ച് ഡാറ്റാബേസ് പരിശോധിക്കാം.
- പ്രൊഡക്ഷനിൽ ഉപയോഗിക്കുന്ന അതേ ഫംഗ്ഷൻ ഉപയോഗിച്ച് തന്നെ മൈഗ്രേഷനുകൾ (migrations) റൺ ചെയ്യാം.
എനിക്ക് Docker ആവശ്യമില്ല. പ്രത്യേക ഫ്ലാഗുകളും (flags) ആവശ്യമില്ല. ഒരേ SQL എവിടെയും പ്രവർത്തിക്കും.
മൈഗ്രേഷനുകൾക്കായി ഞാൻ ഒരു idempotent സമീപനമാണ് ഉപയോഗിക്കുന്നത്. ഒരു ടേബിൾ നിലവിലുണ്ടോ എന്ന് പരിശോധിച്ചതിന് ശേഷം മാത്രമേ എന്റെ കോഡ് അത് നിർമ്മിക്കുകയുള്ളൂ. ഇത് ആവർത്തിച്ച് റൺ ചെയ്യാൻ സുരക്ഷിതമാക്കുന്നു.
നിങ്ങൾ എപ്പോഴാണ് D1 തിരഞ്ഞെടുക്കേണ്ടത്? സെർച്ച് അല്ലെങ്കിൽ API റൂട്ടുകൾക്കായി നിങ്ങൾ Cloudflare Workers ഉപയോഗിക്കുന്നുണ്ടെങ്കിൽ, D1 ആണ് നല്ലത്. കണക്ഷൻ ഒരേ ഡാറ്റാസെന്ററിനുള്ളിൽ തന്നെ ആയതുകൊണ്ട് വേഗത കൂടുതലായിരിക്കും.
എന്റെ ആർക്കിടെക്ചർ പൂർണ്ണമായും സ്റ്റാറ്റിക് ആണ്. ഞാൻ Workers ഉപയോഗിക്കാത്തതിനാൽ, D1-ന്റെ പ്രധാന നേട്ടം ഇവിടെ നഷ്ടമാകുന്നു.
നിലവിലെ ഗുണദോഷങ്ങൾ (trade-offs):
- Write performance: എന്റെ ETL ടാസ്ക്കുകൾ ഓരോന്നായിട്ടാണ് റൺ ചെയ്യുന്നത്. ഉയർന്ന വേഗതയിലുള്ള കൺകറന്റ് റൈറ്റുകൾ (concurrent writes) ഞാൻ പരീക്ഷിച്ചിട്ടില്ല.
- Schema changes: കോളങ്ങൾ ചേർക്കുന്നത് എളുപ്പമാണ്. എന്നാൽ കോളങ്ങൾ റീനേം ചെയ്യുന്നത് കൂടുതൽ ശ്രദ്ധ ആവശ്യപ്പെടുന്നു.
- Pricing: രണ്ടിനും മികച്ച ഫ്രീ ടയറുകൾ (free tiers) ഉണ്ട്. മൂന്ന് സൈറ്റുകൾക്ക് എന്റെ ചിലവ് പൂജ്യമാണ്.
ഡാറ്റാബേസ് തിരഞ്ഞെടുക്കുക എന്നതായിരുന്നു പ്രധാന ലക്ഷ്യമല്ല. ലോക്കൽ ഫയൽ ഫാളബാക്ക് (local file fallback) ആണ് ഞാൻ Turso തിരഞ്ഞെടുത്തതിന്റെ കാരണം. ഇത് ഡെവലപ്മെന്റ് ലളിതമാക്കുന്നു.
