Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 69 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
69
Dung lượng
8,4 MB
Nội dung
LỜI CAM ĐOAN Tôi xin cam đoan: Những nội dung luận văn thực hướng dẫn trực tiếp Thầy PGS.TS Nguyễn Đình Thuân Mọi tham khảo luận văn trích dẫn rõ ràng tên tác giả, tên cơng trình, thời gian cơng bố Mọi chép khơng hợp lệ, vi phạm quy chế đào tạo xin chịu hồn tồn trách nhiệm Tp Hồ Chí Minh, ngày tháng năm 2017 Học viên Văn Thị Phương Lâm LỜI CẢM ƠN Để hồn thành khóa luận này, em xin tỏ lòng biết ơn sâu sắc đến thầy Thầy PGS TS Nguyễn Đình Thn – Trường Đại học Cơng nghệ Thông tin - ĐH Quốc gia TP HCM khuyến khích, động viên, hướng dẫn tận tình cho em suốt trình thực luận văn Em chân thành cám ơn đến quý Thầy Cô Trường Đại học Công nghệ Thông tin – ĐH Quốc gia TP HCM đã tận tình truyền đạt kiến thức tạo điều kiện tốt để em hoàn thành luận văn Cảm ơn gia đình, bạn bè, người thân ln bên cạnh động viên, khuyến khích em hồn thành luận văn Văn Thị Phương Lâm MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG MỞ ĐẦU Chương Lý Thuyết nghiên cứu liên quan 1.1 Tổng quan tình hình nghiên cứu 1.1.1 Tình hình nghiên cứu chuyển đổi mơ hình liệu quan hệ sang NoSQL 1.1.2 Tình hình nghiên cứu chuyển đổi mơ hình đối tượng sang NoSQL 1.2 Mục tiêu, phương pháp nghiên cứu .12 1.3 Lý thuyết mơ hình liệu hướng đối tượng 13 1.3.1 Cái khái niệm 13 1.3.1.1 Đối tượng lớp .13 1.3.1.2 Cơ sơ liệu hướng đối tượng .13 1.3.2 Mơ hình liệu hướng đối tượng 14 1.3.2.1 Tính bao đóng 14 1.3.2.2 Kế thừa 14 1.3.2.3 Tính đa hình 14 1.3.2.4 Class Diagram 15 1.3.3 Ưu điểm nhược điểm OODBMS 15 1.4 Lý thuyết mơ hình liệu quan hệ đối tượng 15 1.4.1 Giới thiệu .15 1.4.2 Tính mơ hình ORDBMS: .16 1.4.3 Kiểu liệu quan hệ - đối tượng ORDBMS 16 1.4.3.1 Các kiểu liệu phức hợp định nghĩa sẵn 16 1.4.3.2 Kiểu kế thừa 17 1.4.3.3 Kiểu đối tượng (Object Type) 17 1.4.3.4 Tạo bảng đối tượng 17 1.4.3.5 Bảng lồng (Nested table) 18 1.4.3.6 Kiểu mảng .18 1.4.3.7 Kiểu tham chiếu 18 1.4.4 Một số hệ quản trị quan hệ đối tượng ORDBMS thường dùng 18 1.4.5 Ưu điểm mơ hình liệu quan hệ hướng đối tượng (ORDBMS) 18 1.4.6 Nhược điểm mơ hình ORDBMS 18 1.5 Lý thuyết sở liệu NoSQL 19 1.5.1 Giới thiệu 19 1.5.1.1 Sơ lược NoSQL 19 1.5.1.2 Phân loại NoSQL 19 1.5.2 Cơ sở liệu MongoDB .19 1.5.3 Mơ hình liệu MongoDB 21 1.5.3.1 Phép tham chiếu Reference .21 1.5.3.2 Phép nhúng Embedded documents 21 1.6 Các thao tác Mongodb 22 1.6.1 Thao tác với Database (Cơ sở liệu) 22 1.6.1.1 Tạo Database (Cơ sở liệu) 22 1.6.1.2 Lệnh xóa liệu 22 1.6.2 Thao tác với Collection 22 1.6.2.1 Lệnh tạo Collection 22 1.6.2.2 Lệnh xóa Collection 22 1.6.3 Thao tác với Document 22 1.6.3.1 Chèn Document .22 1.6.3.2 Truy vấn Document 22 1.6.3.3 Cập nhật Document 22 1.6.3.4 Xóa Document .22 Chương CHUYỂN ĐỔI MƠ HÌNH CƠ SỞ DỮ LIỆU QUAN HỆ VÀ ĐỐI TƯỢNG SANG NoSQL 23 2.1 Lập kế hoạch 23 2.2 Mục tiêu chuyển đổi .23 2.3 Thiết kế lược đồ 23 2.4 Chọn lựa mơ hình liệu MongoDB 24 2.5 Phương pháp chuyển đổi mơ hình .24 2.5.1 Phương pháp chuyển đổi mơ hình liệu quan hệ sang NoSQL 24 2.5.1.1 Kỹ thuật chuyển đổi 25 2.5.1.2 Phân tích liệu mối quan hệ lược đồ .25 2.5.1.3 Thiết kế lược đồ MongoDB 27 2.5.1.4 Quá trình chuyển đổi liệu 29 2.5.2 Phương pháp chuyển đổi từ mơ hình đối tượng sang NoSQL 30 2.5.2.1 Kỹ Thuật chuyển đổi .30 2.5.2.2 Phân tích liệu đối tượng lược đồ TPC-H .30 2.5.2.3 Quá trình chuyển đổi mơ hình 30 Chương CÀI ĐẶT VÀ ĐÁNH GIÁ .34 3.1 Bộ liệu .34 3.2 Môi trường thực nghiệm 34 3.3 Công cụ chuyển đổi liệu 34 3.4 Đánh giá .35 3.4.1 Đánh giá mơ hình trước sau chuyển đổi .35 3.4.1.1 Đánh giá kết đạt mơ hình NoSQL 35 3.4.1.2 Đánh giá dung lượng hai liệu 37 3.4.2 Đánh giá hiệu suất thực 39 3.4.3 Đánh giá hai phương pháp thực chuyển đổi .45 Chương KẾT LUẬN VÀ KHUYẾN NGHỊ 47 TÀI LIỆU THAM KHẢO 50 PHỤ LỤC 52 DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT ACID Atomic, Consistent, Independent, and Durable BSON Binary JavaScript Object Notation ETL Extract Transform Load JSON JavaScript Object Notation NoSQL Not Only SQL TPC Transaction Processing Performance Council TPC-H TPC Benchmark™H DBLP Digital Bibliography & Library Project RDBMS Relational Database Management System RDB Relational Database ODBMS Object Database Management System ORDBMS Object Relation Database Management System ORM Object Relation Mapping JPA Java Persistence API API Application Programming Interface DANH MỤC CÁC BẢNG Bảng 1.1 Kiểu liệu phức hợp 16 Bảng 2.1 Ánh xạ sở liệu quan hệ MongoDB 24 Bảng 3.1 Bảng liệu TPCH SQL Server MongoDB 37 Bảng 3.2 Bảng liệu DBLP SQL Server MongoDB 38 Bảng 3.3 Thời gian chạy 100 Records .41 Bảng 3.4 Thời gian chạy 1.000 Records 41 Bảng 3.5 Thời gian chạy 10.000 Records 42 Bảng 3.6 Thời gian chạy 100.000 Records 42 Bảng Đánh giá thời gian INSERT liệu SQL Server MongoDB 43 Bảng 3.8 Đánh giá thời gian SELECT liệu SQL Server MongoDB 43 Bảng Đánh giá thời gian UPDATE liệu SQL Server MongoDB .44 DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ Hình 1.1 Minh họa liệu hướng đối tượng .13 Hình 1.2 Minh họa Class Diagram 15 Hình 1.3 Mơ hình sở liệu hướng đối tượng .16 Hình 1.4 Collection MongoDB 20 Hình 1.5 Document MongoDB 20 Hình 1.6 Ví dụ cấu trúc tham chiếu văn 21 Hình 1.7 Ví dụ Embeded documents 21 Hình 2.1 Minh họa chuyển cấu trúc liệu quan hệ sang MongoDB 24 Hình 2.2 Minh họa liệu bảng chuyển qua MongoDB 25 Hình 2.3 Lược đồ sở liệu quan hệ DBLP .26 Hình 2.4 Lược đồ sở liệu quan hệ TPC-H .27 Hình 2.5 Lược đồ sở liệu DBLP MongoDB 28 Hình 2.6 Lược đồ sở liệu TPC-H MongoDB 28 Hình 2.7 Sơ đồ hệ thống chuyển đổi liệu quan hệ sang NoSQL 29 Hình 2.8 Minh họa chuyển đổi đối tượng sang NoSQL 30 Hình 2.9 Lược đồ mơ hình đối tượng TPC-H .30 Hình 2.10 Minh họa tính kế thừa mơ hình đối tượng TPC-H .31 Hình 2.11 Minh họa tính đa hình mơ hình đối tượng TPC-H 31 Hình 2.12 Minh họa tính đa hình mơ hình đối tượng TPC-H 32 Hình 2.13 Minh họa tính bao đóng mơ hình đối tượng TPC-H .32 Hình 2.14 Sơ đồ hệ thống chuyển đổi đối tượng sang NoSQL 33 Hình 3.1 Giao diện chuyển đổi mơ hình 34 Hình 3.2 Dữ liệu DBLP SQL Server 35 Hình 3.3 Giao diện RoboMongo ban đầu 35 Hình 3.4 Dữ liệu DBLP chuyển qua NoSQL .36 Hình 3.5 Kiểm tra tổng số dòng t Book_DBLP MongoDB(NoSQL) 36 Hình 3.6 Kết đạt NoSQL 37 Hình 3.7 Lược đồ Mơ hình đối tượng MongoSqlTest .40 Hình 3.8 Giao diện so sánh hiệu .40 Hình 3.9 Kết thực với 100 Records 41 Hình 3.10 Thời gian INSERT SQL Server MongoDB 43 Hình 3.11 Thời gian SELECT SQL Server MongoDB 44 Hình 3.12 Thời gian Update SQL Server MongoDB .45 MỞ ĐẦU Cơ sở liệu phần thiếu công ty, tổ chức, doanh nghiệp Khi số lượng khách hàng ngày lớn với giao dịch diễn hàng ngày tăng theo hiệu suất thực hiện, số lượng truy cập liệu, đòi hỏi ngày cao khách hàng toán mà doanh nghiệp cần có giải pháp thực tối ưu nhằm mang lại hiệu kinh doanh Mơ hình sở liệu quan hệ thể ưu điểm trội tính ràng buộc tồn vẹn liệu Tuy nhiên lượng liệu lớn, cập nhật liên tục, tính đa dạng cao, cấu trúc liệu, mối quan hệ liệu phức tạp mơ hình đứng trước khó khăn thách thức hiệu suất thực Mơ hình liệu quan hệ hướng đối tượng cách mạng cải tiến phần mềm với thiết kế dễ dàng, dễ mở rộng dự án khả tái sử dụng Nhưng hạn chế mặt hiệu suất phân chia đối tượng phức tạp xuống bảng liệu quan hệ Chính nhược điểm mơ hình liệu quan hệ mơ hình đối tượng mà NoSQL đời NoSQL có khả lưu trữ liệu lớn, khả phân tán dễ phân vùng liệu, truy vấn liệu nhanh nhờ thực công việc song song, tăng khả chịu lỗi, hiệu suất cao mà đòi hỏi phần cứng tài nguyên hệ thống NoSQL áp dụng nhiều công ty lớn NoSQL đời khơng phải để thay loại bỏ hồn tồn mơ hình trước đây, mà đời để bổ sung khắc phục nhược điểm mà mơ hình trước chưa thể làm NoSQL giải toán liệu lớn, khả lưu trữ liệu khả cải thiện hiệu suất cao mơ hình trước Với sở liệu mã nguồn mở, có khả mở rộng theo chiều ngang, chi phí thấp, tốc độ truy cập nhanh chóng tức thời, NoSQL lựa chọn đến với nhu cầu người dùng Vì tơi chọn thực đề tài “Chuyển đổi mơ hình liệu quan hệ đối tượng sang NoSQL” Mỗi mơ hình có ưu điểm lợi riêng Việc chuyển đổi mơ hình liệu quan hệ đối tượng sang NoSQL thực tùy thuộc vào nhu cầu thực tế Cụ thể trường hợp người dùng có nhu cầu đồng hóa liệu để cải thiện hiệu suất cho hệ thống liệu phát triển lâu năm Hoặc nhu cầu doanh nghiệp việc cần phân tích, thống kê, truy vấn, tìm kiếm liệu lớn phức tạp NoSQL cân nhắc lựa chọn dành cho người dùng khả mở rộng theo chiều ngang, truy vấn nhanh với tính sẵn sàng cao Song song đó, thực tế có số trường hợp, ứng dụng u cầu cao tính tồn vẹn liệu, độ tin cậy, độ an toàn giao dịch tài chính, ngân hàng, chứng khốn, kinh doanh sản xuất lĩnh vực mơ hình liệu quan hệ đối tượng lựa chọn hồn hảo có tính chặt chẽ ràng buộc cao Nội dung đề tài thực hai công việc chính: chuyển đổi mơ hình liệu quan hệ sang NoSQL chuyển đổi mơ hình đối tượng sang NoSQL Tuy nhiên, việc chuyển đổi mơ hình liệu quan hệ sang NoSQL thực trước [1], nên nhắc lại tập trung chủ yếu vào chuyển đổi mơ hình đối tượng sang NoSQL Mục tiêu việc chuyển đổi mơ hình liệu quan hệ đối tượng sang NoSQL nhằm thực kiểm tra, đánh giá đưa kết luận tính khả thi mơ hình trước sau chuyển đổi Từ đó, tùy vào hồn cảnh, thời điểm mà lựa chọn mơ hình phát triển cho phù hợp, nâng cao hiệu suất thực cho hệ thống, đảm bảo tiến trình nhanh hiệu quả, đáp ứng nhu cầu thực tiễn đặt Luận văn sử dụng liệu mẫu TPC-H1 DBLP2 để thực nghiệm với hỗ trợ công nghệ NET C# số driver hỗ trợ tương tác C# NoSQL Luận văn trình bày thành chương: Chương 1: Lý thuyết nghiên cứu liên quan Chương 2: Chuyển đổi mơ hình liệu quan hệ đối tượng sang NoSQL Chương 3: Cài đặt đánh giá Chương 4: Kết luận hướng phát triển http://www.tpc.org/tpch/ http://dblp.uni-trier.de/ Chương Lý thuyết nghiên cứu liên quan Chương Lý Thuyết nghiên cứu liên quan 1.1 Tổng quan tình hình nghiên cứu 1.1.1 Tình hình nghiên cứu chuyển đổi mơ hình liệu quan hệ sang NoSQL Bigdata (dữ liệu lớn) đề tài nhà nghiên cứu liệu tìm hiểu đưa giải pháp tối ưu Chen Zhang thảo luận đưa quan điểm khác ứng dụng Big Data Tác giả đưa hội thách thức, kỹ thuật đại công nghệ áp dụng để giải với vấn đề Big Data [4] Roijackers [12] đề xuất cách tiếp cận lớp trung gian trừu tượng hai sở liệu để giảm khoảng cách SQL NoSQL, mang chúng đến gần Mặc dù người dùng hiểu sử dụng hệ thống truy vấn đơn giản, hiệu suất không cao việc truy vấn liệu lồng phức tạp Lee, Chao-Hsien, Yu-Lin Zheng [7] đề xuất chế tự động chuyển đổi lược đồ từ SQL sang NoSQL thông qua sở liệu MySQL Hbase Dựa kết thử nghiệm, tác giả chứng minh đề xuất cải thiện hiệu suất truy cập khoảng 47% Tác giả Tianyu Jia cộng ông đề xuất cách tiếp cận mơ hình chuyển đổi di chuyển liệu từ sở liệu quan hệ sang MongoDB [6], từ thuật toán đề xuất, chứng chứng minh NoSQL đạt hiệu suất tốt so với sở liệu quan hệ 1.1.2 Tình hình nghiên cứu chuyển đổi mơ hình đối tượng sang NoSQL Bên cạnh cơng trình nghiên cứu chuyển đổi sở liệu sang NoSQL với nhiều phương pháp khác dẫn chứng, nhiều cơng trình khác nghiên cứu thực đánh giá chuyển đổi mơ hình sở liệu đối tượng sang NoSQL (Object-NoSQL) Wolf cộng ông [15] thảo luận phân tích vấn đề mở rộng Hibernate, framework ORM [10] để hỗ trợ cho RIAK, kho lưu trữ liệu khóa/giá trị(key/value) NoSQL Wolf việc tích hợp RIAK PS_SUPPKEY Identifier PS_AVAILQTY integer PS_SUPPLYCOST Decimal PS_COMMENT variable text, size 199 Column Name C_CUSTKEY C_NAME C_ADDRESS C_NATIONKEY C_PHONE C_ACCTBAL C_MKTSEGMENT C_COMMENT CUSTOMER TABLE Datatype Requirements Identifier variable text, size 25 variable text, size 40 Identifier fixed text, size 15 Decimal fixed text, size 10 variable text, size 117 ORDERS TABLE Column Name Datatype Requirements O_ORDERKEY Identifier O_CUSTKEY Identifier O_ORDERSTATUS fixed text, size O_TOTALPRICE Decimal O_ORDERDATE Date O_ORDERPRIORITY fixed text, size 15 O_CLERK fixed text, size 15 O_SHIPPRIORITY Integer O_COMMENT variable text, size 79 PK, FK Comment PK FK Comment PK FK LINEITEM Column Name Datatype Requirements L_ORDERKEY identifier FK L_PARTKEY identifier FK L_SUPPKEY Identifier FK L_LINENUMBER integer L_QUANTITY decimal 53 Comment L_EXTENDEDPRICE decimal L_DISCOUNT decimal L_TAX decimal L_RETURNFLAG fixed text, size L_LINESTATUS fixed text, size L_SHIPDATE date L_COMMITDATE date L_RECEIPTDATE date L_SHIPINSTRUCT fixed text, size 25 L_SHIPMODE fixed text, size 10 L_COMMENT variable text size 44 Primary Key: L_ORDERKEY, L_LINENUMBER NATION TABLE Column Name N_NATIONKEY N_NAME N_REGIONKEY N_COMMENT Datatype Requirements identifier PK fixed text, size 25 identifier FK variable text, size 152 Comment REGION TALBE Column Name R_REGIONKEY R_NAME R_COMMENT Datatype Requirements identifier fixed text, size 25 variable text, size 152 Comment PK ❖ Bộ liệu mẫu DBLP DBLP trang web khoa học máy tính DBLP phát triển từ tập tệp HTML nhỏ trở thành tổ chức lưu trữ trang sở liệu DBLP liệt kê 3,6 triệu báo, báo hội nghị ấn phẩm khác khoa học máy tính Hơn 400 ấn phẩm đề cập đến việc sử dụng liệu cho nhiều mục đích khác Dữ liệu DBLP tải xuống Http://dblp.uni-trier.de/xml/ Dữ liệu chứa tập tin XML lớn ❖ Đặc tả bảng (TABLE) sau: 54 Column name Id BASEOBJECT TABLE Data Type Comment Bigint Primary key (PK) Column name id Isbn Publisher Series Title Conference Volume Year BOOK TABLE Data Type Comment bigint PK, FK Varchar (250) Varchar (250) Varchar (250) Varchar (250) Varchar (250) Varchar (250) Varchar (150) Column name Id Publisher Title JOURNALS TABLE Data Type Comment Bigint PK, FK Varchar (250) Varchar (1250) Column name Id School Title year MSTHESISES TABLE Data Type Comment Bigint PK, FK Varchar (250) Varchar (1250) Varchar (250) Column name Id Title PAPERS TABLE Data Type Bigint Varchar (1250) Comment PK, FK Column name Id name PERSONS TABLE Data type Bigint Varchar (1400) Comment PK, FK Column name id Isbn PHDTHESISES TABLE Data Type Comment Bigint PK, FK Bigint 55 Publisher School Series Title Volume year Column name id Linked From To Link-type Month Pages In-volume In-year Column name Id Title Year url Varchar (1400) Varchar (250) Varchar (250) Varchar (250) Varchar (250) Varchar (250) RAW_LINKS TABLE Data type Comment bigint PK Bigint Bigint Bigint PK Varchar (150) Varchar (150) Varchar (150) Varchar (150) Varchar (150) WWWS TABLE Data Type bigint Varchar (1250) Varchar (150) Varchar (1250) Comment PK, FK Column name Id conference isbn publisher series title volume year PROCEEDINGS TABLE Data type Comment bigint PK, FK varchar(1250) varchar(250) varchar(250) varchar(250) varchar(1250) varchar(250) varchar(150) Column name Id MetricName METRICS TABLE Data type Comment int PK varchar(100) 56 OnQuery OnColumn nvarchar(MAX) nvarhar(100) SIMULATEDMETRICLOOCKUP TABLE Column name Data type Comment MetricId int PK LoockupKey varchar(500) PK LoockupValu bit Delay int Code thực thi chương trình chuyển liệu quan hệ sang NoSQL Bước Xây dựng câu truy vấn SQL để lấy liệu từ bảng (Table) sau: //Tạo mở kết nối đến SQL để chuẩn bị truy vấn liệu SqlCommand cmd = new SqlCommand(sqlText, conn); cmd.CommandType = CommandType.Text; if (conn.State != ConnectionState.Open) { conn.Open(); } //Tạo đối tượng MongoDatabase var mongoDB = GetMongoDB(this.TranslatorSettings.MongoConnecti onString); //Tạo đối tượng xử lý cho Collection MongoDB var collectionOperator = mongoDB.GetCollection(mongoCollection); … try { //Lấy liệu table từ SQL lên var reader = cmd.ExecuteReader(); //Duyệt qua dòng liệu để xây dựng json document while (reader.Read()) { startIdentity = reader[TableMapping.ColumnRowID].DB ToString(); var bsonObj = convertBsonDocumentDelegate(reader, primaryKeyColumn); documents.Add(bsonObj); 57 } if (documents.Count > 0) { //Thêm json document vào Collection MongoDB collectionOperator.InsertBatch(documents); } //Lấy danh sách column cần lấy liệu foreach (var key in schema.Keys) { selectColumnsBuilder.AppendFormat("[{0}],", key); } builder.Append("select top " + pageSize.ToString() + " "); builder.Append(selectColumnsBuilder.ToString()); builder.Append("[" + TableMapping.ColumnRowID + "]"); builder.Append(" from ( select "); builder.Append(selectColumnsBuilder.ToString()); builder.Append("row_number() over(order by [" + primaryName + "]) AS " + TableMapping.ColumnRowID + " FROM dbo.[" + table.Trim() + "]"); builder.Append(") AS S"); } //Trả câu SQL để lấy liệu table return builder.ToString(); Bước 2: Xây dựng câu select SQL từ thông tin table thực chuyển đổi liệu từ câu truy vấn liệu SQL //Xây dựng câu select SQL từ thông tin table string sqlText = GetSQLForSelectData(schema, primaryKeyColumn, mapping.PageSize, mapping.SQLTable, syncIdentity); //Thực việc chuyển đổi liệu từ câu truy vấn liệu SQL int increaseNumber = DoTranslate(sqlText, mapping.MongoCollection, primaryKeyColumn, mapping.GetConvertBsonDocumentDelegate (schema), ref syncIdentity); toContinue = increaseNumber >= mapping.PageSize; totalCount += increaseNumber Bước 3: Duyệt qua mapping (chứa thông tin table) cần chuyển đổi //Duyệt qua mapping (chứa thông tin table) cần chuyển đổi 58 foreach (var mapping in this.TranslatorSettings.Mappings) { If tableNames.Contains(mapping.SQLTable, StringComparer.InvariantCultureIgnoreCase)) { mapping.CheckPageSizeAndOrderByColumn(); //Gọi hàm chuyển đổi cho table DoTranslate(mapping); } } Bước Lấy danh sách table chọn để chuyển đổi foreach (var one in this.TranslatorSettings.Mappings) { //Lấy danh sách table chọn để chuyển if (one.IsSelected) { result.Add(one.SQLTable); } } return result.ToArray(); Bước 5: Lấy thông tin cấu hình người dùng từ file Configuration.xml //Lấy thơng tin cấu hình người dùng từ file Configuration.xml xDocument = XDocument.Load(Path.Combine(AppDomain.CurrentDom ain.BaseDirectory, "Configuration.xml")); catch (Exception ex) { ConsoleWriteLog("Failed to load default configuration information."); return; } //Tạo đối tượng chứa thơng tin cấu hình để làm tham số cho việc gọi hàm Execute ConfigurationOperator configurationOperator = new ConfigurationOperator(xDocument); Execute(configurationOperator); } Bước Tạo đối tượng translator để thực việc chuyển đổi 59 private static void Execute(ConfigurationOperator configurationOperator) { //Tạo đối tượng translator để thực việc chuyển đổi Translator translator = new Translator(configurationOperator.Trans latorSettings); translator.Translate(); } Bước 7: Thực việc chuyển đổi public void Translate() { //Thực việc chuyển đổi Translate(GetSelectedTables()); } Code thực thi chương trình chuyển đổi mơ hình đối tượng sang NoSQL Bước 1: Tìm đối tượng (Objects) liên quan đến nghiệp vụ cần chuyển đổi Ở chọn đối tượng: Region, Nation, Customer, Supplier Trong mối quan hệ đối tượng ràng buộc code Bước 2: Xây dựng đối tượng tương ứng với table cần chuyển đổi Có thể áp dụng mơ hình Object Relation Mapping (ORM) để thực hiện, với công nghệ NET, ORM thể kỹ thuật Entity Framework (EF) Dùng EF để sinh object từ table DB, sau tiến hành chỉnh sửa lại nội dung object cho phù hợp với nhu cầu chuyển đổi Tạo thêm thuộc tính ObjectId với định [NotMapped] object để sinh Key NoSQL khơng Map hay có ràng buộc liệu SQL [Table("REGION")] public class REGION { public REGION() { NATIONs = new HashSet(); } [NotMapped] 60 public ObjectId Id { get; set; } [Key] public int R_REGIONKEY { get; set; } [Required] [StringLength(25)] public string R_NAME { get; set; } [StringLength(152)] public string R_COMMENT { get; set; } public virtual ICollection NATIONs { get; set; } } [Table("NATION")] public class NATION { public NATION() { CUSTOMERs = new HashSet(); SUPPLIERs = new HashSet(); } [NotMapped] public ObjectId Id { get; set; } [Key] [DatabaseGenerated(DatabaseGeneratedOption.None) ] public int N_NATIONKEY { get; set; } [Required] [StringLength(25)] public string N_NAME { get; set; } public int N_REGIONKEY { get; set; } StringLength(152)] public string N_COMMENT { get; set; } public virtual ICollection CUSTOMERs { get; set; } internal virtual REGION REGION { get;set; } public virtual ICollection SUPPLIERs { get; set; }} [Table("SUPPLIER")] public class SUPPLIER { public SUPPLIER () { PARTSUPPs = new HashSet (); 61 } [NotMapped] public ObjectId Id {get; set;} [Key] [DatabaseGenerated(DatabaseGeneratedOption.None] public int S_SUPPKEY { get; set; } [Required] [StringLength(25)] public string S_NAME { get; set; } [Required] [StringLength(40)] public string S_ADDRESS { get; set; } public int S_NATIONKEY { get; set; } [Required] [StringLength(15)] public string S_PHONE { get; set; } public decimal S_ACCTBAL { get; set; } [Required] [StringLength(101)] public string S_COMMENT { get; set; } internal virtual NATION NATION { get; set; } public virtual ICollection PARTSUPPs { get; set; }} [Table("CUSTOMER")] public class CUSTOMER { public CUSTOMER() { ORDERS = new HashSet(); } [NotMapped] public ObjectId Id { get; set; } [Key] public int C_CUSTKEY { get; set; } [Required] [StringLength(25)] public string C_NAME { get; set; } [Required] [StringLength(40)] public string C_ADDRESS { get; set; } public int C_NATIONKEY { get; set; } [Required] [StringLength(15)] public string C_PHONE { get; set; } public decimal C_ACCTBAL { get; set; } [Required] [StringLength(10)] 62 public string C_MKTSEGMENT { get; set; } [Required] [StringLength(117)] public string C_COMMENT { get; set; } internal virtual NATION NATION { get; set; } public virtual ICollection ORDERS { get; set; } } Bước 3: Đăng ký, khởi tạo object public class TPCHContext : DbContext { public TPCHContext() : base("name=TPCHModel") { // Tắt chế độ LazyLoading Entity Framework, để tùy biến lấy liệu cần thiết chuyển đổi Configuration.LazyLoadingEnabled = false; Configuration.ProxyCreationEnabled = false; } // Tạo kết nối đối tượng database public virtual DbSet REGIONs {get; set;} public virtual DbSet NATIONs {get; set;} public virtual DbSet SUPPLIERs {get; set;} public virtual DbSet CUSTOMERs {get; set;} // Các ràng buộc cần thiết cho object tương ứng với ràng buộc table database protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity() Property(e => e.C_NAME) IsUnicode(false); modelBuilder.Entity() Property(e => e.C_ADDRESS) 63 .IsUnicode(false); modelBuilder.Entity() Property(e => e.C_PHONE) IsFixedLength() IsUnicode(false); modelBuilder.Entity() Property(e => e.C_ACCTBAL) HasPrecision(15, 2); modelBuilder.Entity() Property(e => e.C_MKTSEGMENT) IsFixedLength() IsUnicode(false); modelBuilder.Entity() Property(e => e.C_COMMENT) IsUnicode(false); modelBuilder.Entity() HasMany(e => e.ORDERS) WithRequired(e => e.CUSTOMER) HasForeignKey(e => e.O_CUSTKEY) WillCascadeOnDelete(false); modelBuilder.Entity() modelBuilder.Entity() Property(e => e.N_NAME) IsFixedLength() IsUnicode(false); modelBuilder.Entity() Property(e => e.N_COMMENT) IsUnicode(false); modelBuilder.Entity() HasMany(e => e.CUSTOMERs) WithRequired(e => e.NATION) HasForeignKey(e => e.C_NATIONKEY) WillCascadeOnDelete(false); modelBuilder.Entity() HasMany(e => e.SUPPLIERs) WithRequired(e => e.NATION) HasForeignKey(e => e.S_NATIONKEY) 64 .WillCascadeOnDelete(false); modelBuilder.Entity() Property(e => e.R_NAME) IsFixedLength() IsUnicode(false); modelBuilder.Entity() Property(e => e.R_COMMENT) IsUnicode(false); modelBuilder.Entity() HasMany(e => e.NATIONs) WithRequired(e => e.REGION) HasForeignKey(e => e.N_REGIONKEY) WillCascadeOnDelete(false); modelBuilder.Entity() Property(e => e.S_NAME) IsFixedLength() IsUnicode(false); modelBuilder.Entity() Property(e => e.S_ADDRESS) IsUnicode(false); modelBuilder.Entity() Property(e => e.S_PHONE) IsFixedLength() IsUnicode(false); modelBuilder.Entity() Property(e => e.S_ACCTBAL) HasPrecision(15, 2); modelBuilder.Entity() Property(e => e.S_COMMENT) IsUnicode(false); modelBuilder.Entity() HasMany(e => e.PARTSUPPs) WithRequired(e => e.SUPPLIER) HasForeignKey(e => e.PS_SUPPKEY) WillCascadeOnDelete(false); } 65 Bước 4: Thực việc lấy liệu cần thiết từ table SQL thông qua đối tượng tạo Dữ liệu rút trích có cấu trúc hình bên dưới: 66 Bước 5: Dữ liệu rút trích từ table SQL ghi vào NoSQL 67 ... pháp chuyển đổi mơ hình 2.5.1 Phương pháp chuyển đổi mơ hình liệu quan hệ sang NoSQL Hình 2.1 Minh họa chuyển cấu trúc liệu quan hệ sang MongoDB 24 Chương Chuyển đổi mơ hình sở liệu quan hệ đối tượng. .. Chương Chuyển đổi mơ hình sở liệu quan hệ đối tượng sang NoSQL 2.5.1.4 Quá trình chuyển đổi liệu Về phương pháp chuyển đổi liệu từ mô hình liệu quan hệ sang NoSQL thực theo nhiều cách Chuyển bảng sang. .. chính: chuyển đổi mơ hình liệu quan hệ sang NoSQL chuyển đổi mơ hình đối tượng sang NoSQL Tuy nhiên, việc chuyển đổi mơ hình liệu quan hệ sang NoSQL thực trước [1], nên nhắc lại tập trung chủ yếu vào