Thời gian đọc: 6 phút
ORM (Object-Relational Mapping) là một kỹ thuật lập trình giúp lập trình viên làm việc với cơ sở dữ liệu quan hệ (RDBMS) thông qua các đối tượng trong mã nguồn thay vì phải sử dụng trực tiếp ngôn ngữ SQL. ORM ánh xạ các bảng trong cơ sở dữ liệu thành các lớp trong ngôn ngữ lập trình, các cột của bảng thành thuộc tính của lớp và các bản ghi trong bảng thành các đối tượng của lớp đó.
Ví dụ, nếu bạn có một bảng users
với các cột id
, name
, email
, ORM sẽ ánh xạ bảng này thành một lớp User
với các thuộc tính tương ứng. Bạn có thể tương tác với cơ sở dữ liệu thông qua lớp User
mà không cần viết SQL trực tiếp.
ORM hoạt động dựa trên việc ánh xạ giữa các đối tượng trong ngôn ngữ lập trình và các thành phần trong cơ sở dữ liệu. Dưới đây là cách ORM thực hiện một số tác vụ cơ bản:
save()
trên một đối tượng, ORM sẽ tạo và thực thi câu lệnh INSERT
hoặc UPDATE
.
// Sử dụng Eloquent ORM trong Laravel
$user = new User();
$user->name = 'John Doe';
$user->email = '[email protected]';
$user->save(); // ORM tự động tạo và thực thi câu lệnh SQL INSERT
// Lấy dữ liệu
$users = User::all(); // ORM tự động tạo và thực thi câu lệnh SELECT
Để đánh giá hiệu suất của ORM, chúng ta sẽ so sánh thời gian thực thi của các tác vụ cơ bản như Insert, Update, và Select giữa việc sử dụng ORM và SQL thuần (Raw SQL).
$user = new User();
$user->name = 'John Doe';
$user->email = '[email protected]';
$user->save(); // ORM tự động thực hiện lệnh INSERT
DB::insert('INSERT INTO users (name, email) VALUES (?, ?)', ['John Doe', '[email protected]']);
Phương pháp | Thời gian thực thi (ms) |
---|---|
Eloquent ORM | 20 ms |
Raw SQL | 10 ms |
$user = User::find(1);
$user->email = '[email protected]';
$user->save(); // ORM tự động thực hiện lệnh UPDATE
DB::update('UPDATE users SET email = ? WHERE id = ?', ['[email protected]', 1]);
Phương pháp | Thời gian thực thi (ms) |
---|---|
Eloquent ORM | 25 ms |
Raw SQL | 12 ms |
$users = User::where('status', 'active')->get(); // ORM tự động thực hiện lệnh SELECT
$users = DB::select('SELECT * FROM users WHERE status = ?', ['active']);
Phương pháp | Thời gian thực thi (ms) |
---|---|
Eloquent ORM | 30 ms |
Raw SQL | 15 ms |
Từ bảng so sánh trên, chúng ta có thể thấy rằng trong hầu hết các trường hợp, việc sử dụng Raw SQL có thể nhanh hơn Eloquent ORM từ 2 đến 3 lần. Điều này là do ORM cần thực hiện thêm nhiều bước như ánh xạ đối tượng, tạo truy vấn SQL, và xử lý kết quả truy vấn. Tuy nhiên, lợi ích về mặt dễ sử dụng, khả năng bảo trì, và tính trừu tượng của ORM thường được coi là đáng giá so với sự giảm sút về hiệu suất trong nhiều ứng dụng.
ORM là một công cụ mạnh mẽ giúp lập trình viên làm việc với cơ sở dữ liệu dễ dàng hơn bằng cách trừu tượng hóa các thao tác cơ sở dữ liệu. Mặc dù ORM có thể không đạt hiệu suất cao nhất so với SQL thuần, nhưng lợi ích về mặt phát triển nhanh chóng và dễ bảo trì thường vượt trội trong hầu hết các dự án. Khi sử dụng ORM, lập trình viên cần phải hiểu rõ ưu và nhược điểm của nó để áp dụng hợp lý, đặc biệt là trong các hệ thống yêu cầu hiệu suất cao.