PHÂN TÍCH NGUYÊN NHÂN LÀM CHẬM HỆ THỐNG

Một phần của tài liệu 28006_1712202001856244NOIDUNGLUANVANLETHANHTUNG (Trang 57)

7. Bố cục luận văn

3.1. PHÂN TÍCH NGUYÊN NHÂN LÀM CHẬM HỆ THỐNG

3.1.1. Truy vấn database: sử dụng SQL server 2008

Thực hiện các phiên kiểm tra trên laptop Lenovo T61, hệ điều hành Windows 7 64 bit với bộ vi xử lý 2.8 GHz, sử dụng phiên bản 64 bit của SQL Server 2008 Standard và MongoDB 1.4.1, ta nhận thấy hệ quản trị cơ sở dữ liệu SQL server 2008 đã bộc lộ những điểm yếu khi so sánh với MongoDB [6].

- So sánh chức năng Insert: Đây là điểm khác biệt rõ ràng nhất giữa SQL server và MongoDB.

Quá trình này được thực hiện bằng cách chèn 50.000 đối tượng độc lập sử dụng NoRM của MongoDB và LINQ tới SQL của SQL server 2008 với mô hình mẫu như hình 3.1.

Hình 3.2: So sánh chức năng Insert giữa SQL và MongoDB.

Dễ dàng nhận thấy, với 100 đối tượng và 1.000 đối tượng thì thời gian insert giữa hai CSDL là tương đương nhau, với 5.000 đối tượng thì đã có sự chênh lệch giữa hai CSDL này. Tuy nhiên, khi chèn 25.000 và 50.000 đối tượng thì thấy rõ với MongoBD thời gian insert ít hơn rất nhiều lần so với SQL server.

Ngoài ra nhìn vào lược đồ so sánh, ta cũng thấy rằng thời gian xử lý của MongoDB khi xử lý 5000 hay 50.000 đối tượng gần như tương đương nhau, sự sai khác chỉ trong khoảng vài giây. Trong khi đó, SQL lại bộc lộ khả năng xử lý chậm khi số lượng đối tượng tăng lên, cụ thể thời gian xử lý tăng lên gấp 16 lần khi so sánh giữa việc insert 5.000 và 50.000 đối tượng. Như vậy, giữa hai CSDL thì MongoDB có tốc độ xử lý nhanh và ổn định hơn nhiều so với SQL.

- So sánh tốc độ truy vấn: + Khi chỉ có khóa chính

Hình 3.3: So sánh tốc độ truy vấn từ cùng đối tượng khác nhau trong trường ID của mỗi bản ghi.

Nhìn vào hình 3.3, rõ ràng MongoDB vẫn tỏ ra vượt trội hơn hẳn so với SQL về hiệu suất. Cụ thể, trong trường hợp xử lý với số lượng đối tượng nhỏ (khoảng 50 đối tượng), thời gian xử lý của SQL và MongoDB sai lệch chỉ vào khoảng 0,02 giây, tốc độ truy vấn chênh lệch nhỏ (khoảng 125 đối tượng /1s). Tuy nhiên, khi số lượng đối tượng tăng lên, SQL cần thời gian xử lý nhiều hơn so với MongoDB. Đặc biệt, khi số lượng đối tượng cần xử lý lớn vào khoảng từ 25.000 đến 50.000 đối tượng thì thời gian xử lý của SQL gấp ba lần so với MongoDB. Như khi cùng xử lý 50.000 đối tượng, SQL mất 28 giây để xử lý thì MongoDB chỉ cần 10,4 giây. Tốc độ truy vấn khi chỉ có khóa chính của MongoDB trong trường hợp này là 4.808 đối tượng/1s, của SQL là

1.786 đối tượng/1s. Như vậy, tốc độ truy vấn của MongoDB nhanh gấp ba lần so với SQL.

+ Khi có khóa ngoại, mô hình mẫu lúc này có dạng như hình 3.4.

Hình 3.4: Mô hình mẫu 2.

Khi sử dụng khóa ngoại, tốc độ truy vấn giữa SQL và MongoDB vẫn có sự khác biệt và thể hiện tính vượt trội về mặt hiệu suất của MongoDB so với SQL. Tiến hành so sánh tương tự như trong trường hợp chỉ có khóa chính, ta thấy rằng thời gian xử lý đối với cùng một số lượng đối tượng của SQL bao giờ cũng lớn hơn rất nhiều so với MongoDB. Hay tốc độ truy vấn của MongoDB nhanh hơn so với SQL (khoảng 2,5 lần).

Như vậy, việc sử dụng SQL server 2008 đã không còn phù hợp với sự phát triển của công nghệ thông tin, nó đã bộc lộ những yếu kém so với những công nghệ hiện tại. Việc tìm kiếm công nghệ thay thế SQL server 2008 trở thành yêu cầu đối với việc hiện đại hóa trong quản lý thông tin. Từ những so sánh đã đạt được, ta thấy rằng sử dụng MongoDB chính là một trong những giải pháp hữu hiệu để giải quyết vấn đề này.

3.1.2. Quá trình xử lý luồng dữ liệu: Kiểu truyền thống (blocking)

Nếu chúng ta yêu cầu một thao tác I/O là blocking điều này có nghĩa là luồng điều khiển không được trả về cho ứng dụng cho đến khi thao tác I/O được hoàn tất, chúng ta không làm được việc gì khác ngoài việc chờ đợi thao tác I/O được thực hiện xong.

Điều ngược lại nếu chúng ta yêu cầu một thao tác I/O là non-Blocking thì luồng điều khiển được trả lại ngay cho ứng dụng là không cần chờ đợi thao tác I/O thực hiện xong. Chúng ta có thể làm được việc khác ví dụ như nhận các yêu cầu khác hoặc đồng bộ CSDL trong CSDL tùy theo bài toán thực tế.

Hình 3.6: Blocking và Non-Blocking.

3.2. GIẢI PHÁP TỐI ƯU HỆ THỐNG

3.2.1. Sử dụng MongoDB để tối ưu hoá truy vấn Database

MongoDB là một cơ sở dữ liệu mã nguồn mở thuộc họ nhà NoSQL. Với NoSQL chúng ta có thể mở rộng dữ liệu mà không lo tới những việc như tạo khóa ngoại, khóa chính, kiểm tra ràng buộc,...Vì NoSQL không hạn chế việc mở rộng dữ liệu nên tồn tại nhiều nhược điểm như: sự phụ thuộc của từng bản ghi, tính nhất quán, toàn vẹn dữ liệu,… Nhưng chúng ta có thể chấp nhận những nhược điểm đó để khiến ứng dụng cải thiện hiệu suất cao hơn khi giải quyết những bài toán lớn về hệ thống thông tin, phân tán hay lưu trữ dữ liệu.

MongoDB hoạt động trên mọi hệ điều hành phổ biến hiện nay như: Windows, Linux và hỗ trợ đầy đủ các driver cho các ngôn ngữ lập trình để giao tiếp với chúng một cách dễ dàng nhất. Hiểu một cách nôm na thì MongoDB là một mã nguồn mở và là một tập tài liệu dùng cơ chế NoSQL để truy vấn, nó được viết bởi ngôn ngữ C++. Chính vì được viết bởi C++ nên nó có khả năng tính toán với tốc độ cao chứ không giống như các hệ quản trị

CSDL hiện nay. Như vậy, MongoDB có hiệu suất cao, tương tác nhanh và khả năng mở rộng tốt.

Bên cạnh đó, những phân tích có được từ việc so sánh hiệu suất giữa hệ quản trị cơ sở dữ liệu SQL Server 2008 và mongoDB đã cho thấy hiệu suất của mongoDB vượt trội hơn so với SQL Server 2008. Chính vì vậy, MongoDB là một trong những lựa chọn phù hợp để cải thiện hiệu năng của hệ thống.

3.2.2. Sử dụng công nghệ Node.js

- Sử dụng Node.js thay cho PHP

PHP không quá nặng nề và có những dự án và các tùy chọn làm cho nó nhanh hơn. Ngay cả các nhà phát triển PHP đòi hỏi khắt khe nhất cũng hiếm khi lo lắng về tốc độ, nhưng hiệu suất của Node.js nói chung là tốt hơn. Tất nhiên, hiệu suất phần lớn là kết quả của kinh nghiệm và sự chăm sóc được thực hiện bởi đội ngũ phát triển, nhưng Node.js có khá nhiều ưu điểm.

- Ít dependencies hơn

Tất cả các request tới một ứng dụng PHP phải được định tuyến thông qua một máy chủ web rồi trình thông dịch PHP mới bắt đầu chạy đoạn code đó. Node.js không cần quá nhiều các dependencies, trong khi gần như chắc chắn sẽ sử dụng một server framework như Express, nó khá nhẹ và là một phần trong ứng dụng.

- Trình thông dịch nhỏ hơn và nhanh hơn

Node.js nhỏ hơn và nhanh hơn so với trình thông dịch PHP. Nó ít bị cản trở bởi di sản ngôn ngữ hỗ trợ và Google đã đầu tư rất lớn để nâng cao hiệu suất của engine V8.

- Các ứng dụng là Permanently On

PHP tuân theo mô hình client-server điển hình. Mọi page request khởi tạo ứng dụng nạp các thông số cấu hình, kết nối với một cơ sở dữ liệu, lấy

thông tin và xuất ra dạng HTML. Một ứng dụng Node.js chạy vĩnh viễn và nó chỉ cần khởi tạo một lần duy nhất.

Khởi tao ứng dụng sẽ tiến hành kết nối đến database và lắng nghe các yêu cầu từ cổng 3008. Các API được tạo ra để lắng nghe các yêu cầu được gửi tới.

- Một Event-driven, Non-Blocking I/O

PHP và các ngôn ngữ phía máy chủ khác sử dụng một mô hình thực thi blocking rõ ràng. Khi phát ra một lệnh như lấy thông tin từ một cơ sở dữ liệu, lệnh đó sẽ thực hiện hoàn thành trước, rồi tiến hành các câu lệnh tiếp theo. Còn Node.js sẽ không chờ đợi. Thay vào đó, cung cấp một callback function sẽ được thực thi một khi hành động đó hoàn thành, ví dụ:

Trong ví dụ này, cửa sổ console sẽ xuất ra dòng chữ 'finished' trước 'N records returned' bởi vì function process được gọi khi tất cả dữ liệu đã được

lấy ra. Nói cách khác, trình thông dịch được tự do làm việc khác trong khi những tiến trình khác đang bận rộn.

- Áp dụng vào chương trình

Đoạn lệnh trên dùng để lấy danh sách sinh viên, danh sách lớp học phần và danh sách điểm. Giả sử mỗi hàm xử lý hết 1 giây. Với 3 dòng lệnh gọi hàm trên sử dụng Non-blocking để xử lý thì 3 dòng lệnh trên sẽ đồng thời được xử lý cùng lúc, thời gian xử lý sẽ mất 1 giây. Còn khi không sử dụng Non-blocking các dòng lệnh gọi hàm sẽ lần lượt được xử lý. Dòng 1 (line 1) xử lý xong dòng 2 (line 2) mới bắt đầu chạy và dòng 2 xử lý xong thì dòng 3 (line 3) mới bắt đầu thực thi. Như vậy sẽ mất 3 giây để xử lý xong hết các tiến trình. Như vậy, Node.js là sự lựa chọn thích hợp sử dụng ở phía server để tối ưu việc xử lý các luồng dữ liệu.

KẾT LUẬN CHƯƠNG 3

Như vậy, dựa trên những ưu điểm của Node.js được mô tả ở chương 1 và những đánh giá phân tích hệ thống ở chương 2, chương 3 của luận văn đã phần nào làm rõ hệ thống hiện tại đang sử dụng tại trường Cao đẳng Giao thông vận tải II có những vấn đề hạn chế, đặc biệt là hạn chế về hiệu năng, từ đó tìm ra và lựa chọn giải pháp cai thiện hiệu năng hệ thống thích hợp.

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Trong luận văn này, đã nghiên cứu Node.js và React.js để thấy khả năng và ưu điểm của công nghệ mới. Đây là những ngôn ngữ lập trình mới, nó không đồng nhất với ngôn ngữ cũ của hệ thống, để áp dụng vào hệ thống cũ và làm tối ưu hệ thống cũ rất phức tạp và tốn nhiều thời gian. Chính vì thế giải pháp để tối ưu hệ thống quản lý điểm tại trường Cao đẳng Giao thông vận tải II, là xây dựng một hệ thống sử dụng Node.js và React.js rồi chuyển cơ sở dữ liệu từ SQL server sang cơ sở dữ liệu mongoDB.

Các công việc đã thực hiện trong luận văn được tóm tắt như sau: 1.Đã trình bày tổng quan về Node.js, React.js, Flux và MongoDB. 2.Đã trình bày về hiện trạng công tác quản lý điểm tại trường Cao đẳng Giao thông vận tải II; Tổng quan chức năng của hệ thống, đưa ra sơ đồ tổng thể của hệ thống, mô hình hoạt động; Trên cơ sở những phân tích, chúng tôi sử dụng các công cụ hỗ trợ và môi trường phát triển để tiến hành xây dựng và thiết kế chương trình.

3.Trên cơ sở phân tích những nguyên nhân làm chậm hệ thống đang sử dụng tại trường Cao đẳng Giao thông vận tải II, luận văn đã tìm ra và lựa chọn giải pháp cải thiện hiệu năng hệ thống thích hợp.

Trên đây là những kết quả mà luận văn đã đạt được trong thời gian nghiên cứu, thực hiện. Nếu có điều kiện, đề tài có thể được mở rộng nghiên cứu xây dựng cơ sở khoa học trong vấn đề cải thiện hiệu năng và xử lý dữ liệu của các hệ thống cũ.

TÀI LIỆU THAM KHẢO Tiếng Việt

[1] PGS.TSKH. Trần Quốc Chiến (2002), Giáo trình Cơ sở dữ liệu, Đại học Đà Nẵng.

Tiếng Anh

[2] Kristina Chodorow, Michael Dirolf (2010), MongoDB: The Definitive

Guide, O’reilly.

[3] Mike Cantelon, Marc Harter, T.J. Holowaychuk, Nathan Rajlich (2014), Node.js in Action.

[4] Steve Francia (2012), MongoDB and PHP, United States of America.

Website

[5] Bui Minh Hieu (2015), Hướng dẫn Flux qua ví dụ, https://viblo.asia/ hieubm/posts/57rVRq14R4bP.

[6] T.Anh (2015), So sánh hiệu suất hoạt động của MongoDB và SQL

Server 2008,http://quantrimang.com/so-sanh-hieu-suat-hoat-dong-cua-

mongodb-va-sql-server-2008-84584.

[7] Tran Thanh (2005), Tìm hiểu về Node Js cơ bản, https://viblo.asia/thanhsm/posts/ojaqG0dGEKwZ. [8] Nguyễn Nhân (2015), React.js là gì?,

https://www.businesscard.vn/blog/react-js-la-gi/. [9] Tran Duc Thang (2015), Flux - Under the hood,

https://viblo.asia/thangtd90/posts/NznmMd34Rr69. [10] Sơ lược về React.js,

http://blog.ows.vn/so-luoc-ve-reactjs/

[11] Nguyen Thanh Tung (2015), Xây dựng ứng dụng đơn giản với Flux, https://viblo.asia/tungshooter/posts/jdWrvwjzGw38.

[12] http://nodejs.vn/. [13] http://vietjack.com/nodejs/nodejs_la_gi.jsp [14] http://freetuts.net/tong-quan-ve-mongodb-203.html. [15] http://kipalog.com/posts/Gioi-thieu-MongoDB. [16] http://expressmagazine.net/development/2330/dinh-nghia-mongodb- nosql-la-gi. [17] http://devpro.edu.vn/tim-hieu-ve-blocking-va-non-blocking/. [18] http://blog.ows.vn/so-luoc-ve-reactjs/. [19] https://nodejs.org/. [20] http://nodejs.org/documentation/. [21] https://facebook.github.io/react/index.html. [22] http://blog.mimacom.com/introduction-to-react-and-flux/. [23] http://facebook.github.io/flux/docs/overview.html. [24] http://www.mongodb.org. [25] http:// log.andrewray.me/reactjs-for-stupid-people/. [26] https://bigsonata.wordpress.com/2014/06/05/mongodb/.

Một phần của tài liệu 28006_1712202001856244NOIDUNGLUANVANLETHANHTUNG (Trang 57)

Tải bản đầy đủ (PDF)

(68 trang)