NoSQL và ứng dụng trên Cloud Cài đặt thử nghiệm sử dụng Google AppEngine Giáo viên hướng dẫn TS. Nguyễn Hà Nam Nhóm thực hiện: 1. Phạm Tuấn Anh 2. Phạm Thị My 1. Giới thiệu Dữ liệu trên Internet là vô cùng lớn, đặc biệt là sự phát triển rất mạnh của dữ liệu người dùng (user-driven). Kích thước dữ liệu tăng rất nhanh, đây chính là thách thức cũng là cơ hội cho việc phát triển hệ thống lưu trữ và phân tích dữ liệu. Cùng với đó, chúng ta còn phải đối mặt với dữ liệu thưa (sparse) và bán cấu trúc (semi-structured) [1] Trước sự phát triển về dữ liệu đó, việc sử dụng các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) không còn phù hợp nữa bởi vì RDBMS yêu cầu: - Dữ liệu có cấu trúc rõ ràng - Dữ liệu dày đặc (dense) và thống nhất - Các thuộc tính và quan hệ của dữ liệu phải được định nghĩa trước. Đây là những yêu cầu rất khó được bảo đảm với các loại dữ liệu thưa và bán cấu trúc. Để giải quyết vấn đề kích thước dữ liệu lớn, thưa và bán cấu trúc này đòi hỏi một hệ quản trị cơ sở dữ liệu mới, và đó chính là lý do NoSQL ra đời. NoSQL gồm 4 loại: - Lưu trữ dữ liệu hướng cột (column-oriented data stores) - Cơ sở dữ liệu cặp khóa-giá trị (key/value pair database) - Cơ sở dữ liệu tài liệu (document database) - Cơ sở dữ liệu đồ thị (Graph Database) Trong phần tiếp theo (phần 2) chúng tôi sẽ giới thiệu một số ứng dụng thành công của NoSQL trên Cloud. Phần 3 sẽ giới thiệu một cơ sở dữ liệu NoSQL cụ thể đó là Bigtable của Google và ứng dụng của nó. Phần 4 trình bày một cài đặt thử nghiệm ứng dụng Chat đa người dùng sử dụng Bigtable. Phần 5 là một số kết luận. 2. Ứng dụng NoSQL NoSQL đã và đang được ứng dụng rất rộng rãi với nhiều ứng dụng thực tế. Trong phần này chúng tôi đưa ra khảo sát một số ứng dụng của NoSQL trên Cloud. 2.1. Document database - Apache CouchDB: mục tiêu chính của cơ sở dữ liệu này là phải đáp ứng được nhu cầu dữ liệu lớn và khả năng chịu lỗi. 1 - MongoDB: Là cơ sở dữ liệu mã nguồn mở được viết bằng C++, được thiết kế để dễ dàng làm việc với cơ sở dữ liệu lớn. Nó thích hợp cho các ứng dụng web như blogs, wikis, comments, messages,… 2.2. Key/value pair database - Amazon Dynamo: có rất nhiều dịch vụ của Amazon truy cập cơ sở dữ liệu sử dụng khóa (key). Các ứng dụng như shopping carts, customer preferences, session management, sales rank, … Cơ sử dữ liệu Dynamo cung cấp một cách đơn giản đáp ứng được các yêu cầu cho các ứng dụng này. - Project Voldemort: là hệ cơ sở dữ liệu phân tán key/value. Trong hệ phân tán này dữ liệu được phân chia một cách tự động vào rất nhiều severs. Hiện nay được sử dụng trong các công ty web 2.0 (web 2.0 companies) như LinkedIn. - Amazon SimpleDB: là một giao diện các dịch vụ web, cho phép tạo và lưu trữ nhiều tập dữ liệu, truy vấn dữ liệu dễ dàng và trả về kết quả nhanh. Nó được viết bằng Erlang của Amazon.com và là cơ sở dữ liệu phân tán. - Scalaris: là một cơ sở dữ liệu phân tán key-value, được thiết kế cho các ứng dụng web 2.0. Đặc tính chính của nó là khả năng trợ giúp các giao dịch phân tán (distributed transactions). - Riak: là cơ sở dữ liệu mã nguồn mở, phân tán, chịu lỗi và hướng tài liệu (document-oriented). 2.3. Column-oriented data stores Với hệ cơ sở dữ liệu truyền thống thì việc truy vấn tất cả các cột trong bảng của một hàng nhanh hơn rất nhiều so với việc truy vấn tất cả các hàng trong một bảng. Hệ cơ sở dữ liệu column-oriented được thiết kế để tối ưu việc truy vấn nhiều hàng và đọc/ghi hiệu quả. - Bigtable: Là cơ sở dữ liệu được thiết kế bởi Google, nó chủ yếu tập trung vào hệ dữ liệu phân tán cho việc quản lý dữ liệu có cấu trúc và đáp ứng được dữ liệu kích thước lớn. - FusionTable: được xây dựng bởi Google, FusionTable được thiết kế để có thể giải quyết được những giới hạn của cơ sở dữ liệu quan hệ truyền thống. Chẳng hạn như nó làm đơn giản một số phép toán mà là rất khó cơ sở dữ liệu quan hệ như tích hợp dữ liệu từ nhiều nguồn khác nhau và khả năng làm việc trên các tập dữ liệu lớn. - Cassandra: là hệ cơ sở dữ liệu phân tán key/value có cấu trúc khá phổ biến. Hệ thống này sử dụng kiến trúc của Apache Dynamo và lưu trữ dữ liệu theo kiểm Bigtable. - Hadoop Database (HBase): là cơ sở dữ liệu hướng cột (column- oriented), phân tán, mã nguồn mở. 2.4. Graph database 2 Graph database sử dụng các nút (nodes), các cạnh và các thuộc tính để lưu trữ thông tin. Có một số graph database rất phổ biến hiện nay như sau: - VertexDB: là một graph database có hiệu quả cao. Giao diện chính để kết nối cơ sở dữ liệu này là HTTP vì vậy nó dễ dàng sử dụng trong các ứng dụng web. - Allegro Graph: là một cơ sở dữ liệu disk-base RDF. Nó thích hợp cho các ứng dụng phân tích mạng xã hội, các mô hình ontoloty cho các ứng dụng ngữ nghĩa. - Neo4j: là một hệ cơ sở dữ liệu mạnh, cung cấp một mô hình hướng đồ thị cho việc thể hiện dữ liệu. Việc lưu trữ được quản lý một cách tối ưu cho các cấu trúc đồ thị để có hiệu quả cao nhất. Nó có thể thực hiện tốt với các đồ thị lớn hàng tỷ nút, quan hệ và thuộc tính trên một máy tính đơn lẻ và có thể được chia sẻ trên nhiều máy. 3. Bigtable Bigtable là một hệ thống lưu trữ phân tán để quản lý dữ liệu có cấu trúc được thiết kế để mở rộng đến một kích thước rất lớn: petabyte dữ liệu trên hàng ngàn máy chủ [2] Nhiều dự án lưu trữ dữ liệu của Google trong Bigtable như: lập chỉ mục web, Google Earth, và Google Finance. Các ứng dụng này đặt nhu cầu rất khác nhau trên Bigtable, cả về kích thước dữ liệu (từ các URL đến các trang web đến hình ảnh vệ tinh) và các yêu cầu độ trễ (từ hỗ trợ thời gian xử lý số lượng lớn dữ liệu). Mặc dù có những nhu cầu đa dạng, Bigtable đã cung cấp giải pháp linh hoạt, hiệu suất cao cho tất cả các sản phẩm của Google. 3.1. Mô hình dữ liệu Bigtable là một bản đồ (map) đa chiều, phân tán và thưa. Map được lập chỉ mục bởi khóa hàng, khóa cột, và dấu thời gian. Mỗi giá trị trong map là một mảng bytes. (row:string, column:string, time:int64) → string Giả sử chúng ta muốn giữ một bản sao của một bộ sưu tập lớn của các trang web và thông tin liên quan có thể được sử dụng bởi nhiều dự án khác nhau, gọi đây là bảng cụ thể các Webtable. Webtable, sử dụng URL như là khóa hàng, 3 các khía cạnh khác của các trang web như tên cột, lưu trữ nội dung của các trang web: cột theo thời gian (hình 1) Hàng Các khóa hàng trong một bảng là chuỗi bất kỳ (hiện tại lên đến 64KB kích thước, mặc dù 10-100 byte). Mỗi khi đọc hoặc viết dữ liệu dưới 1 khóa hàng duy nhất là atomic, dễ dàng hơn cho Client về hành vi của hệ thống, đồng thời để cập nhật cùng một hàng. Bigtable duy trì dữ liệu trong từ điển bởi khóa hàng. Mỗi hàng được gọi là một bảng nhỏ, đọc của các dãy hàng ngắn hiệu quả và thường đòi hỏi phải giao tiếp với một số lượng nhỏ các máy tính. Client có thể khai thác tài sản bằng cách chọn khóa hàng để truy cập dữ liệu của họ. Lưu trữ các trang từ cùng một tên miền gần nhau làm cho một số máy chủ lưu trữ và phân tích miền hiệu quả hơn. Column Families Khóa cột được nhóm lại thành bộ được gọi là column Families (CF), tạo thành các đơn vị cơ bản của kiểm soát truy cập. Tất cả các dữ liệu được lưu trữ trong một CF thường là cùng một loại (nén dữ liệu trong cùng một CF với nhau). Một CF phải được tạo ra trước khi dữ liệu được lưu trữ bởi khóa cột, sau khi CF đã được tạo ra, bất kỳ khóa cột CF có thể được sử dụng. Số lượng các CF có cột riêng biệt trong một bảng nhỏ và CF hiếm khi thay đổi trong quá trình hoạt động. Một bảng có thể có một số lượng cột không giới hạn. Tên khóa cột được đặt tên bằng cú pháp: family::qualifier. family phải được in, qualifier là chuỗi tùy ý. Ví dụ: Webtable là ngôn ngữ, lưu trữ các ngôn ngữ trong một trang web, sử dụng chìa khóa duy nhất, và nó lưu trữ ID ngôn ngữ của mỗi trang web. Một CF hữu ích cho bảng này là anchor, mỗi khóa cột trong CF này đại diện cho một anchor đơn (hình 1). qualifier là tên của trang web giới thiệu các nội dung di động là các văn bản liên kết. Kiểm soát truy cập cả đĩa và bộ nhớ, cho phép chúng ta quản lý một số dạng khác nhau của ứng dụng: một số có thể thêm cơ sở dữ liệu mới, đọc các cơ sở dữ liệu và tạo ra nguồn gốc CF, và một số chỉ được phép xem dữ liệu hiện có. Timestamps Mỗi cell trong Bigtable có thể chứa nhiều phiên bản của cùng một dữ liệu, các phiên bản này được lập chỉ mục bởi thời gian. Các timestamps Bigtable là những số nguyên 64-bit. Các ứng dụng cần để tránh trùng lặp phải tạo ra dấu thời 4 gian duy nhất, lưu trữ trong thứ tự giảm dần theo thời gian, để các phiên bản gần nhất có thể được đọc đầu tiên. Thiết lập cho Bigtable phiên bản cell thu thập “rác” tự động. Ví dụ, chỉ giữ lại các giá trị đã được viết trong bảy ngày qua. 3.2. Một số ứng dụng của Bigtable Google Earth Google cung cấp cho người dùng truy cập hình ảnh vệ tinh có độ phân giải cao của bề mặt của thế giới, thông qua giao diện web dựa trên Google Maps (maps.google.com) và thông qua Google Earth (earth.google.com) tùy chỉnh phần mềm máy khách. Những sản phẩm này cho phép người dùng thao tác: có thể xoay, xem, và chú thích hình ảnh vệ tinh ở nhiều cấp độ khác nhau của độ phân giải. Hệ thống này sử dụng một bảng để xử lý trước dữ liệu, và một bộ khác nhau của bảng để phục vụ dữ liệu Client. Trước khi xử lý sử dụng một bảng để lưu trữ hình ảnh nguyên. Trong quá trình xử lý, hình ảnh được làm sạch và hợp nhất vào các dữ liệu cuối cùng. Bảng này có khoảng 70 terabyte dữ liệu do đó được phục vụ từ đĩa. Các hình ảnh nén hiệu quả, nén để Bigtable bị vô hiệu hóa. Mỗi hàng trong bảng hình ảnh tương ứng với một phân đoạn địa lý duy nhất. Hàng được đặt tên để đảm bảo rằng các phân đoạn liền kề địa lý được lưu trữ ở gần nhau. Bảng này chứa một CF để theo dõi các nguồn dữ liệu cho từng phân khúc. CF này có một số lượng lớn các cột cơ bản cho mỗi dữ liệu hình ảnh thô. Hệ thống phục vụ sử dụng một bảng dữ liệu chỉ mục lưu trữ trong GFS. Bảng này là tương đối nhỏ (~ 500 GB), nhưng nó phải phục vụ hàng chục ngàn truy vấn mỗi trung tâm dữ liệu mỗi giây với độ trễ thấp. Kết quả là, bảng này được lưu trữ trên hàng trăm tablet server và CF bộ nhớ trong. Personalized Search (www.google.com / psearch) Personalized Search là lựa chọn một dịch vụ mà người dùng truy vấn hồ sơ và nhấp chuột trong một loạt các sản phẩm của Google như tìm kiếm web, hình ảnh, và tin tức. Người dùng có thể duyệt qua lịch sử tìm kiếm của họ để xem xét lại các truy vấn cũ, họ có thể yêu cầu kết quả tìm kiếm được cá nhân hoá dựa trên các mẫu lịch sử sử dụng Google. Personalized Search lưu trữ dữ liệu của người dùng trong Bigtable. Mỗi người sử dụng có một userid duy nhất. Tất cả các hành động người dùng được lưu trữ trong một bảng. Một CF riêng biệt được dành riêng cho từng loại hành động. Mỗi phần tử dữ liệu sử dụng như là dấu thời gian Bigtable, thời gian mà tại đó các hành động của người dùng tương ứng xảy ra. Personalized Search tạo ra 5 các hồ sơ người dùng bằng cách sử dụng một MapReduce trên Bigtable. Những hồ sơ người dùng được sử dụng để cá nhân hoá kết quả tìm kiếm trực tiếp. 4. Ứng dụng Chat đa người dùng sử dụng Bigtable Chúng tôi đã xây dựng một ứng dụng Chat sử dụng cơ sử dữ liệu Bigtable của google. Ứng dụng bảo đảm các yêu cầu sau: - Nhiều người dùng - Yêu cầu đăng nhập sử dụng tài khoản của google. - Có khả năng nhận ra tài khoản người dùng nếu client đang ở trạng thái đăng nhập một dịch vụ nào đó của google. - Chia thành các phòng chat (chat room) - Lọc và hiển thị 20 chat messages gần nhất 5. Kết luận Trong báo cáo này chúng tôi đã trình bày khái quát về NoSQL và đã chỉ ra rằng việc sử dụng NoSQL đã giải quyết được một số trường hợp mà rất khó thực hiện trong các hệ quản trị cơ sở dữ liệu truyền thống. Chúng tôi cũng đa đưa ra khảo sát các cơ sở dữ liệu NoSQL hiện có và đi sâu vào nghiên cứu mô hình dữ liệu và ứng dụng của một loại là Bigtable của Google. Qua tìm hiểu chúng tôi đã xây dựng thành công một ứng dụng Chat mà hoạt động tương tự như dịch vụ google talk của google. Tài liệu tham khảo [1]. Shashank Tiwari, Professional NoSQL, John Wiley & Sons, Inc., Indianapolis, Indiana, 2011 [2]. Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C, Hsieh, Deborah A, Wallach Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber, Bigtable: A distributed storage system for structured data, Google, Inc, 2006 6 . số ứng dụng thành công của NoSQL trên Cloud. Phần 3 sẽ giới thiệu một cơ sở dữ liệu NoSQL cụ thể đó là Bigtable của Google và ứng dụng của nó. Phần 4 trình bày một cài đặt thử nghiệm ứng dụng. hiện trong các hệ quản trị cơ sở dữ liệu truyền thống. Chúng tôi cũng đa đưa ra khảo sát các cơ sở dữ liệu NoSQL hiện có và đi sâu vào nghiên cứu mô hình dữ liệu và ứng dụng của một loại là Bigtable. của NoSQL trên Cloud. 2.1. Document database - Apache CouchDB: mục tiêu chính của cơ sở dữ liệu này là phải đáp ứng được nhu cầu dữ liệu lớn và khả năng chịu lỗi. 1 - MongoDB: Là cơ sở dữ liệu