II. PJK烏O"X影"XÉ"P浦K"FWPI<
2 Cơ sở lý thuyết
2.3 Định dạng dữliệu
Xuất hiện từ những năm 60 của thế kỉ 20 [28], hệ quản trị cơ sở dữ liệu là một trong những cơng nghệ nịng cốt trong các hệ thống thơng tin hiện nay. Trong lĩnh vực cơ sở dữ liệu, ba khái niệm cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu và hệ thống cơ sở dữ liệu được sử dụng một cách rộng rãi, phổ biến vì tầm quan trọng của chúng.
Khái niệm cơ sở dữ liệu dùng để chỉ tập hợp dữ liệu được tổ chức, lưu trữ và được truy cập từ hệ thống máy tính. Chúng thường được thiết kế, tổ chức bằng các mơ hình, kỹ thuật mang tính học thuật. Khái niệm hệ quản trị cơ sở dữ liệu là thuật ngữ được dùng để chỉ phần mềm giao tiếp với người dùng, cơ sở dữ liệu và phần mềm để thu thập, phân tích dữ liệu. Khái niệm hệ thống cơ sở dữ liệu bao gồm cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu và các phần mềm có liên quan. Tuy nhiên, trong thực tế cơ sở dữ liệu thường dùng để chỉ cả ba khái niệm cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu và hệ thống cơ sở dữ liệu. Trong tài liệu này, cơ sở dữ liệu dùng để chỉ hệ quản trị cơ sở dữ liệu Trong quá trình phát triển của cơ sở dữ liệu, có nhiều mơ hình cơ sở dữ liệu được đề ra dựa trên những nền tảng lý thuyết khác
nhau, đáp ứng những mục tiêu khác nhau: cơ sở dữ liệu quan hệ (tiêu biểu như Oracle, MySQL,. . . ), cơ sở dữ liệu NoSQL (tiêu biểu như MongoDB, Redis,. . . ), cơ sở dữ liệu đối tượng,...
Một số công nghệ về cơ sở dữ liệu đã phát triển lâu dài như mơ hình quan hệ có từ năm 1970 [29] nhưng các hệ thống cơ sở dữ liệu theo mơ hình quan hệ có ý nghĩa thương mại chỉ vào những năm 80. Các hệ thống cơ sở dữ liệu đã khắc phục được nhiều hạn chế của hệ thống xử lý tệp truyền thống.
Từ năm 1960-1970: Các hệ thống xử lý tệp vẫn cịn thơng dụng trong giai đoạn này. Tuy nhiên, các hệ thống cơ sở dữ liệu đầu tiên đã được giới thiệu, dù còn cồng kềnh [28]. Thực ra, mơ hình phân cấp và mơ hình mạng đã tạo nên thế hệ thứ nhất cho hệ thống cơ sở dữ liệu.
Từ năm 1970-1980: Các hệ thống theo thế hệ thứ nhất vẫn được phát huy và có nhiều sản phẩm thương mại. Tuy nhiên, hai mơ hình phân cấp và mạng vẫn được dùng rộng rãi mặc dù chúng vẫn có các nhược điểm như: Các thủ tục tìm kiếm bản ghi, người dùng khó truy cập dữ liệu; tính độc lập giữa chương trình và dữ liệu chưa thật tốt; chưa có cơ sở lý thuyết hồn thiện.
Từ năm 1980-1990: Mơ hình quan hệ của E.F.Codd [29] đã khắc phục nhược điểm của hai mơ hình cơ sở dữ liệu trên. Mơ hình cơ sở dữ liệu quan hệ tạo nên các hệ thống cơ sở dữ liệu thế hệ thứ hai. Các hệ thống cơ sở dữ liệu quan hệ được bán nhiều trên thị trường và chiếm ưu thế so với các hệ thống cơ sở dữ liệu khác. Người ta dùng ngôn ngữ SQL và các ngôn ngữ khác để truy cập dữ liệu.
Từ năm 1990-2000: Những năm này, người ta vẫn sử dụng các cơ sở dữ liệu trong những năm 80 của thế kỷ XX để quản trị dữ liệu với cấu trúc phức tạp như dữ liệu kế tốn tài chính, dữ liệu đa phương tiện (âm thanh, đồ hoạ, hình ảnh). Trong những năm 90, vấn đề hướng đối tượng không những được đề cập trong ngành cơ sở dữ liệu mà còn trong nhiều ngành tin học khác. Từ năm 2000 trở đi: cơng nghệ về cơ sở dữ liệu có thể có những đột phá đáng ngạc nhiên. Tuy nhiên người ta vẫn vạch ra các hướng vững chắc:
• Các kiểu dữ liệu phức tạp được quản lý tốt hơn. Chúng gồm dữ liệu đa chiều, phù hợp với các ứng dụng của kho dữ liệu.
• Phát triển tiếp tục các máy chủ cực lớn. Dựa vào hệ quản trị cơ sở dữ liệu quan hệ hướng đối tượng để thiết lập các cơ sở dữ liệu có khả năng quản lý nhiều loại dữ liệu đa dạng, thuận tiện cho các ứng dụng cơ sở dữ liệu trên mạng Internet.
• Các cơ sở dữ liệu phân tán cho phép các tổ chức có thể phân bố các dữ liệu tại nhiều địa điểm xa nhau về không gian.
Việc lưu trữ dữ liệu theo địa chỉ và nội dung sẽ thông dụng hơn. Điều này cho phép người dùng truy cập dữ liệu theo nội dung của dữ liệu, mà không cần biết cách thức truy cập các dữ liệu này. Các công nghệ về cơ sở dữ liệu, trí tuệ nhân tạo và các dịch vụ thơng tin sẽ tạo nên môi trường truy cập dữ liệu dễ dàng hơn, chẳng hạn giao tiếp bằng ngôn ngữ tự nhiên. Mơ hình phân cấp và mơ hình mạng được coi là đại diện cho các hệ thống cơ sở dữ liệu thế hệ thứ nhất. Mơ hình quan hệ đại diện cho hệ thống cơ sở dữ liệu thế hệ thứ hai. Các mơ hình cơ sở dữ liệu thế hệ sau được kể ra gồm mơ hình hướng đối tượng, mơ hình phân tán, mơ hình suy diễn. Các giai đoạn phát triển của hệ cơ sở dữ liệu và một số cột mốc đáng lưu ý có thể được xem lần lượt ở hai hình sau.
2.3.1 Cơ sở dữ liệu quan hệ
Thuật ngữ "cơ sở dữ liệu quan hệ"được phát minh bởi EF Codd tại IBM vào năm 1970. Codd đã giới thiệu thuật ngữ này trong [29]. Trong bài báo này và các bài báo sau này, ơng đã định nghĩa những gì có nghĩa là "quan hệ". Một định nghĩa nổi tiếng về những gì cấu thành một hệ thống cơ sở dữ liệu quan hệ bao gồm 12 quy tắc của Codd [30], [31]. Tuy nhiên, khơng có hiện thực thương mại nào của mơ hình quan hệ tn thủ tất cả các quy tắc của Codd, vì vậy thuật ngữ này đã dần dần mơ tả một lớp hệ thống cơ sở dữ liệu rộng hơn, ở mức tối thiểu. Cơ sở dữ liệu quan hệ (RDBMS – Relational Database Management System) là một dạng hệ quản trị cơ sở dữ liệu (DBMS – Database Management System) được sử dụng phổ biến nhất, trong đó tất cả dữ liệu được tổ chức chặt chẽ dưới dạng các bảng dữ liệu. Tất cả các thao tác trên cơ sở dữ liệu đều diễn ra trên các bảng.
Hạch tâm của cơ sở dữ liệu quan hệ là SQL [32]. Có thể nói một trong những lí do khiến cho cơ sở dữ liệu được sử dụng một cách rộng rãi là nhờ SQL.
2.3.2 Cơ sở dữ liệu phi quan hệ
Trong nhiều thập kỷ, mơ hình dữ liệu quan hệ chiếm ưu thế về lượng sử dụng để phát triển ứng dụng là mơ hình dữ liệu quan hệ được sử dụng trong các cơ sở dữ liệu quan hệ, ví dụ như Oracle, DB2, SQL Server, MySQL và PostgreSQL. Mãi cho đến cuối những năm 2000, các mơ hình dữ liệu khác mới bắt đầu được đưa vào áp dụng và sử dụng nhiều hơn. Để phân biệt và phân loại các cơ sở dữ liệu và mơ hình dữ liệu mới này, từ "NoSQL"(Non-SQL hay Not Only SQL) đã được đặt ra. Thông thường, thuật ngữ "NoSQL"được sử dụng tương đương với "phi quan hệ". Khác với cơ sở dữ liệu quan hệ truyền thống, cơ sở dữ liệu NoSQL khơng có một cấu trúc, mơ hình biểu diễn tổng quát. NoSQL thật ra là tên gọi để chỉ một tập hợp các cơ sở dữ liệu có cấu trúc linh hoạt chứ khơng dùng để chỉ một dạng cấu trúc cụ thể nào. Các loại cơ sở dữ liệu NoSQL có các đặc điểm chung sau: đơn giản hóa thiết kế, đơn giản hóa khả năng mở rộng theo chiều ngang, khả năng kiểm sốt tính sẵn sàng tốt hơn và giảm thiểu lỗi trong quá trình ánh xạ đối tượng – quan hệ (quá trình ORM – Object Relational Mapping).
Cơ sở dữ liệu NoSQL được đề ra bởi Carlo Strozzi vào năm 1998. Từ 1998 đến nay, cơ sở dữ liệu NoSQL đã đạt được những bước tiến quan trọng:
• Năm 1998, thuật ngữ NoSQL được Carlo Strozzi đề ra. • Năm 2005, BigTable của Google [33]
• Năm 2008, Cassandra được đề ra [34]
• Năm 2009, MongoDB được ra đời.
• Năm 2012, DynamoDB của Amazon được ra đời. [35]
Dựa trên mơ hình dữ liệu, cơ sở dữ liệu NoSQL có thể được chia làm 4 nhóm chính:
• Cơ sở dữ liệu dạng văn bản. • Cơ sở dữ liệu dạng khóa.
• Cơ sở dữ liệu dạng cột. • Cơ sở dữ liệu dạng đồ thị.
Bốn dạng mơ hình dữ liệu trên sẽ được trình bày rõ hơn trong các phần sau.
Hình 2.10: Sự khác biệt giữa mơ hình dữ liệu quan hệ và mơ hình dữ liệu NoSQL
2.3.3 Định dạng dữ liệu document-store
2.3.3.1 Giới thiệu
Cơ sở dữ liệu lưu trữ tài liệu (còn được gọi là cơ sở dữ liệu hướng tài liệu, cơ sở dữ liệu tổng hợp hoặc đơn giản là lưu trữ tài liệu hoặc cơ sở dữ liệu tài liệu) (tiếng anh là Document-oriented database hay document store) là cơ sở dữ liệu sử dụng mơ hình hướng tài liệu để lưu trữ dữ liệu. Cơ sở dữ liệu lưu trữ tài liệu lưu trữ từng bản ghi và dữ liệu liên quan trong một tài liệu. Mỗi tài liệu chứa dữ liệu bán cấu trúc có thể được truy vấn bằng cách sử dụng các công cụ truy vấn và phân tích khác nhau của hệ quản trị cơ sở dữ liệu. Có thể thấy rằng, việc sử dụng định dạng hướng tài liệu sẽ đơn giản hóa cấu trúc của dữ liệu, không cần phải tuân theo một cấu trúc cứng nhắc, không cần phải chứa những thơng tin dư thừa. Vì vậy, khi sử dụng dạng cơ sở dữ liệu tài liệu, hiệu năng của hệ thống sẽ được cải thiện nhiều.
Tuy nhiên, chính việc sử dụng cơ sở dữ liệu dạng tài liệu cũng sẽ tạo ra khó khăn trong quá trình lập trình (dễ tạo ra lỗi khi người lập trình khơng chú ý), có khả năng tạo ra dữ liệu trùng lặp (do dữ liệu khơng được chuẩn hóa),. . .
2.3.3.2 Cơ sở lý thuyết
Một số điểm khác biệt chính giữa cơ sở dữ liệu lưu trữ tài liệu và cơ sở dữ liệu quan hệ:
• Bảng (Table) Cơ sở dữ liệu quan hệ lưu trữ dữ liệu trong nhiều bảng, mỗi bảng chứa các cột và mỗi hàng đại diện cho mỗi bản ghi. Thông tin về bất kỳ thực thể nhất định có thể được chứa trong nhiều bảng. Dữ liệu từ các bảng khác nhau chỉ có thể được liên kết bằng cách thiết lập mối quan hệ giữa các bảng. Mặt khác, cơ sở dữ liệu tài liệu lại khơng sử dụng bảng như vậy. Nó lưu trữ tất cả dữ liệu của một thực thể nhất định trong một tài liệu. Bất kỳ dữ liệu liên quan được lưu trữ bên trong tài liệu đó.
• Lược đồ (Schema): Với cơ sở dữ liệu quan hệ, phải tạo một lược đồ trước khi đưa vào bất kỳ dữ liệu nào. Với cơ sở dữ liệu lưu trữ tài liệu (và hầu hết các cơ sở dữ liệu NoSQL khác), không bắt buộc yêu cầu như vậy. Dữ liệu có thể xử lý mà khơng cần bất kỳ lược đồ được xác định trước. Vì vậy, với một kho lưu trữ tài liệu, bất kỳ hai tài liệu nào cũng có thể chứa một cấu trúc và kiểu dữ liệu khác nhau. Ví dụ: nếu một người dùng chọn khơng cung cấp ngày sinh của mình, thì đó khơng phải là trường trong tài liệu. Nếu người dùng khác cung cấp ngày sinh của mình, đó sẽ là một trường trong tài liệu đó. Nếu đây là một cơ sở dữ liệu quan hệ, ngày sinh vẫn sẽ là một trường cho cả hai người dùng - nó chỉ chứa giá trị hoặc khơng.
• Khả năng mở rộng (Scalability): Khả năng mở rộng cơ sở dữ liệu tài liệu có thể mở rộng theo chiều ngang rất tốt. Dữ liệu có thể được lưu trữ trên nhiều ngàn máy tính và hệ thống sẽ hoạt động tốt. Cơ sở dữ liệu quan hệ không phù hợp để mở rộng theo chiều ngang. Các DB quan hệ phù hợp hơn với việc mở rộng theo chiều dọc (nghĩa là thêm nhiều bộ nhớ, lưu trữ, v.v.). Ở đây có thể nhìn thấy giới hạn về số lượng tài ngun có thể chứa trong một máy, đây
chính là điểm cần xem xét khi lựa chọn NoSQL cho việc mở rộng theo chiều ngang.
• Mối quan hệ giữa các bảng (Relationships) Cơ sở dữ liệu tài liệu khơng có khóa ngoại giống như cơ sở dữ liệu quan hệ. Khóa ngoại được sử dụng bởi các cơ sở dữ liệu quan hệ để thực thi các mối quan hệ giữa các bảng. Nếu một quan hệ cần được thiết lập với cơ sở dữ liệu tài liệu, nó sẽ cần được thực hiện ở mức ứng dụng. Tuy nhiên, tồn bộ ý tưởng đằng sau mơ hình tài liệu là mọi dữ liệu liên quan đến một bản ghi đều được lưu trữ trong cùng một tài liệu. Vì vậy, nhu cầu thiết lập mối quan hệ khi sử dụng mơ hình tài liệu khơng giống như trong cơ sở dữ liệu quan hệ.
• Truy vấn (Query): Hầu hết các cơ sở dữ liệu quan hệ sử dụng SQL làm ngôn ngữ truy vấn tiêu chuẩn. Cơ sở dữ liệu tài liệu có xu hướng sử dụng các ngơn ngữ truy vấn khác (mặc dù một số ngôn ngữ được xây dựng để hỗ trợ SQL). Nhiều cơ sở dữ liệu tài liệu có thể được truy vấn bằng các ngơn ngữ như XQuery, XSLT, SPARQL, Java, JavaScript, Python,...
2.3.4 Cơ chế lưu trữ
Như tên gọi, dữ liệu đều được các cơ sở dữ liệu hướng văn bản lưu trữ theo dạng luận lý dưới dạng văn bản điện tử. Tuy nhiên, khi lưu vật lý, các cơ sở dữ liệu dạng văn bản phải cân nhắc thêm nhu cầu khác như tìm kiếm dữ liệu nhanh chóng, lưu trữ tiết kiệm. Vì vậy, khi lưu trữ vật lý, các dạng cơ sở dữ liệu dạng tài liệu thường sử dụng các phương pháp, các định dạng lưu trữ khác: MongoDB sử dụng BSON (dạng mã nhị phân của JSON), CouchDB sẽ dùng một tập tin nhị phân để lưu trữ toàn bộ dữ liệu ứng với mỗi cơ sở dữ liệu,. . .
2.3.5 Định dạng dữ liệu JSON
JSON, viết tắt của JavaScript Object Notation được đề ra và phát triển bởi Douglas Crockford vào đầu những năm 2000. Hiện tại, định dạng này là một trong những định dạng dữ liệu phổ biến, quan trọng nhất. JSON được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau: trao đổi dữ liệu, lưu trữ thiết lập, cài đặt,...
JSON được thiết kế như là một ngôn ngữ trao đổi dữ liệu vừa dễ đọc, dễ hiểu với người dùng, vừa dễ xử lý cho máy tính. Được xây dựng dựa trên chuẩn ECMA-262 của JavaScript [36], JSON sử dụng quy ước khá giống với những ngơn ngữ lập trình như C, C++, C#, Java, Javascript. Tuy nhiên, JSON không bị phụ thuộc vào ngơn ngữ và có thể làm việc với nhiều ngơn ngữ khác nhau.
Cú pháp của JSON có tính dễ hiểu với con người. Thơng thường, một người có thể khơng cần phải có q nhiều kiến thức về kỹ thuật, nghiệp vụ cũng có thể đọc hiểu được một đoạn thơng tin được lưu trữ dưới dạng JSON. JSON có các kiểu dữ liệu sau:
• Dạng số. • Dạng ký tự.
• Một trong 3 giá trị đặc biệt: true, false, null. • Dạng dãy (array).
• Dạng đối tượng (object).
Một đoạn thơng tin JSON có cấu trúc tương tự như sau: 2.4 Thuật toán phân cụm phân cấp 2.4.1 Giới thiệu thuật toán phân cụm
Phân cụm dữ liệu là một hướng nghiên cứu rất quan trọng trong lĩnh vực khai phá dữ liệu, nhằm tìm kiếm, phát hiện các cụm, các mẫu dữ liệu tiềm ẩn trong các tập dữ liệu lớn, từ đó cung cấp thơng tin, tri thức hữu ích để đưa ra các quyết định. Phân cụm dữ liệu là quá trình phân chia một tập dữ liệu ban đầu thành các cụm dữ liệu sao cho các phần tử trong một cụm thì “tương tự” nhau và các phần tử trong các cụm khác nhau thì “phi tương tự” với nhau. Số các cụm dữ liệu được phân ở đây có thể được xác định trước theo kinh nghiệm hoặc có thể được tự động xác định.
Sau khi xác định các đặc tính của dữ liệu, người ta đi tìm cách thích hợp để xác định "khoảng cách"giữa các đối tượng, hay là phép đo tương tự dữ liệu. Đây chính là các hàm để đo sự giống nhau giữa các cặp đối tượng dữ liệu, thơng thường các hàm này hoặc là để tính độ tương tự (Similar) hoặc là tính độ phi tương tự (Dissimilar) giữa các đối tượng dữ liệu. Giá trị của hàm tính độ đo tương tự càng lớn thì sự giống nhau giữa đối tượng càng lớn và ngược lại; cịn hàm tính độ phi tương tự tỉ lệ nghịch với hàm tính độ tương tự.
Trong học máy, phân cụm dữ liệu được xem là vấn đề học khơng có giám sát (unsupervised learning), vì nó giải quyết vấn đề tìm một cấu trúc trong tập hợp các dữ liệu chưa biết trước các thông tin về lớp hay các thơng tin về tập ví dụ huấn luyện. Trong nhiều trường hợp, khi phân lớp được xem là vấn đề học có giám sát thì phân cụm dữ liệu là một bước trong phân lớp dữ liệu, trong đó phân cụm dữ