Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 109 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
109
Dung lượng
2,32 MB
Nội dung
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM KHỐ LUẬN TỐT NGHIỆP TÌM HIỂU NOSQL VÀ ỨNG DỤNG Giảng viên hướng dẫn : Ths PHẠM THI VƯƠNG Sinh viên thực : DƯƠNG THÂN DÂN - 08520057 BÙI NGỌC HUY Lớp : CNPM03 Khoá : 2008 - 2012 TP Hồ Chí Minh, tháng 12 năm 2012 - 08520544 LỜI MỞ ĐẦU Ngày với kỹ nguyên công nghệ bùng nổ, thành công Internet khiến cho số lượng người dùng truy cập vào hệ thống ngày tăng Điển Facebook tháng phục vụ 1000 tỉ truy cập 800 triệu lượt khách ghé thăm ta hình dung bùng nổ thông tin Để giải vấn đề bùng nổ mở rộng hệ thống máy chủ siêu lớn, phân thành nhiều cụm đặt khắp nơi giới Nhưng với tốc độ phát triển theo cấp số việc tăng số lượng máy chủ chưa đủ Ta cần xem xét nâng cấp giải pháp lưu trữ cho tương lai Hệ thống máy chủ sở liệu đòi hỏi phải mạnh mẽ không máy chủ bị tải Với hệ thống với số lượng lên đến hàng triệu hàng tỉ việc hiệu tốt việc bắt buộc.Các hệ RDBMS vấn đề hiệu thường không tốt cho trường hợp Ngôn ngữ SQL ngôn ngữ thông dịch với ràng buộc bảng khiến cho hiệu thực hệ thống sở liệu thực thi ì ạch với hệ thống lớn kể Chưa kể với hệ thống lớn vấn đề phân tán liệu, tính tồn vẹn liệu việc quan trọng NoSQL đáp ứng tất yêu cầu này.Với tốc độ nhanh khơng phải qua câu truy vấn SQL, có tính sẵn sàng, phân tán cao độ ổn định tuyệt vời, NoSQL thích hợp cho hệ thống có số lượng lượt truy vấn lớn Ở khố luận này, nghiên cứu loại NoSQL phổ biến – RavenDB RavenDB sở liệu mã nguồn mở có hỗ trợ transactional (giao dịch) viết cho tảng NET RavenDB đưa mơ hình liệu linh hoạt (flexible data model) nhằm đáp ứng yêu cầu hệ thống giới thực (real-world systems) RavenDB cho phép xây dựng ứng dụng có hiệu suất cao(high-performance), độ trễ thấp(low-latency) cách nhanh chóng hiệu RavenDB xứng đáng sở liệu đáng tin cậy LỜI CẢM ƠN Chúng em xin gửi lời cảm ơn sâu sắc đến thầy Phạm Thi Vương, giúp đỡ, tạo điều kiện cho nhóm hồn thành tốt khóa luận tốt nghiệp Thầy tận tình hướng dẫn đưa nhận xét vô quý giá để đề tài ngày hồn thiện Những góp ý thầy giúp cho chúng em tiếp cận, hiểu rõ giải vấn đề dễ dàng Đồng thời, chúng em xin bày tỏ lòng biết ơn đến quý thầy, cô Trường Đại Học Công Nghệ Thông Tin – Đại Học Quốc Gia Thành Phố Hồ Chí Minh, đặc biệt thầy, cô khoa Công nghệ Phần Mềm tận tình truyền đạt kiến thức, kinh nghiệm cho chúng em từ ngày đầu học tập trường Sự nhiệt tình thầy, giúp cho chúng em có kiến thức tảng vững kinh nghiệm thực tiễn quý báu để chúng em hồn thành tốt nhiệm vụ học tập, làm việc nghiên cứu Bên cạnh đó, chúng em gửi lời cảm ơn đến gia đình, anh, chị, bạn bè động viên, giúp đỡ chúng em nhiều trình học tập sống Thành phố Hồ Chí Minh, ngày 22 tháng 12 năm 2012 Nhóm sinh viên thực Dương Thân Dân – Bùi Ngọc Huy NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN MỤC LỤC DANH MỤC CÁC ……………………………………………… BẢNG,SƠ DANH MỤC HÌNH…………………………………………………………… CÁC CHƯƠNG - Giới thiệu đề tài 1.1 Vấn đề tìm hiểu 1.2 Mục tiêu đề tài .6 1.3 Nội dung báo cáo CHƯƠNG - Tổng quan sở liệu NoSQL .8 2.1 Tại chọn NoSQL? 2.2 NoSQL ? 2.3 Ưu nhược điểm sở liệu NoSQL: 2.3.1 Ưu điểm: 2.3.2 Nhược điểm: 10 2.4 Kiến trúc 12 2.5 Một số thuật ngữ liên quan 13 2.6 So sánh NoSQL với loại sở liệu khác 15 2.6.1 So sánh NoSQL với XML .15 2.6.2 So sánh NoSQL với RDBMS 16 2.7 ĐỒ Cách triển khai ứng dụng NoSQL 19 2.7.1 Xác định NoSQL có phù hợp 19 2.7.2 Thiết kế cấu trúc liệu dạng document .20 CHƯƠNG – Phân loại CƠ SỞ DỮ LIỆU NOSQL 23 3.1 Key-Value Store 23 3.2 Column Families / Wide Column Store .24 3.3 Document database 26 3.4 Graph Database 27 3.5 Làm để lựa chọn giải pháp sở liệu tốt 29 3.6 Tìm hiểu số loại NOSQL phổ biến .31 3.6.1 Hadoop 31 3.6.2 Cassandra 31 3.6.3 MongoDB .33 3.6.4 CouchDB 34 CHƯƠNG - TÌM HIỂU VỀ RAVENDB .36 4.1 Tại chọn RavenDB 36 4.2 Giới thiệu RavenDB 37 4.3 Lý thuyết RavenDB 38 4.3.1 RavenDB server 38 4.3.2 Documents, Collections Document xác định nhất: 39 4.3.3 The Management Studio .39 4.3.4 Tạo khóa cho document 41 4.3.5 Thiết kế cấu trúc document 41 4.4 NET client API 43 4.4.1 Giới thiệu NET client API 43 4.4.2 Nguyên tắc thiết kế NET client API .43 4.4.3 Kết nối tới RavenDB data store .44 4.4.4 Những thao tác vơi sở liệu .45 4.4.5 Truy vấn liệu 48 4.4.6 Quản lý mối quan hệ document .58 4.5 Tổng quan HTTP API 65 4.6 Mở rộng hệ thống theo chiều ngang( scaling out scaling horizontally) 65 4.6.1 Replication 65 4.6.2 Sharding 66 4.6.3 Kết hợp Replication Sharding 70 4.7 So sánh hiệu suất RavenDB với MSSQL Express 2012 71 4.8 So sánh RavenDB với CouchDB MongDB .73 CHƯƠNG 5-XÂY DỰNG ỨNG DỤNG SỬ DỤNG RAVENDB 75 5.1 Giới thiệu ứng dụng 75 5.2 Lý lựa chọn ứng dụng 75 5.3 Phân rã chức website 75 5.4 Ý tưởng thiết kế 77 5.4.1 Thiết kế mô hình tầng (3 Tier): Clients – Web server – Database server 77 5.4.2 5.5 Phân tích, thiết kế hệ thống 79 5.5.1 Use case 79 5.5.2 Mô tả Use case 83 5.5.3 Class diagram 89 5.5.4 Sequence diagram 90 5.6 Kiến trúc Website 78 Thiết kế giao diện 97 5.6.1 Danh sách hình 97 5.6.2 Mô tả giao diện người dùng 98 CHƯƠNG – KẾT LUẬN .102 6.1 Kết đạt 102 - Về mặt lý thuyết: 102 - Về mặt thực nghiệm: Xây dựng ứng dụng DaHu Groups (có chức giống Google Groups) sử dụng sở liệu RavenDB Web Ứng dụng không quy mô áp dụng kĩ thuật nâng cao RavenDB ứng dụng thể tốc độ vượt trội hoạt động với lượng lớn liệu, đáp ứng yêu cầu đề .102 6.2 Hướng phát triển 102 PHỤ LỤC 103 7.1 Tính đầy đủ RavenDB 103 7.2 Giới thiệu mơ hình ASP.NET MVC4 106 TÀI LIỆU THAM KHẢO Trang DANH MỤC CÁC BẢNG, SƠ ĐỒ Bảng 1.1: Hiệu suất hoạt động MySQL Cassandra Bảng 2.1: Bảng tương quan RDBMS NoSQL Bảng 3.1: Các triển khai document database 35 Bảng 3.2: Các triển khai graph database .38 Bảng 5.1: Mô tả Usecase đăng nhập 110 Bảng 5.2: Mô tả Usecase đăng ký 111 Bảng 5.3: Mô tả Usecase xem Group public 111 Bảng 5.4: Mơ tả Usecase tìm kiếm 112 Bảng 5.5: Mô tả Usecase xem topic 112 Bảng 5.6: Mô tả Usecase đăng bình luận 113 Bảng 5.7: Mô tả Usecase đăng topic .113 Bảng 5.8: Mô tả Usecase xoá Topic 114 Bảng 5.9: Mô tả Usecase tạo group 115 Bảng 5.10: Danh sách hình 124 Bảng 7.1: Lịch sử phát triển ASP.NET MVC 130 Sơ đồ 5.1: Sơ đồ phân rã chức Owner 103 Sơ đồ 5.2: Sơ đồ phân rã chức Manager 103 Sơ đồ 5.3: Sơ đồ phân rã chức Member 103 Sơ đồ 5.4: Sơ đồ thiết kế mơ hình tầng: Clients – Web server – Database server 104 Sơ đồ 5.5: Sơ đồ kiến trúc website 105 Sơ đồ 5.6: Use case trường hợp chưa đăng nhập 106 Sơ đồ 5.7: Use case Member 107 Sơ đồ 5.8: Use case Manager 108 Sơ đồ 5.9: Use case Owner .109 Sơ đồ 5.10: Sơ đồ lớp cung cấp chức cho website 116 Sơ đồ 5.11: Sequence diagram chức Login 117 Sơ đồ 5.12: Sequence diagram thực chức Register 118 Sơ đồ 5.13: Sequence diagram chức Create Group 119 Sơ đồ 5.14: Sequence diagram trang Home 120 GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 86 Sơ đồ 5.14: Sequence diagram trang Home GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 87 Sơ đồ 5.15: Sequence diagram chức Join Group Sơ đồ 5.16: Sequence diagram chức Accept Member GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 88 5.5.4.3 Quản lý Topic Sơ đồ 5.17: Sequence diagram chức Create Topic GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 89 Sơ đồ 5.18: Sequence diagram chức đăng bình luận GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 90 5.5.4.4 Tìm kiếm Sơ đồ 5.19: Sequence diagram chức tìm kiếm 5.6 Thiết kế giao diện 5.6.1 Danh sách hình STT Tên hình Chức Màn hình giao diện Cung cấp cho người dùng nhìn tổng quan chương trình Tại hình này, ta thực thao tác thường dùng như: Login, Register, Create Group… Màn hình tạo viết Cho phép người dùng tạo viết Màn hình danh sách viết Hiển thị danh sách viết Có thể quản lý danh sách viết vai trị Owner hay Manager Màn hình viết tất bình luận Hiển thị viết cụ thể tất bình luận Cho phép người dùng đăng bình luận Màn hình cài đặt group GVHD: Ths Phạm Thi Vương Cung cấp chức cài đặt SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 91 group Bảng 5.10: Danh sách hình 5.6.2 Mơ tả giao diện người dùng 5.6.2.1 Màn hình giao diện Hình 5.1: Màn hình chương trình 5.6.2.2 Màn hình tạo viết Hình 5.2: Màn hình tạo viết GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 92 5.6.2.3 Màn hình danh sách viết Hình 5.3: Màn hình danh sách viết 5.6.2.4 Màn hình viết tất bình luận Hình 5.4: Màn hình viết tất bình luận GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 93 5.6.2.5 Màn hình cài đặt Group Hình 5.5: Màn hình cài đặt Group GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 94 CHƯƠNG – KẾT LUẬN 6.1 Kết đạt - Về mặt lý thuyết: Tổng hợp phân tích chi tiết sở liệu NoSQL với ứng dụng thực tiễn Qua tài liệu này, người đọc có nhìn bao qt NoSQL ứng dụng vào hệ thống cần lưu trữ nhiều liệu Trình bày phân tích loại khác NoSQL bao gồm: keyvalue store, column families, document database graph database Tìm hiểu tính năng, đặc điểm lợi ích số loại document database phổ biến là: MongoDB, CouchDB, RavenDB Đào sâu kiến thức RavenDB triển khai ứng dụng sử dụng RavenDB - Về mặt thực nghiệm: Xây dựng ứng dụng DaHu Groups (có chức giống Google Groups) sử dụng sở liệu RavenDB Web Ứng dụng không quy mô áp dụng kĩ thuật nâng cao RavenDB ứng dụng thể tốc độ vượt trội hoạt động với lượng lớn liệu, đáp ứng yêu cầu đề 6.2 Hướng phát triển - Tìm hiểu thêm vấn đề phân tán liệu nhiều máy chủ - Tìm hiểu thêm vấn đề quản lý transaction Đặc biệt xử lý tình sở liệu phân tán nhiều máy chủ - Một số vấn đề bảo mật, config server, backup restore liệu sở liệu NoSQL GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 95 PHỤ LỤC 7.1 Tính đầy đủ RavenDB - Safe by default: RavenDB đảm bảo an tồn cho việc truy cập liệu Khơng tiêu tốn tài nguyên mạng hệ thống Xây dựng ứng dụng với RavenDB, tốc độ chạy chương trình nhanh đáng tin cậy - Transactional: Hỗ trợ đầy đủ ACID transactions (Atomicity, Consistency, Isolation, Durability) node khác hệ thống - Scalable: Hỗ trợ Sharding, Replication, Multi-Tenancy Scaling out (mở rộng theo chiều ngang) tương đối dễ dàng Build-in Sharding: phân tán liệu nhiều server khác để quản lý việc load liệu tốt Buil-in Replication: nhân liệu nhiều server để tăng tính sẵn sàng lấy liệu nhanh chóng Mix replication and sharding: Có thể sử dụng kết hợp tính Replication Sharding Hình 7.2: Scalable - Schema free: Bỏ qua khái niệm tables, rows,mappings, complex datalayers RavenDB sở liệu hướng tài liệu, lưu trữ đối tượng liệu - Get running in minutes: Chỉ cần phút sử dụng RavenDB RavenDB không yêu cầu cài đặt phức tạp, tải chạy Rất đơn giản - It Just Work: Thiết kế để làm việc - Fast Queries: RavenDB thực truy vấn với tốc độ cực nhanh(tốc độ ánh sang) Tất thao tác indexing thực (thực ngầm), không ảnh hưởng đến truy vấn, thao tác đọc viết từ database - Best practices built-in GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 96 Unit Of Work: thay đổi liệu cách thay đổi đối tượng nhận từ Client API Domain Driven Design: mơ hình liệu sử dụng khái niệm DDD để thao tác liệu tốt In-memory DB for testing Automatic-batching: tự tối ưu cách gửi tập lệnh thay lệnh đơn - High performance: RavenDB lưu trữ nhanh tất mơ hình liệu Bỏ qua giai đoạn mapping phức tạp hay đa tầng DAL, đơn giản lưu trữ thực thể - Caching built-in: Nhiều tầng caches thực tự động server client Caching cấu hình sẵn có chế độ nâng cao Aggressive Caching - APIs: Có thể truy cập RavenDB nhiều ngôn ngữ hay công nghệ khác Giao tiếp Client/Server thông qua REST (HTTP API), NET client API, Silverlight and Javascript - Built-in managemet studio: Dễ dàng quản lý liệu với giao diện đồ họa trực quan - Carefully designed: RavenDB thiết kế cẩn thận, tỉ mĩ đảm bảo thứ hoạt động tốt - Map/Reduce: Sử dụng indexes, dễ dàng viết hàm Map/Reduce sử dụng cú pháp Linq Hỗ trợ khái niệm multi-maps boosting indexes để viết Map/Reduce đơn giản thể sức mạnh - Feature rich and extensible: Hỗ trợ nhiều tính khả mở rộng - Embededable: RavenDB nhúng vào ứng dụng NET, hồn toàn phù hợp với ứng dụng desktop - Bundles: Nhiều gói liệu hỗ trợ kèm với với Server-side plugins Chỉ cần copy file DLL vào thư mục Server - Index replication to SQL:sử dụng ưu điểm cơng cụ reporting có sẵn từ RDBMS RavenDB cho phép nhân index sang SQL table dễ dàng GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 97 Hình 7.3: Index replication to SQL - Full-text Search built-in: Không cần sử dụng công cụ hỗ trợ tìm kiếm nâng cao bên ngồi, RavenDB hỗ trợ tìm kiếm full-text server client API - Advances search techniques - Geo-spatial search support: Dễ dàng sử dụng API Hình 7.4: Geo-spatial search support - Easy backup: Việc lưu trữ bất đồng mà không làm ảnh hưởng đến thao tác DB thông thường Backup Restore hỗ trợ DB - Multi-tenancy: Lưu trữ nhiều database RavenDB Server Hình 7.5: Multi-tenancy - Attachments: RavenDB hỗ trợ lưu trữ luồng liệu mà khơng thực liệu hình ảnh hay liệu nhị phân mà không muốn lưu trữ document, lưu trữ GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 98 - Online index Rebuild: Indexes update ngầm bên mà không cần tác động người dùng hay thao tác ACID sở liệu - Fully async (C# ready): RavenDB hỗ trợ API bất đồng giới thiệu C#5 - Community - Cloud hosting available: Chạy RavenDB đám mây với RavenHQ, CloudBird, AppHorbor Windows Azure Hình 7.6: Cloud hosting available 7.2 Giới thiệu mơ hình ASP.NET MVC4 - Mẫu kiến trúc Model – View – Controller sử dụng nhằm chia ứng dụng thành ba thành phần chính: model, view controller Nền tảng ASP.NET MVC giúp cho tạo ứng dụng web áp dụng mơ hình MVC thay tạo ứng dụng theo mẫu ASP.NET Web Forms Nền tảng ASP.NET MVC có đặc điểm bật nhẹ (lightweight), dễ kiểm thử phần giao diện (so với ứng dụng Web Forms), tích hợp tính có sẵn ASP.NET Nền tảng ASP.NET MVC định nghĩa namespace System.Web.Mvc phần name space System.Web Hình 7.1: Mẫu kiến trúc Model – View – Controller GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 99 - Vài nét mô hình MVC: Models: Các đối tượng Models phần ứng dụng, đối tượng thiết lập logic phần liệu ứng dụng Thông thường, đối tượng model lấy lưu trạng thái model CSDL Ví dụ như, đối tượng Product lấy liệu từ CSDL, thao tác liệu cập nhật liệu trở lại vào bảng Products SQL Server Trong ứng dụng nhỏ, model thường là khái niệm nhằm phân biệt cài đặt thực thụ, ví dụ, ứng dụng đọc liệu từ CSDL gởi chúng đến view, ứng dụng khơng cần phải có tầng model lớp liên quan Trong trường hợp này, liệu lấy đối tượng model (hơn tầng model) Views: Views thành phần dùng để hiển thị giao diện người dùng (UI) Thông thường, view tạo dựa vào thông tin liệu model Ví dụ như, view dùng để cập nhật bảng Products hiển thị hộp văn bản, drop-down list, check box dựa trạng thái đối tượng Product Controllers: Controller thành phần dùng để quản lý tương tác người dùng, làm việc với model chọn view để hiển thị giao diện người dùng Trong ứng dụng MVC, view dùng để hiển thị thông tin, controller chịu trách nhiệm quản lý đáp trả nội dung người dùng nhập tương tác với người dùng Ví dụ, controller quản lý liệu người dùng gởi lên (query-string values) gởi giá trị đến model, model lấy liệu từ CSDL nhờ vào giá trị - Ngày 15-08-2012, Microsoft cho phiên ASP.NET MVC với nhiều tính mới, giao diện cải thiện nhiều so với phiên trước GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy Trang 100 TÀI LIỆU THAM KHẢO Tiếng Việt: Ebook NoSQL – Nhữ Đình Thuận Nhúng CSDL RavenDB vào ứng dụng ASP.NET MVC – Asp.net.vn Một số viết như: Một số thông tin NoSQL thị trường database, NoSQL, Nhất quán cuối SQL Việt Blog (http://www.sqlviet.com/blog/) Tiếng Anh: Ayende Rahien (Oren Eini), RavenDB Documentation - http://ravendb.net/docs (trang tham khảo chính) Ayende Rahien (Oren Eini), RavenDB Mythology Documentation Release 1.0, November 29, 2010 Eelco Plugge, Peter Membrey and Tim Hawkins, The Definitive Guide to MongoDB The NoSQL Database for Cloud and Desktop Computing Adam Freeman and Joseph C.Rattz, Jr Pro LINQ Language Intergrated Query In C# 2010 Apress, 2010 NoSQL resources - http://nosql-database.org/ NoSQL in the Enterprise - http://www.infoq.com/articles/nosql-in-theenterprise NoSQL wiki - http://en.wikipedia.org/wiki/NoSQL Blog hay RavenDB: Ayende's Blog (http://ayende.com/blog), Phillip Haydon's Blog (http://www.philliphaydon.com/), Gregor Suttie's Blog (http://gregorsuttie.com/) So sánh RavenDB với CouchDB MongDB (http://weblogs.asp.net/britchie/archive/2010/08/17/document-databasescompared-mongodb-couchdb-and-ravendb.aspx) GVHD: Ths Phạm Thi Vương SVTH: Dương Thân Dân – Bùi Ngọc Huy ... em tìm hiểu kĩ kĩ thuật, cách áp dụng sở liệu thuộc loại document database RavenDB Chương – Xây dụng ứng dụng sử dụng RavenDB: Sử dụng kết tìm hiểu chương để áp dụng vào xây dụng ứng dụng sử dụng. .. tơi tìm hiểu xem NoSQL giải vấn đề áp dụng kiến thức tìm hiểu vào việc xây dựng ứng dụng sử dụng sở liệu dạng NoSQL 1.2 Mục tiêu đề tài Với vấn đề nêu trên, đề này cần đạt mục tiêu sau: - Tìm hiểu. .. phải ứng dụng chấp nhận Có nghĩa ứng dụng khơng yêu cầu ràng buộc liệu, không yêu cầu liệu phải cập nhập xác tức Một số ứng dụng phù hợp trang mạng xã hội, ứng dụng ghi log tự động… Các ứng dụng