Orm là gì
Trong cách phát triển ứng dụng web hiện nay chắc hẳn các bạn đã quen thuộc với với từ khóa ORM(Object Relational Mapping). Khi nhưng mà thời đại của những framework ứng với các ngôn ngữ sẽ lên ngôi một cách khỏe khoắn mẽ, ORM ngay sát như là việc lựa chọn hoàn hảo và tuyệt vời nhất của những nhà cải cách và phát triển hiện nay.Bạn đang xem: Object relational mapping là gì
ORM giúp chúng ta dễ dàng thao tác làm việc với dữ liệu vớiDatabase hơn, giúp bọn họ dễ code, dễ maintain rộng . . . Ở nội dung bài viết này tôi sẽ ra mắt chung về ORM, đi sâu vào phân tích những điểm ưu điểm, yếu điểm và lúc nào áp dụng chúng trong số dự án thực tế.
Bạn đang xem: Orm là gì
Để mang đến dễ theo dõi từ thời đặc điểm đó của nội dung bài viết tôi xin được dùng ORM nỗ lực cho các từ Object Relational Mapping

1. ORM là gì ?
Theo Wikipedia:
Object-relational mapping (ORM, O/RM, và O/R mapping tool) in computer science is a programming technique for converting data between incompatible type systems using object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. There are both không lấy phí and commercial packages available that perform object-relational mapping, although some programmers opt to lớn construct their own ORM tools.
Hiểu một cách dễ dàng và đơn giản thì
ORM là 1 kỹ thuật lập trình giúp ánh xạ các record tài liệu trong hệ cai quản trị cơ sở dữ liệu sang dạng đối tượng người sử dụng đang định nghĩa trong các class - một khái niệm phổ biến được áp dụng trong tất cả các ngôn ngữ tiến bộ ngày ni như: Java, PHP, Ruby. Chúng ta cũng có thể áp dụng kĩ thật này với bất kể dự án nào chúng ta thích.

Theo Martin Fowler gồm hai patterns được áp dụng cho những cách kiến tạo ORM không giống nhau.
Một sốORMnổi tiếng áp dụng Active Record hoàn toàn có thể kể thương hiệu là: Eloquent, CachePHP, JOOQ, TOPLINK


Một số ORM khét tiếng sử dụng Data Mapper như: Doctrine, Hibernate, SqlAlchemy
2. ORM hoạt động như rứa nào ?Đặc trưng cơ bản của ORM là gói gọn gàng CSDL trong 1 object. Một phần của object sẽ đựng data, với phần còn lại lo câu hỏi data cách xử lý như làm sao và biến chuyển nó thành database quan hệ.
ORM giải quyết và xử lý vấn đề đồng hóa giữa kiểu dữ liệu trả về không giống nhau. Một bên là các đại lý dữ liệu, ở đó tài liệu được mô tả dưới dạng tập hòa hợp các phiên bản ghi. Một mặt là những đối tượng, ở đó dữ liệu đc hiện thị bên dưới dạng object

3. Ưu với nhược điểm ORM
Ví dụ về việc tìm và đào bới kiếm danh sách bạn dạng ghi với đk với sql thuần
book_list = new List();sql = "SELECT * FROM library WHERE tác giả = "Linus"";data = query(sql);while (row = data.next()) book = new Book(); book.setAuthor(row.get("author"); book_list.add(book);Với ORM, nó sẽ đơn giản như sau
book_list = BookTable.query(author="Linus");Từ ví dụ dễ dàng trên chúng ta dễ dàng nhận thấy các ưu điểm sau khi áp dụng ORM
Ưu điểm
Rất nhiều thứ được triển khai "tự động", liên quan tới việc xử lí dữ liệu, trong lấy một ví dụ trên chúng ta không cần suy nghĩ việc dùng vòng nhằm convert data từ bỏ mysql ra, Chỉ nên biết đầu vào là keyword đầu ra trả lại 1 danh sách các quyển sách gồm author=LinusViệc thực hiện ORM có tác dụng bạn bắt buộc phải viết code theo mô hình MVC, khiến code của doanh nghiệp dễ sửa đổi, gia hạn hơn.Bạn không cần phải biết quá các về MYSQL, bạn vẫn có thể tiếp cận dễ dàng với ORM.Model k ràng buộc ngặt nghèo với ứng dụng, hay nói bí quyết khác, model thì linh hoạt, do vậy chúng ta có thể thay đổi hoặc sử dụng nó bất cứ chỗ nàoORM cho phép bạn tận dụng ưu điểm của OOP như kế thừa tài liệu mà không hẳn đau đầuNhược điểm
Với từng framework sẽ có một thư viện ORM không giống nhau, tất nhiên là các bạn phải mất thời hạn học nó. Và bởi vì chúng là tủ sách nên sẽ rất "nặng".Performance ổn đối với các truy tìm vấn thông thường, mà lại Raw SQL sẽ luôn luôn làm giỏi hơn với các dự án lớn.ORM được xem như là abstracts của DB. Nếu khách hàng không để ý đến những gì thực sự xẩy ra khi sử dụng ORM. Nó rất có thể là cái bẫy với những việc N + 1 query.4 Đánh giá chỉ performance của ORMNhư ở đoạn nhược điểm mình có nói ORM sẽ có được performance chậm trễ hơn đối với việc thực hiện raw sql. Dưới đấy là một những thống kê với Eloquent ORM của Laravel và raw mysql.Môi trường:
CPU: Quad core Intel Xeon E31220Network: Broadcom NetXtreme BCM5722 Gigabit Ethernet PCI ExpressMemory: 8.0 GBHDD: 2000.4 GBOperating System: CentOS4.1 Insert
Ở đây những nhà thử nghiệm vẫn insert số lượng bài viết khác nhau trường đoản cú 1000 đến 10000 cho cả 2 kĩ thuật trong mỗi vòng lặp.
Eloquent ORM
1 | 1000 | 665,25 | 619,5 | 585,6 | 623,5 | 39,97 |
2 | 2000 | 1150 | 1140 | 1110 | 1133,3 | 20,81 |
3 | 3000 | 1490 | 1490 | 1420 | 1466,7 | 40,41 |
4 | 4000 | 1770 | 1790 | 1670 | 1743,3 | 64,29 |
5 | 5000 | 2080 | 2090 | 2220 | 2130,0 | 78,10 |
6 | 6000 | 2540 | 2510 | 2560 | 2536,7 | 25,16 |
7 | 7000 | 2930 | 3010 | 3080 | 3006,7 | 75,05 |
8 | 8000 | 3360 | 3520 | 3380 | 3420,0 | 87,17 |
9 | 9000 | 3800 | 3900 | 3880 | 3860,0 | 52,91 |
10 | 10000 | 4270 | 4360 | 4390 | 4340,0 | 62,44 |
Raw SQL
1 | 1000 | 195,81 | 189,62 | 180,1 | 188,5 | 7,91 |
2 | 2000 | 322,78 | 335,64 | 307,01 | 321,8 | 14,33 |
3 | 3000 | 413,4 | 437,62 | 458,24 | 436,4 | 22,44 |
4 | 4000 | 598,87 | 567,57 | 559,01 | 575,2 | 20,98 |
5 | 5000 | 725,5 | 740,94 | 780,15 | 748,9 | 28,17 |
6 | 6000 | 867,93 | 869,12 | 891,27 | 876,1 | 13,14 |
7 | 7000 | 1000 | 996,14 | 949,05 | 981,7 | 28,36 |
8 | 8000 | 1150 | 1120 | 1130 | 1133,3 | 15,27 |
9 | 9000 | 1190 | 1270 | 1220 | 1226,7 | 40,41 |
10 | 10000 | 1430 | 1380 | 1450 | 1420,0 | 36,05 |
Từ bảng trên ta có biểu vật dụng như sau
4.2 Update
Eloquent ORM
1 | 1000 | 305,59 | 316,06 | 297,93 | 306,5 | 9,10 |
2 | 2000 | 522,06 | 565,12 | 543,43 | 543,5 | 21,53 |
3 | 3000 | 778,4 | 772,33 | 790,52 | 780,4 | 9,26 |
4 | 4000 | 1040 | 1010 | 1080 | 1043,3 | 35,11 |
5 | 5000 | 1290 | 1240 | 1260 | 1263,3 | 25,16 |
6 | 6000 | 2540 | 2510 | 2560 | 2536,7 | 25,16 |
7 | 7000 | 2930 | 3010 | 3080 | 3006,7 | 75,05 |
8 | 8000 | 3360 | 3520 | 3380 | 3420,0 | 87,17 |
9 | 9000 | 3800 | 3900 | 3880 | 3860,0 | 52,91 |
10 | 10000 | 4270 | 4360 | 4390 | 4340,0 | 62,44 |
Raw SQL
1 | 1000 | 195,81 | 189,62 | 180,1 | 188,5 | 7,91 |
2 | 2000 | 322,78 | 335,64 | 307,01 | 321,8 | 14,33 |
3 | 3000 | 413,4 | 437,62 | 458,24 | 436,4 | 22,44 |
4 | 4000 | 598,87 | 567,57 | 559,01 | 575,2 | 20,98 |
5 | 5000 | 725,5 | 740,94 | 780,15 | 748,9 | 28,17 |
6 | 6000 | 867,93 | 869,12 | 891,27 | 876,1 | 13,14 |
7 | 7000 | 1000 | 996,14 | 949,05 | 981,7 | 28,36 |
8 | 8000 | 1150 | 1120 | 1130 | 1133,3 | 15,27 |
9 | 9000 | 1190 | 1270 | 1220 | 1226,7 | 40,41 |
10 | 10000 | 1430 | 1380 | 1450 | 1420,0 | 36,05 |
Từ bảng bên trên ta bao gồm biều vật dụng sau
4.3 Select
Ở đây những thứ nghiệm chia làm 3 lượt
4.4 Đánh giá và phân tích
Từ những số liệu bên trên có thể tiện lợi thấy được performance của raw sql rõ ràng tốt hơn so với ORM trong tất cả các hành động select, insert, update.
Xem thêm: Diện Tích Hình Thoi Bằng Một Nửa Diện Tích Hình Chữ Nhật Tính Chu Vi Hình Chữ Nhật
Lí do tại đây là: ORM cần thời gian tạo model instances, tạo ra các property cho mã sản phẩm và transform đối tượng người dùng model thành tài liệu quan hệ trước khi thực hiện việc giao tiếp với database. Tất cả những gì đằng sau nó là Laravel vẫn convert từng code Eloquent ORM thành câu lệnh SQL phù hợp và kế tiếp thực thi trên tầng database và trả lại kết quả lại tầng application. Vì chưng vậy thời gian để tiến hành 1 tác vụ luôn luôn mất nhiều thời hạn hơn so với câu hỏi dùng raw sql.
Nhưng khoan, đừng vội quan sát những con số trên nhưng vội nói ORM là đồ vứt đi.
Trong thực tế không ai select vài nghìn bản ghi, hay triển khai việc tạo thành vài nghìn bản ghi vào một lúc.
Tức là khi số lượng phiên bản ghi càng không nhiều thì độ chênh lênh về hiệu suất giảm đi đáng kể. Cơ hội đó thêm vào đó việc sử dụng cách kinh nghiệm cache của ORM tạo nên ứng dụng của công ty cũng tạm chấp nhận được đối với những ích lợi về vận tốc phát tiển ứng dụng(thời gian phạt triển), loại trừ việc áp dụng code lặp đi lặp lại, bảo mật tốt hơn vào những thứ tuyệt vời nhất khác nữa.
5. Tổng kếtTóm lại, đi xuyên thấu cả bài xích viết, tôi đã mô tả cách hoạt động vui chơi của ORM, nêu các điểm ưu điểm và điểm yếu kém của ORM. Việc có nên áp dụng ORMhay không vẫn luôn là đề tài tranh luận chưa có hồi kết.
Về tay nghề của bản thân khi có tác dụng dự án, mình thường xuyên mix giữa ORM và Raw SQL làm sao để cho hiệu quả, với những truy vấn thông thường, ORM là tuyển lựa của mình. Cùng với các tình huống phải thao tác làm việc với nhiều phiên bản ghi,raw SQL gồm vẻ hợp lí hơn. Nhưng khi sử dụng raw sql các bạn phải thực sự cẩn trọng về vấn đề Sql injection.
Xem thêm: Soạn Người Lái Đò Sông Đà Chi Tiết ), Soạn Bài Người Lái Đò Sông Đà
Cảm ơn các bạn đã theo dõi bài viết trên, trong nội dung bài viết có xem thêm từ một vài nguồn.