Post updated on 30th March, 2018 at 06:16 am
Android App এ পরস্পর সম্পর্ক যুক্ত (relational) ডেটা স্টোর করা, প্রয়োজনের সময় ঐসব ডেটা খুঁজে বের করা, দরকার অনুযায়ী আপডেট-ডিলিট করার জন্য SQLite Database সবচেয়ে বেশি জনপ্রিয়। SQLite ছাড়াও অ্যান্ড্রয়েডে ব্যবহার উপযোগি আরো ডেটাবেজ রয়েছে। তবে এটিই সবচেয়ে বেশি পরিমাণে ব্যবহৃত হয়ে থাকে। এই পোস্টে SQLite এর উপর কিছু ব্যাসিক আলোচনা আর পরের পোস্টে implementation দেখানোর চেষ্টা করব। এই পোস্টটি প্রথম প্রকাশিত হয় আমাদের মিডিয়ামের প্রোগ্রামিং পাতা থেকে।
History of SQLite
SQLite database ডেভেলপ করেন D. Richard Hipp. এটি রিলিজ করা হয় ২০০০ সালের ১৭ অগাস্ট। SQLite database-কে ডেভেলপ করার জন্য ব্যবহার করা হয় C প্রোগ্রামিং ল্যাঙ্গুয়েজ। ২০০০ সালে রিচার্ড যখন SQLite database রিলিজ করেন তখন তিনি কাজ করতেন General Dynamics এ। এটি মূলত সমরাস্ত্র, যুদ্ধ জাহাজ ইত্যাদির বিজনেস করে। রিচার্ড হিপের ডেভেলপ করা সফটওয়্যার তাদের যুদ্ধজাহাজে ব্যবহৃত হত।
Why SQLite Database in Android?
আমরা অনেক ডেটাবেজের কথা জানি। বেশির ভাগ প্রোগ্রামারের প্রথম পরিচয় হয় MySQL database এর সাথে, ওয়েবে এর প্রচুর ব্যবহার এবং ওপেন সোর্স হওয়ার কারণে। এছাড়াও PostgreSQL, Oracle Database, SQL Database, MongoDB ইত্যাদি ডেটাবেজের নাম আমরা জানি। সব রেখে কেন Android App এ SQLite database ব্যবহার করা হয়? কোড শুরু করার আগে নিচে এর কারণগুলো ব্যাখ্যা করা দরকার।
Lightweight
বেশির ভাগ Database Management System এর জন্য সার্ভার প্রয়োজন হয়। সার্ভারে ডেটাবেজ থাকবে এবং আমাদের অ্যাপ্লিকেশন প্রয়োজন অনুযায়ী সেখান থেকে ডেটা নিয়ে এসে কাজ করবে। অন্যান্য ডেটাবেজের সাথে আমাদের SQLite এর মূল পার্থক্য এখানেই। অ্যান্ড্রয়েড অ্যাপ ডেভেলপার পজিশনের জন্য জব ইন্টারভিউয়ের এটা একটা কমন প্রশ্ন যে MySQL আর SQLite এর মধ্যে পার্থক্য কী? মোবাইল অ্যাপে MySQL ইউজ না করে SQLite ইউজ করা হয় কেন? প্রথমবার শুনতে যতটা ভয়ংকর মনে হয় এর উত্তর ততটাই সোজা সাপটা। MySQL আর SQLite এর মধ্যে মূল পার্থক্য হচ্ছে MySQL আলাদা সার্ভারে বা স্ট্যান্ডঅ্যালোন প্রসেস হিসেবে রান করতে হয়, কিন্তু SQLite অ্যাপ এর মধ্যেই রান করা যায়। অর্থাৎ, MySQL আলাদাভাবে রান করে সেটার সাথে আমাদের অ্যাপকে কানেক্ট করতে হয়, সাধারণত এই ডাটাবেজ সার্ভারটা কোন একটা রিমোট লোকেশনে থাকে। কিন্তু SQLite এর ডাটাবেজ এঞ্জিন অ্যাপের মধ্যে থেকেই শুধুমাত্র একটা লাইব্রেরী হিসেবে রান হয়। একারণে SQLite কে embedded database ও বলে।
সার্ভার ছাড়া একটা ডেটাবেজ কেন আমাদের দরকার? মোবাইল অ্যাপে একটা সার্ভার টাইপ কিছু ইন্সটল করে কি MySQL ইউজ করা যায় না? তাতে সমস্যা কী?
সমস্যা হচ্ছে মোবাইল ফোনের রিসোর্সের সীমাবদ্ধতা। ডাটাবেজ সার্ভার আলাদাভাবে রান করলে তার জন্য CPU, RAM ও Power ইউজ হবে। মূলত ফোনের ব্যাটারি ও রিসোর্স ইউজ কমানোর জন্যেই আমরা ফোনে কোনো ডাটাবেজ সার্ভার রান করি না।
Optimized for single user
MySQL বা অন্যান্য ডেটাবেজে কোনো ডেটা রিড-রাইট করার সময় username-password দিয়ে authentication check করা হয়। সেটা সার্ভারসাইড যে কোনো ডেটাবেজের ক্ষেত্রে জরুরি। কিন্তু কোনো একটা মোবাইল অ্যাপ একজন ইউজারই ইউজ করেন। আমাদের অ্যাপ প্রতিটা ডিভাইসে যখন ইন্সটল হয় তখন (প্রয়োজনের সময়) সেখানে একটা ডেটাবেজ তৈরি হয়। যদি ১০০ টা ডিভাইসে অ্যাপ ইন্সটল হয় তাহলে ১০০ টা ডিভাইসেই ডেটাবেজ তৈরি হবে। কিন্তু MySQL এর ক্ষেত্রে ১০০ জন ইউজার যখন সেখানে হিট করবে ডেটাবেজ কিন্তু একটাই থাকবে। যেহেতু বিভিন্ন অ্যাপ থেকে বিভিন্ন API এর মাধ্যমে MySQL ডেটাবেজের অ্যাক্সেস করতে হয় তাই প্রতিটা রিকোয়েস্টেই চেক করার দরকার হয় রিকোয়েস্টটা যে আসছে সেটা ভ্যালিড সোর্স থেকে আসছে কিনা। অপরপক্ষে মোবাইলে থাকা ডেটাবেজটা ঐ মোবাইলের ইউজারই শুধু ইউজ করেন। তাই প্রতিবার ডেটাবেজে রিড-রাইটের সময় username-password দিয়ে authentication check করা প্রয়োজন হয় না।
Stable
SQLite ডেটাবেজটা amazingly stable. অনেক বেশি ম্যাচিউরড। সেই ২০০০ সাল থেকে billions of project এ এটা ইউজ হয়েছে। ধারনা করা হয় এই ডেটাবেজই সবচেয়ে বেশিবার deploy হয়েছে। SQLite ওপেন সোর্স প্রোজেক্ট হওয়ায় যে কেউ এর সোর্স কোড দেখতে পারে। তাই পর্যাপ্ত টেস্টিং এর মধ্য দিয়েই প্রতিটা ভার্সন রিলিজ হয়। SQLite-কে ছোটখাটো ডেটাবেজ মনে করলেও এতে database transaction এর মত ফিচার রয়েছে। অর্থাৎ আপনার ডেটাবেজ আপডেট করার পর যদি কোনো ঝামেলা হয়, আপনি আপনার আগের ভার্সনের ডেটা সহ ডেটাবেজ ফেরত পাবেন। অনেকেরই জিজ্ঞাসা থাকে যে একটা SQLite database এ সর্বোচ্চ কতটুকু ডেটা স্টোর করা যায়? SQLite এর অফিসিয়াল সাইট থেকে জানা যায় একটা SQLite database এ সর্বোচ্চ 140 terabytes ডেটা স্টোর করা সম্ভব! আর একটা row তে সম্ভব সর্বোচ্চ 1 GB ডেটা!



Nice post. Thank you very much.
Nice post. Thank you very much.
You are most welcome