Khái niệm, định nghĩa Object-relational mapping là gì?

Object-relational mapping(hay còn gọi là ORM) là một công nghệ lập trình, cho phép chuyển đổi (convert) từ những data trong database với những đối tượng trong các ngôn ngữ lập trình hướng đối tượng.

THÔNG TIN CHÍNH

ORM là kỹ thuật chuyển đổi dữ liệu giữa các hệ thống khác (không phải là mô hình hướng đối tượng) sang các đối tượng trong ngôn ngữ lập trình hướng đối tượng. Trong trường hợp này chúng ta chuyển dữ liệu từ các dòng dữ liệu trong CSDL quan hệ sang đối tượng. Thông thường, những ngôn ngữ hướng đối tượng như python tồn tại những kiểu không thể thể hiện bằng các kiểu nguyên thủy(giống như là integer, string) .

Sử dụng ORM mang lại cho bạn lợi thế sau trong trường hợp hệ thống phân tán quy mô lớn – SQL phức tạp tạo ra tải nặng trên máy chủ DB. Đây không phải là điều bạn luôn muốn đặc biệt khi bạn có kiến ​​trúc hệ thống phân tán được triển khai trên dịch vụ cloud, nơi mà việc scaling luôn được ưu tiên horizontal scaling hơn là vertical. Hầu hết các hệ thống DBMS không mở rộng theo chiều ngang.

Ngay cả khi họ làm như vậy, bạn luôn muốn nâng cấp máy chủ ứng dụng của mình, điều này cho phép bạn kiểm soát nhiều hơn đối với tự động so sánh. Khi bạn sử dụng ORM, bạn có các công cụ tốt hơn để kiểm soát tải trên DB bằng cách tăng quá trình xử lý trong ứng dụng. Ngoài ra, điều này tạo cơ hội để lưu trữ kết quả trong ứng dụng.

TÍNH NĂNG CHÍNH CỦA ORM

Portable – tính năng động: ORM được sử dụng để bạn viết cấu trúc của bạn một lần và lớp ORM sẽ xử lý câu lệnh cuối cùng phù hợp với DBMS được cấu hình. Đây là một lợi thế tuyệt vời khi thao tác truy xuất dữ liệu đơn giản như giới hạn được thêm vào dưới dạng ‘limit 0,100’ ở cuối câu lệnh Select trong MySQL, trong khi đó với cách truy xuất thông thường bạn phải viết là ‘Select Top 100 From Table’ trong MS SQL.

Nesting Of Data – truy xuất lồng dữ liệu:  trong trường hợp database bạn có nhiều bảng và các bảng này liên hệ rối rắm phức tạp về dữ liệu thì ORM sẽ tự động lấy dữ liệu cho bạn một cách đơn giản(ở đây đang nói tới việc đơn giản trong truy xuất dữ liệu, không bàn về vấn đề tối ưu truy xuất)

Single Language – không cần biết SQL: thật vậy với nguyên lý thiết kế là ánh xạ toàn bộ dữ liệu lấy được từ DBMS sang bộ nhớ nên việc thao tác truy suất bây giờ chỉ phụ thuộc vào ngôn ngữ lập trình bạn đang xử dụng, bạn chẳng cần quan tâm phía đằng sau của ORM sẽ làm gì sinh ra mã SQL như thế nào khi truy xuất SQL, và kết quả là chúng ta chỉ cần nhuần nhuyễn ngôn ngữ lập trình đang dùng.

Adding is like modifying – thêm sửa dữ liệu là như nhau: đối với ORM, nó không phân biệt giữa thêm mới và cập nhật mọi tác vụ có liên quan đến sửa đổi hay chèn dữ liệu đều được xem là định nghĩa thêm mới, hai tác vụ này được xem như là một.

Những lý do gây cản trở việc cài đặt ORM

Slow – chậm: trong tất cả các bài đánh giá và so sánh về tốc độ truy suất dữ liệu bạn sẽ thấy ORM dù cho được tối ưu đến đâu cũng sẽ không bao giờ nhanh hơn được so với truy vấn trực tiếp từ SQL.

Tunning – khó điều chỉnh: Tối ưu hóa các câu lệnh SQL là điều nên làm đối với các dữ liệu lớn, tuy nhiên đối với ORM quá trình này rất khó khăn và phức tạp, bởi vì bạn phải tuân theo thiết kế của ORM và ưu điểm mà nó mang lại là hạn chế và cô lập quá trình thao tác dữ liệu trực tiếp lên DBMS.

Complex Queries – truy vấn phức tạp: mặc dù được thiết kế để đơn giản hóa tuy nhiên một vài ORM thao tác dữ liệu rất rối rắm, các đoạn code rất phức tạp và khó hiểu hơn nhiều lần so với SQL thuần.

Studing – học tập phức tạp: Đa phần các hệ thống với các tác vụ nặng và phức tạp thư viện ORM thuần túy được cung cấp không đảm bảo về hiệu năng, và bạn cùng các thành viên trong team chắc chắn phải nghiên cứu từng dòng code để tối ưu cho hệ thống của mình.