Turso libSQL বনাম Cloudflare D1

একটি 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 ব্যবহার করতে হবে। এর কোনোটিই ডেভেলপমেন্টের সময় কুয়েরি করার জন্য আপনাকে একটি লোকাল SQLite ফাইল দেয় না। ফলে প্রতিটি টেস্টের জন্য আপনাকে একটি রিমোট ডাটাবেস ব্যবহার করতে হয়।

Turso @libsql/client প্যাকেজটির মাধ্যমে এই সমস্যার সমাধান করে। এটি একটি URL গ্রহণ করে। সেই URLটি একটি রিমোট লিঙ্ক অথবা একটি লোকাল ফাইল পাথ হতে পারে।

আমার কোডটি দেখতে এরকম:

CI-তে URLটি একটি রিমোট Turso লিঙ্ক। আমার ল্যাপটপে, ক্লায়েন্ট একটি লোকাল ফাইল ওপেন করে। প্যাকেজ, কুয়েরি এবং স্কিমা একই থাকে।

কোড পাথটি একদম একই থাকে।

এটি আমাকে যা করতে সাহায্য করে:

  • লোকালি ETL স্ক্রিপ্ট চালানো।
  • যেকোনো SQLite ভিউয়ার দিয়ে ডাটাবেস পরিদর্শন করা।
  • প্রোডাকশনে ব্যবহৃত একই ফাংশন দিয়ে মাইগ্রেশন চালানো।

আমার Docker প্রয়োজন নেই। বিশেষ কোনো ফ্ল্যাগও প্রয়োজন নেই। একই SQL সব জায়গায় কাজ করে।

আমি মাইগ্রেশনের জন্য একটি idempotent পদ্ধতি ব্যবহার করি। আমার কোড একটি টেবিল তৈরি করার আগে সেটি বিদ্যমান কি না তা পরীক্ষা করে। এটি বারবার চালানোর জন্য নিরাপদ করে তোলে।

আপনার কখন D1 বেছে নেওয়া উচিত? আপনি যদি সার্চ বা API রাউটের জন্য Cloudflare Workers ব্যবহার করেন, তবে D1 ভালো। কানেকশনটি দ্রুততর কারণ এটি একই ডেটাসেন্টারের ভেতরে থাকে।

আমার আর্কিটেকচার সম্পূর্ণ স্ট্যাটিক। যেহেতু আমি Workers ব্যবহার করি না, তাই D1 তার প্রধান সুবিধাটি হারায়।

বর্তমান ট্রেড-অফসমূহ:

  • রাইট পারফরম্যান্স (Write performance): আমার ETL কাজগুলো একটির পর একটি সম্পন্ন করে। আমি উচ্চ-গতির কনকারেন্ট রাইট (concurrent writes) পরীক্ষা করিনি।
  • স্কিমা পরিবর্তন (Schema changes): কলাম যোগ করা সহজ। কলাম রিনেম করার জন্য আরও সতর্কতার প্রয়োজন।
  • প্রাইসিং (Pricing): উভয়েরই উদার ফ্রি টায়ার রয়েছে। তিনটি সাইটের জন্য আমার খরচ শূন্য।

ডাটাবেস নির্বাচন করা মূল লক্ষ্য ছিল না। লোকাল ফাইল ফলব্যাক (local file fallback) ছিল আমার Turso বেছে নেওয়ার কারণ। এটি ডেভেলপমেন্টকে সহজ করে তোলে।

উৎস: https://dev.to/morinaga/turso-libsql-vs-cloudflare-d1-for-an-astro-monorepo-the-practical-difference-3c9