CodeIgniter একটি দ্রুত এবং লাইটওয়েট PHP ফ্রেমওয়ার্ক, তবে কিছু কনফিগারেশন এবং উন্নত পদ্ধতি ব্যবহার করে এর পারফরম্যান্স আরও উন্নত করা সম্ভব। এখানে কিছু পদ্ধতি এবং কৌশল দেয়া হয়েছে যা CodeIgniter অ্যাপ্লিকেশনকে আরও কার্যকর এবং দ্রুত করতে সাহায্য করবে।
Caching হলো একটি প্রযুক্তি, যা ডেটা বা পৃষ্ঠার অংশকে সংরক্ষণ করে, যাতে প্রতিবার ডেটা রিকোয়েস্টের জন্য সার্ভার থেকে ডেটা পুনরায় প্রক্রিয়া না করতে হয়। এতে সাইটের লোড টাইম কমে এবং সার্ভারের চাপ হ্রাস পায়।
CodeIgniter এ Page Caching ব্যবহার করে পৃষ্ঠার পূর্ণ HTML আউটপুট ক্যাশে সংরক্ষণ করতে পারেন।
namespace App\Controllers;
class ProductController extends BaseController
{
public function index()
{
$this->response->setCache('max-age=3600'); // 1 ঘণ্টার জন্য ক্যাশ করুন
return view('product_list');
}
}
Query Caching ব্যবহার করে ডাটাবেস কুয়েরি ফলাফল ক্যাশে রাখা হয়, যাতে বার বার একই কুয়েরি চালানোর প্রয়োজন না হয়।
$builder = $this->db->table('products');
$builder->cacheOn(); // ক্যাশ চালু করুন
$products = $builder->get()->getResult();
CodeIgniter এর Output Caching পদ্ধতির মাধ্যমে আপনার সম্পূর্ণ HTML আউটপুট ক্যাশে রাখা যায়।
$this->output->cache(60); // 60 মিনিট ক্যাশে রাখুন
SQL কুয়েরির দক্ষতা বাড়ানো অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter এর Query Builder ব্যবহার করুন যাতে ইনডেক্স এবং অন্যান্য অপটিমাইজেশন করা সহজ হয়।
$builder = $this->db->table('products');
$builder->select('id, name, price');
$builder->where('price >', 100);
$products = $builder->get()->getResult();
ডাটাবেস টেবিলগুলোর উপর ইনডেক্স তৈরি করলে কোয়েরি দ্রুত চলে। উদাহরণস্বরূপ:
CREATE INDEX idx_price ON products(price);
CodeIgniter এর ডাটাবেস কানেকশন পুলিং ব্যবহার করে সার্ভারের রিসোর্স বাঁচাতে পারেন। ডাটাবেস কানেকশন পুলিংয়ের মাধ্যমে একাধিক কানেকশন তৈরির পরিবর্তে একটি সংযোগ পুনঃব্যবহার করা হয়।
CSS এবং JavaScript ফাইল গুলো minify বা সংকুচিত করা গেলে ফাইলের আকার কমে এবং পৃষ্ঠার লোডিং সময় হ্রাস পায়।
CSS এবং JavaScript ফাইলগুলিকে একত্রিত (combine) করে একাধিক HTTP রিকোয়েস্ট কমানো যায়। এতে পৃষ্ঠা লোডের সময় কমবে।
আপনার অ্যাসেটগুলো lazy load করুন যাতে পৃষ্ঠার প্রাথমিক লোডিংয়ের সময় কিছু স্ক্রিপ্ট বা ছবি না লোড হয়। এটি বিশেষত বড় পৃষ্ঠাগুলির জন্য কার্যকর।
<img src="image.jpg" loading="lazy" alt="Lazy Loaded Image">
যতটা সম্ভব অপ্রয়োজনীয় লুপ এড়িয়ে চলুন। বিশেষত ডাটাবেস কুয়েরি বা ফাইল অপারেশন করার সময় এটি আরও গুরুত্বপূর্ণ।
যতটা সম্ভব ফাংশন পুনঃব্যবহারযোগ্য এবং কমপ্যাক্ট রাখুন। এতে কোড পরিষ্কার থাকবে এবং কম প্রক্রিয়াকরণের মাধ্যমে কাজ হবে।
অপ্রয়োজনীয় লাইব্রেরি এবং হেলপারগুলি লোড করা আপনার অ্যাপ্লিকেশনের পারফরম্যান্স কমিয়ে দেয়। শুধু প্রয়োজনীয় লাইব্রেরি এবং হেলপারগুলি ব্যবহার করুন।
$this->load->helper('url'); // শুধু প্রয়োজনীয় হেলপার লোড করুন
সেশন ডেটা সংরক্ষণের জন্য ফাইল সিস্টেম বা ডাটাবেস ব্যবহার করার সময়, ডেটা মেমরিতে (Memory) রাখলে তা অনেক দ্রুত হয়। CodeIgniter এ সেশন ডেটা Redis বা Memcached এ সংরক্ষণ করার মাধ্যমে সেশন ম্যানেজমেন্ট দ্রুত করা যায়।
public $sessionDriver = 'CodeIgniter\Session\Handlers\MemcachedHandler';
যত কম সময়ের জন্য সেশন সক্রিয় থাকবে, তত বেশি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স বাড়বে।
public $sessionExpiration = 3600; // 1 ঘণ্টার জন্য সেশন
CodeIgniter এর Query Caching ব্যবহার করা হয় যাতে পুনরায় একই কোয়েরি চালানোর সময় ডেটাবেসে অতিরিক্ত লোড না পড়ে। এটি $db->cacheOn()
দিয়ে সক্রিয় করা যায়।
$db = \Config\Database::connect();
$db->cacheOn();
$query = $db->query("SELECT * FROM products");
$results = $query->getResult();
আপনার অ্যাপ্লিকেশনে ফাইল আপলোড করার সময়, ফাইল সাইজ এবং ফাইল টাইপ সীমিত করুন। এর ফলে বড় এবং অপ্রয়োজনীয় ফাইল আপলোড হওয়া রোধ করা যায়।
$file = $this->request->getFile('userfile');
$file->setMaxSize(1024); // 1MB সীমা
$file->setAllowedTypes(['image/png', 'image/jpg', 'image/jpeg']);
CodeIgniter এর Profiler টুল ব্যবহার করে অ্যাপ্লিকেশনের কার্যক্ষমতা পরিমাপ করা যায় এবং কোথায় পারফরম্যান্সের সমস্যা হচ্ছে তা চিহ্নিত করা যায়।
$profiler = \Config\Services::profiler();
$profiler->run();
এটি আপনার অ্যাপ্লিকেশনের সমস্ত তথ্য যেমন কুয়েরি সময়, মেমরি ব্যবহার, এবং HTTP রিকোয়েস্ট রেকর্ড করে।
CodeIgniter অ্যাপ্লিকেশনের পারফরম্যান্স অপটিমাইজেশন নিশ্চিত করতে হলে ক্যাশিং, ডাটাবেস অপটিমাইজেশন, ফাইল এবং অ্যাসেট অপটিমাইজেশন, এবং কোড অপটিমাইজেশন ইত্যাদি পদ্ধতি ব্যবহৃত হতে পারে। এই কৌশলগুলি আপনার অ্যাপ্লিকেশনকে দ্রুত এবং আরও দক্ষ করবে, যা ব্যবহারকারীর অভিজ্ঞতা উন্নত করবে এবং সার্ভারের রিসোর্স বাঁচাতে সাহায্য করবে।
ডেটাবেস কোয়েরি অপটিমাইজেশন (Query Optimization) হল ডেটাবেসের কর্মক্ষমতা উন্নত করার একটি গুরুত্বপূর্ণ প্রক্রিয়া। এটি ডেটা রিট্রিভ, ইনসার্ট, আপডেট বা ডিলিট অপারেশনগুলোর কার্যকারিতা বাড়ায় এবং সার্ভারের লোড কমায়। CodeIgniter তে বিভিন্ন কৌশল ব্যবহার করে কোয়েরি অপটিমাইজ করা যায়।
Indexing হল এমন একটি প্রক্রিয়া, যা ডাটাবেস টেবিলের উপর ইনডেক্স তৈরি করে। এটি ডেটা রিট্রিভাল প্রক্রিয়া দ্রুততর করে। বিশেষত, WHERE, JOIN, ORDER BY, এবং GROUP BY ক্লজ ব্যবহার করলে ইনডেক্স টেবিলের কর্মক্ষমতা বৃদ্ধি করতে সাহায্য করে।
CREATE INDEX idx_name ON users(name);
এটি users
টেবিলে name
কলামে ইনডেক্স তৈরি করবে, যা ডেটা খুঁজে পেতে দ্রুততর করবে।
CodeIgniter Query Builder সরাসরি ইনডেক্স তৈরির জন্য ফাংশন সরবরাহ না করলেও, আপনি SQL কোড ব্যবহার করতে পারেন:
$db->query('CREATE INDEX idx_name ON users(name)');
ডেটাবেস কোয়েরি অপটিমাইজ করার সবচেয়ে সহজ এবং প্রথম পদক্ষেপ হল শুধুমাত্র প্রয়োজনীয় কলাম নির্বাচন করা। বড় টেবিলের ক্ষেত্রে, SELECT *
ব্যবহার করা প্রতিরোধ করা উচিত। শুধুমাত্র সেই কলামগুলো নির্বাচন করুন, যেগুলো আপনার প্রয়োজন।
// অপটিমাইজড কোয়েরি
$builder = $db->table('users');
$builder->select('id, name, email'); // প্রয়োজনীয় কলাম নির্বাচন
$query = $builder->get();
অপটিমাইজেশন কৌশল:
SELECT *
ব্যবহার না করে নির্দিষ্ট কলাম নির্বাচন করুন।JOIN
বা GROUP BY
ব্যবহার না করে প্রয়োজনীয় কলাম গুলি নির্বাচন করুন।বড় ডেটাসেটের ক্ষেত্রে, LIMIT এবং OFFSET ব্যবহার করা একটি কার্যকর কৌশল। এটি ডেটাবেস থেকে সীমিত পরিমাণ ডেটা রিট্রিভ করে, সার্ভারের লোড কমায় এবং দ্রুত ফলাফল প্রদান করে।
$builder = $db->table('users');
$builder->limit(10, 20); // 20 তম রেকর্ড থেকে 10টি রেকর্ড আনা হবে
$query = $builder->get();
অপটিমাইজেশন কৌশল:
OFFSET
এর সাথে LIMIT
ব্যবহার করলে সার্ভারের কর্মক্ষমতা বৃদ্ধি পাবে।JOIN এর মাধ্যমে একাধিক টেবিলের ডেটা একসাথে এনে কোয়েরি চালানো হয়, তবে এটি ডেটাবেসে প্রচুর লোড সৃষ্টি করতে পারে। যখন সম্ভব, INNER JOIN ব্যবহার করা উচিত, কারণ এটি LEFT JOIN এর তুলনায় দ্রুত হয়। এছাড়া, JOIN ব্যবহারের সময়, নিশ্চিত করুন যে যেসব কলামে JOIN হচ্ছে, সেখানে ইনডেক্স রয়েছে।
$builder = $db->table('orders');
$builder->select('orders.id, users.name');
$builder->join('users', 'users.id = orders.user_id', 'inner');
$query = $builder->get();
অপটিমাইজেশন কৌশল:
ডেটাবেস কোয়েরি দ্রুততর করার জন্য কোডে ক্যাশিং প্রয়োগ করা খুবই গুরুত্বপূর্ণ। CodeIgniter এ Query Caching এবং Page Caching সরবরাহ করা হয়, যা কোয়েরি বা পেজের ফলাফল ক্যাশে রাখতে সাহায্য করে, ফলে পরবর্তী রিকোয়েস্টে ডেটা দ্রুত পাওয়া যায়।
$builder = $db->table('users');
$builder->cacheOn(); // ক্যাশিং চালু করা
$builder->select('id, name, email');
$query = $builder->get();
// ক্যাশিং পেজ লোড করা
$cache = \Config\Services::cache();
$cache->save('page_cache_key', 'cache_data', 300); // 5 মিনিটের জন্য ক্যাশে রাখবে
Subqueries, বিশেষত যখন JOIN বা GROUP BY অপারেশনগুলি জটিল হয়ে যায়, তখন কোড অপটিমাইজেশন এবং সার্ভারের কর্মক্ষমতা উন্নত করতে সাহায্য করে।
$subquery = $db->table('orders')->select('SUM(amount)')->where('user_id = users.id');
$builder = $db->table('users');
$builder->select('users.name, (' . $subquery . ') as total_spent');
$query = $builder->get();
অপটিমাইজেশন কৌশল:
একাধিক রেকর্ড ইনসার্ট করার সময় batch insert ব্যবহার করলে কর্মক্ষমতা বৃদ্ধি পায়, কারণ একাধিক রেকর্ড একত্রে ডাটাবেসে ইনসার্ট করা হয়।
$data = [
['name' => 'John', 'email' => 'john@example.com'],
['name' => 'Jane', 'email' => 'jane@example.com']
];
$db->table('users')->insertBatch($data);
অপটিমাইজেশন কৌশল:
N+1 Query Problem হল যখন আপনি একাধিক সম্পর্কিত রেকর্ডের জন্য একাধিক কোয়েরি চালান। এটি অপ্রয়োজনীয়ভাবে সার্ভারের লোড বাড়াতে পারে। এর পরিবর্তে, JOIN বা Batch Queries ব্যবহার করুন।
// N+1 Query Example: ডেটা রিট্রিভ করতে একাধিক কোয়েরি
foreach ($users as $user) {
$query = $db->table('orders')->where('user_id', $user->id)->get();
}
// এই সমস্যা এড়ানোর জন্য একক JOIN কোয়েরি ব্যবহার করুন:
$builder = $db->table('users');
$builder->select('users.name, orders.amount');
$builder->join('orders', 'orders.user_id = users.id');
$query = $builder->get();
CodeIgniter তে কোয়েরি অপটিমাইজেশন খুবই গুরুত্বপূর্ণ এবং ডেটাবেসের কর্মক্ষমতা বৃদ্ধি করতে সাহায্য করে। Indexing, Query Selection, Join Optimization, Caching, Batch Insert, Subqueries, এবং Avoiding N+1 Queries এর মতো কৌশলগুলো ডেটাবেসের কার্যকারিতা এবং অ্যাপ্লিকেশনের প্রতিক্রিয়া সময় বাড়াতে সাহায্য করে।
Caching হলো একটি প্রযুক্তি যা ডেটার পুনরায় রিকোয়েস্ট হওয়ার সময় সেটিকে দ্রুত অ্যাক্সেস করার জন্য সংরক্ষণ করে। এটি সাধারণত ডেটাবেস কোয়েরি অথবা ইউজার ইন্টারফেস দ্রুত লোড করার জন্য ব্যবহৃত হয়। CodeIgniter-এ caching ব্যবহার করে অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করা সম্ভব।
CodeIgniter বিভিন্ন ধরণের caching সাপোর্ট করে যেমন:
Page Caching দ্বারা পুরো পেজের আউটপুট মেমোরিতে সংরক্ষণ করা হয়, যাতে একই পেজ পুনরায় রিকোয়েস্ট করার সময় ডেটাবেস বা কন্ট্রোলার থেকে পুনরায় রেন্ডার না করতে হয়।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
}
// Page Caching সক্রিয় করা
public function index() {
$this->output->cache(60); // 60 মিনিট পর্যন্ত এই পেজ কেচ করা হবে
$this->load->view('welcome_message');
}
}
$this->output->cache()
ফাংশনটি ব্যবহার করে আমরা পেজটি কত মিনিট (এখানে 60 মিনিট) কেচ রাখতে চাই তা নির্ধারণ করি।কেচড পেজগুলো একটি নির্দিষ্ট সময় পরে এক্সপায়ার হয়ে যাবে এবং সেগুলোর জন্য নতুন কন্টেন্ট জেনারেট হবে।
Query Caching ব্যবহার করে একটি ডাটাবেস কোয়েরির ফলাফলকে মেমোরিতে সংরক্ষণ করা হয়। যখন পরবর্তী সময়ে একই কোয়েরি চালানো হয়, তখন তা ডাটাবেস থেকে পুনরায় রিট্রিভ না করে কেবল কেচড ডেটা থেকে ফলাফল ফেরত দেয়, যা পারফরম্যান্স অনেক বৃদ্ধি করে।
$this->db->cache_on(); // Query Caching চালু করা
$query = $this->db->get('users'); // একই কোয়েরি আগের রিকোয়েস্টের জন্য কেচে থাকবে
$this->db->cache_off(); // Query Caching বন্ধ করা
$this->db->flush_cache(); // সমস্ত কেচ ক্লিয়ার করা
File Caching ব্যবহার করে অ্যাপ্লিকেশন বা পেজের ডেটা ফাইল হিসেবে সংরক্ষণ করা হয়। এটি একটি নির্দিষ্ট ফাইলে ডেটা সংরক্ষণ করে, এবং পরবর্তী সময়ে সেই ফাইলটি পড়ে ডেটা ব্যবহার করা হয়।
$data = 'This is a cached data';
$file_path = './application/cache/my_cache_file.txt';
// ফাইল কেচিং লিখা
$this->cache->file->save($file_path, $data, 600); // 600 সেকেন্ড পর্যন্ত কেচ থাকবে
// ফাইল কেচিং থেকে ডেটা পড়া
$cached_data = $this->cache->file->get($file_path);
if ($cached_data) {
echo 'Cache data: ' . $cached_data;
} else {
echo 'No cache data found.';
}
// ফাইল কেচিং মুছে ফেলা
$this->cache->file->delete($file_path);
Database Caching ব্যবহার করে ডাটাবেস থেকে ডেটা রিট্রিভ করার সময় কেবল একবার কোয়েরি চালানো হয় এবং তার ফলাফল কেচড হয়। পরবর্তী রিকোয়েস্টে কেচড ডেটা ব্যবহার করা হয়।
$this->db->cache_on(); // ডাটাবেস কেচিং চালু করা
$query = $this->db->get('users'); // কোয়েরি রেজাল্ট কেচ হবে
$this->db->cache_off(); // ডাটাবেস কেচিং বন্ধ করা
$this->db->flush_cache(); // সমস্ত ডাটাবেস কেচ ক্লিয়ার করা
CodeIgniter-এ Caching ব্যবহার করে অ্যাপ্লিকেশনের পারফরম্যান্স দ্রুত করা যায় এবং সার্ভারের লোড কমানো সম্ভব। Page Caching, Query Caching, File Caching, এবং Database Caching এর মাধ্যমে ডেটা দ্রুত লোড করা সম্ভব, যা ব্যবহারকারীর অভিজ্ঞতা উন্নত করে এবং সার্ভারের দক্ষতা বৃদ্ধি করে।
Asset Minification এবং Compression হল ওয়েব অ্যাপ্লিকেশন বা ওয়েবসাইটের CSS, JavaScript, এবং HTML ফাইলের সাইজ কমানোর প্রক্রিয়া, যাতে পেজ লোড সময় কমে এবং ওয়েবসাইটের পারফরম্যান্স উন্নত হয়। CodeIgniter-এ Asset Minification এবং Compression এর মাধ্যমে আপনি সহজেই এসব ফাইল কম্প্রেস এবং মিনিফাই করতে পারেন।
Minification হল একটি প্রক্রিয়া যেখানে কোডের অপ্রয়োজনীয় চরিত্রগুলো (যেমন স্পেস, কমেন্ট, লাইন ব্রেক, ইত্যাদি) সরিয়ে দেওয়া হয়। এর মাধ্যমে ফাইলের সাইজ কমানো যায়, যা লোডিং সময়কে দ্রুত করে।
Compression হল একটি প্রক্রিয়া যেখানে ফাইলের সাইজ ছোট করার জন্য অ্যালগরিদম ব্যবহার করা হয়। এর মাধ্যমে আরও বেশি সঞ্চয় করা যায় এবং সার্ভারের লোড কমে। এটি সাধারণত gzip বা Brotli ব্যবহার করে করা হয়।
CodeIgniter এ Asset Minification সম্পন্ন করার জন্য কিছু বাইরের লাইব্রেরি বা টুলস ব্যবহার করতে হবে। যেমন:
এখানে একটি সাধারণ পদ্ধতি দেখানো হলো, যেখানে CSS এবং JS ফাইল মিনিফাই করা হয়।
আপনি application/libraries
ডিরেক্টরিতে একটি লাইব্রেরি তৈরি করে CSS এবং JS ফাইল মিনিফাই করতে পারেন।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Minify_assets {
public function minify_css($css_content) {
return preg_replace('/\s+/', ' ', $css_content); // Spaces remove
}
public function minify_js($js_content) {
return preg_replace('/\s+/', ' ', $js_content); // Spaces remove
}
}
class Assets extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('minify_assets'); // Minify library লোড
}
public function load_css() {
$css_content = file_get_contents('path_to_your_css_file.css');
$minified_css = $this->minify_assets->minify_css($css_content);
echo "<style>" . $minified_css . "</style>";
}
public function load_js() {
$js_content = file_get_contents('path_to_your_js_file.js');
$minified_js = $this->minify_assets->minify_js($js_content);
echo "<script>" . $minified_js . "</script>";
}
}
CodeIgniter এ Gzip Compression অথবা Brotli ইত্যাদি কনফিগারেশনের মাধ্যমে ফাইল কম্প্রেস করা যেতে পারে।
Gzip কম্প্রেসন সক্রিয় করার জন্য, আপনি application/config/config.php
ফাইলে নিম্নলিখিত কোড ব্যবহার করতে পারেন:
$config['compress_output'] = TRUE; // Gzip compression সক্রিয়
এটি সার্ভার থেকে আউটপুট প্রেরণের সময় ফাইল গুলি কম্প্রেস করে পাঠায়।
public function compress_output($data) {
if ( !empty($data) ) {
$output = gzencode($data, 9); // Maximum compression level (9)
return $output;
}
return $data;
}
আপনি file caching ব্যবহার করে মিনিফাইড এবং কম্প্রেসড ফাইলগুলো ক্যাশে রাখতে পারেন, যাতে পুনরায় রিকোয়েস্টের সময় এগুলো দ্রুত পাওয়া যায়। CodeIgniter এ Cache
ব্যবহার করা সহজ।
$this->output->cache(60); // 60 মিনিটের জন্য ক্যাশ করা হবে
ধরা যাক, আপনি CSS এবং JS ফাইল মিনিফাই ও কম্প্রেস করে ওয়েব পেজে লোড করতে চান:
class Assets extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('minify_assets'); // Minify Assets Library লোড
}
public function load_assets() {
// CSS ফাইল মিনিফাই করা
$css_content = file_get_contents('path_to_your_css_file.css');
$minified_css = $this->minify_assets->minify_css($css_content);
// JS ফাইল মিনিফাই করা
$js_content = file_get_contents('path_to_your_js_file.js');
$minified_js = $this->minify_assets->minify_js($js_content);
// Gzip Compression
$compressed_css = gzencode($minified_css, 9);
$compressed_js = gzencode($minified_js, 9);
// মিনিফাইড ও কম্প্রেসড ফাইলগুলি ওয়েব পেজে যোগ করা
echo "<style>" . $compressed_css . "</style>";
echo "<script>" . $compressed_js . "</script>";
}
}
Asset Minification এবং Compression ওয়েব অ্যাপ্লিকেশনের পারফরম্যান্স এবং লোডিং টাইম উন্নত করার জন্য অপরিহার্য। CodeIgniter-এ Minification এবং Compression খুব সহজে বাস্তবায়ন করা যায় এবং এর মাধ্যমে আপনার ওয়েব অ্যাপ্লিকেশন আরও দ্রুত, সুরক্ষিত, এবং ব্যান্ডউইথ সাশ্রয়ী হয়ে ওঠে।
Database Indexing এবং Optimization হল ডাটাবেসের কর্মক্ষমতা উন্নত করার জন্য গুরুত্বপূর্ণ কৌশল। Indexing ডাটাবেসের দ্রুত অনুসন্ধান এবং Optimization ডাটাবেসের কার্যকারিতা বাড়ানোর জন্য ব্যবহৃত হয়। CodeIgniter-এ এই দুটি বিষয় কার্যকরভাবে ব্যবহার করা যায়, যা ডেটা অ্যাক্সেসের গতি বাড়ায় এবং সার্ভারের লোড কমায়।
Indexing হলো ডাটাবেসে একটি বিশেষ ডাটা স্ট্রাকচার তৈরি করা যা ডাটাবেসের দ্রুত অনুসন্ধান, সিলেকশন এবং সাজানোর জন্য ব্যবহৃত হয়। একটি ইনডেক্স ডাটাবেস টেবিলের নির্দিষ্ট কলামের উপরে তৈরি করা হয়, যার মাধ্যমে ডেটার অ্যাক্সেস সময় কমে যায়।
যখন কোনো ডাটাবেস টেবিল তৈরি করা হয়, তখন ইনডেক্স তৈরি করা যেতে পারে। উদাহরণ:
CREATE INDEX index_name ON table_name (column_name);
CREATE INDEX index_name ON table_name (column1, column2);
CodeIgniter এর dbforge
ক্লাস ব্যবহার করে ইনডেক্স তৈরি করা যায়। উদাহরণ:
$this->load->dbforge();
$fields = array(
'username' => array('type' => 'VARCHAR', 'constraint' => '100')
);
$this->dbforge->add_field($fields);
$this->dbforge->add_key('username', TRUE); // Unique index on username
$this->dbforge->create_table('users');
ডাটাবেস অপ্টিমাইজেশন এমন একটি প্রক্রিয়া যা ডাটাবেসের কার্যকারিতা উন্নত করে। এটি ডাটাবেসে বিভিন্ন প্রশ্নের দ্রুত প্রক্রিয়া এবং সার্ভারের লোড কমানোর জন্য ব্যবহৃত হয়।
ইনডেক্স ডেটাবেসের অনুসন্ধান কার্যকারিতা উন্নত করে। কিন্তু অতিরিক্ত ইনডেক্স সিস্টেমের পারফরম্যান্স কমাতে পারে, তাই শুধুমাত্র প্রয়োজনীয় কলামগুলির উপর ইনডেক্স তৈরি করা উচিত।
ডাটাবেস থেকে বারবার এক্সেস না করে, রিট্রিভ করা ডেটাকে ক্যাশে করে রাখতে হবে। CodeIgniter এর caching
ব্যবস্থাপনা ব্যবহারের মাধ্যমে ক্যাশিং সুবিধা পাওয়া যায়।
ডাটাবেস সংযোগগুলি পুনরায় ব্যবহার করা উচিত, নতুন সংযোগ খোলার পরিবর্তে। এটি ডাটাবেসের লোড কমাবে এবং সার্ভারের কর্মক্ষমতা বাড়াবে।
যতটা সম্ভব সাব-কোয়েরি (Sub-queries) ব্যবহার এড়িয়ে চলুন। এটি কোয়েরির কর্মক্ষমতা কমিয়ে দিতে পারে।
ডাটাবেসের জন্য বেশ কিছু আদর্শ কোয়েরি রয়েছে। উদাহরণস্বরূপ:
LIMIT
ব্যবহার করুন যখন আপনি শুধুমাত্র একটি নির্দিষ্ট সংখ্যক রেকর্ড চান।JOIN
ব্যবহারের সময় সঠিক ইন্ডেক্স ব্যবহার নিশ্চিত করুন।যখন একাধিক ডাটাবেস অপারেশন একসঙ্গে করতে হয়, তখন Transactions ব্যবহার করুন। এটি ডেটাবেসের নিরাপত্তা এবং কার্যকারিতা উন্নত করতে সাহায্য করে।
$this->db->trans_start(); // Transaction শুরু
$this->db->insert('table1', $data1);
$this->db->update('table2', $data2);
$this->db->trans_complete(); // Transaction শেষ
if ($this->db->trans_status() === FALSE) {
// Transaction ব্যর্থ
log_message('error', 'Transaction failed');
} else {
// Transaction সফল
}
CodeIgniter এর Query Builder সিস্টেম সহজ এবং কার্যকরীভাবে কোয়েরি অপ্টিমাইজ করতে সাহায্য করে।
$this->db->select('id, name, email');
$this->db->from('users');
$query = $this->db->get();
$this->db->select('users.id, users.name, roles.role_name');
$this->db->from('users');
$this->db->join('roles', 'roles.id = users.role_id');
$query = $this->db->get();
CodeIgniter এ query caching ব্যবহারের মাধ্যমে ডেটাবেসে পুনরাবৃত্তি হওয়া কোয়েরি থেকে আউটপুট সঞ্চয় করা যায়।
$this->db->cache_on();
$query = $this->db->get('users');
$this->db->cache_off();
ডাটাবেসের কার্যকারিতা পরীক্ষা করতে profiling ব্যবহার করুন। এটি ডাটাবেসের সকল কার্যকলাপ রেকর্ড করে, যা অপ্টিমাইজেশনে সাহায্য করে।
$this->output->enable_profiler(TRUE);
CodeIgniter-এ Database Indexing এবং Optimization প্রযুক্তি ব্যবহার করে আপনার অ্যাপ্লিকেশনকে আরও দ্রুত, কার্যকরী এবং সুরক্ষিত করা সম্ভব। সঠিক ইনডেক্স ব্যবহার, কোয়েরি অপ্টিমাইজেশন এবং ক্যাশিং ব্যবহার করে আপনি আপনার ডাটাবেস অ্যাপ্লিকেশনটির কর্মক্ষমতা উল্লেখযোগ্যভাবে বৃদ্ধি করতে পারেন।
Read more