Tuy nhiên, RDBMS là hòn đá tảng đã tồn tại và được ứng dụng đến giờ đã mấy chục năm và đã trở nên cũ kỹ, cho đến những năm gần đây khi phong trào “NoSQL” nở rộ thì mô hình CSDL Quan Hệ
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐÀO TẠO THẠC SĨ CNTT
BÁO CÁO CHUYÊN ĐỀ : CƠ SỞ DỮ LIỆU NÂNG CAO
QUAN GEPHI
CÁC SOCIAL NETWORK NỔI TIẾNG HIỆN NAY NHƯ FACEBOOK, FOURSQUARE, TWITTER
Trang 2HV : VŨ MINH THÀNH
MS : CH1101134 Lớp : Cao học khóa 6
ĐT : 0913887997 Email :
thanhauco@gmail.com
GVHD : GS-TS ĐỖ PHÚC TPHCM, 8/2012
Lời Mở Đầu
Có thể nói cơ sở dữ liệu (Database) đóng vai trò thiết yếu cho mọi ứng dụng, trong đó CSDL Quan Hệ (RDBMS) đóng vai trò chính yếu nhất hiện nay Tuy nhiên, RDBMS là hòn đá tảng đã tồn tại và được ứng dụng đến giờ đã mấy chục năm và đã trở nên cũ kỹ, cho đến những năm gần
đây khi phong trào “NoSQL” nở rộ thì mô hình CSDL Quan Hệ tỏ ra không còn phù hợp khi các
ứng dụng web ngày nay ngày càng trở nên phức tạp, truy xuất khối lượng dữ liệu lớn (big data),
và đòi hỏi hiệu suất cao đối với các ứng dụng thời gian thực thì CSDL Quan Hệ tỏ ra chậm chạp
và rất khó scaling (mở rộng quy mô ứng dụng) (Ví dụ như các mạng xã hội Facebook, Instagram, Foursquare…).
NoSQL cũng là hướng đề tài mà em yêu thích và muốn nghiên cứu sâu, vì thế trong khuôn khổ bài thu hoạch này em muốn trình bày những hiểu biết của em về NoSQL, và Document DB với
Trang 3Phần tiếp theo là mạng xã hội, em xin giới thiệu một công cụ phân tích mạng xã hội thời gian
thực vô cùng trực quan và đầy đủ tính năng nhưng open source là Gephi Mọi người đã quen với
NodeXL khi phân tích mạng xã hội, nhưng NodeXL còn thua xa Gephi về mọi mặt và không mạnh bằng Gephi, Gephi cho phép ta tương tác graph ở chế độ 3D real-time với nhiều khả năng tùy biến Có thể nói Gephi là công cụ mạnh nhất hiện nay dành cho Social Network Analysis
(SNA) Trong bài thu hoạch này, em có demo việc phân tích mạng xã hội Facebook sử dụng
Gephi
Một phần cũng khá thời sự hiện nay là giải quyết bài toán Scaling (Scalibility) sử dụng NoSQL
và Distributed database đối với các mạng xã hội nổi tiếng hiện nay như Facebook, Linkedin, Foursquare, Twitter, Phần này em muốn trình bày cách mà các mạng xã hội trên sử dụng các
kỹ thuật như thế nào để improve performance và scaling cho ứng dụng của họ Họ đã áp dụng CSDL NoSQL và Distributed DB như thế nào và kết quả đạt được ra sao
Có thể nói NoSQL là đề tài thời sự rất nóng bỏng đối với giới công nghệ thông tin hiện nay, và
nó vẫn còn đang phát triển, hứa hẹn sẽ có những đột phá mới trong tương lai.
Qua đây, em cũng xin gởi lời cám ơn chân thành đến GS-TS Đỗ Phúc, người đã tận tâm truyền đạt những kiến thức nền tảng cơ bản cho chúng em về môn học “Cơ sở dữ liệu nâng cao”.
Xin chân thành cám ơn !
Vũ Minh Thành – 8/2012
3
Trang 4NỘI DUNG
Trang 51 PHẦN 1 : GIỚI THIỆU NOSQL VÀ DOCUMENT DATABASE
1.1 GIỚI THIỆU VỀ NOSQL
1.1.1 Khái niệm
NoSQL (Not Only SQL) là hệ cơ sở dữ liệu phi quan hệ, khác biệt với CSDL quan hệ truyền
thống ở một vài điểm quan trọng
NoSQL được thiết kế dành cho mục đích lưu trữ dữ liệu phân tán nơi mà việc lưu trữ dữ liệu lớn được đòi hỏi Ví dụ Google hay Facebook mỗi ngày thu thập cả Terabit dữ liệu người
1.1.2 Lịch sử ra đời của NoSQL
Thuật ngữ NoSQL lần đầu được dùng bởi Carlo Strozzi vào 1998, ông sử dụng tên này để đặt
tên cho 1 CSDL nhỏ mã nguồn mở của ông mà không có giao diện SQL
Vào đầu năm 2009, khi last.fm muốn tổ chức một sự kiện về các hệ CSDL phân tán mã nguồn
mở, Eric Evans, nhân viên của công ty Rackspace đã sử dụng lại từ này để nói đến những
CSDL phi quan hệ, phân tán và không tuân theo ACID (Atomicity, Consistency, Isolation,
Durability) – 4 thành phần quan trọng của CSDL quan hệ
Vào cùng năm đó, hội nghị NoSQL được tổ chức tại Atlanta, USA, nó đã được đem ra bàn thảo và tranh luận rất nhiều
Và cho tới bây giờ, việc thảo luận và ứng dụng NoSQL đang trên đà phát triển và chúng ta thấy được sự tăng trưởng một cách mạnh mẽ
1.1.3 Các tính chất quan trọng của NoSQL
• Schema-free : NoSQL không cần phải định nghĩa schema db về defind tables, relationship,
contrainst, … như CSDLQH Trong NoSQL, collection là 1 tập các documents, các documents
mô tả cho các row và collection biểu diễn tương ứng cho 1 bảng trong CSDLQH
Ví dụ {"colour" : "red"} đây là 2 documents có thể lưu trong 1 collection
{"salary" : 100.00}
Điều đặc biệt ở trên là 2 documents trên không có những thành phần dữ liệu giống nhau Sự linh hoạt này cho phép tính năng schema-free vào NoSQL
• Horizontally scalable : đây chính là khả năng scale out (mở rộng thêm nodes) cho hệ thống
Trong NoSQL, việc lưu trữ data sẽ nhanh hơn nhiều vì tận dụng tính năng scaling out, cho phép bổ sung thêm nhiều node vào hệ thống và phân bố tải trên những node đó
1.1.4 Một số phân loại CSDL NoSQL
Hiện nay số lượng DB kiểu NoSQL đã lên tới hàng trăm, đa số là mã nguồn mở, nhưng nó
được phân loại theo một loại sau
5
Trang 6• Document-oriented : data được lưu như những tài liệu documents
Ví dụ : { FirstName="Arun", Address="St Xavier's Road",
Spouse=[{Name:"Kiran"}], Children=[{Name:"Rihit", Age:8}] }
Một số db dạng này : CouchDB, MongoDB, Jackrabbit, OrientDB, SimpleDB, Terrastore, …
• XML database : data được lưu dạng XML Điển hình : BaseX, eXist, MarkLogic Server, …
• Graph databases : data được lưu thành collection của những nodes Nodes được kết nối bởi
cạnh (edges) Một số DB như : AllegroGraph, DEX, Neo4j, FlockDB, Sones GraphDB…
• Key-Value store : dạng này cho phép ta lưu data không cần schema, khóa key ở đây có thể là string, hashes, lists, sets, sorted sets và Value được lưu theo những key này
Một số loại : Cassandra, Riak, Redis, memcached, BigTable, …
Trang 71.2 GIỚI THIỆU CSDL TÀI LIỆU (DOCUMENT-ORIENTED DB)
Trong phần này ta xét một loại CSDL NoSQL là Document-oriented DB (điển hình là MongoDB)
Ta đã định nghĩa Document DB ở trên, ở đây ta nói thêm về một số khía cạnh của document
- Mã hóa (Encodings) : trong Document DB được sử dụng ở dạng XML, YAML, JSON và BSON
(Binary JSON), cũng như dạng PDF và MS Office documents
- Khóa (Keys) : các documents trong db được xác định qua khóa duy nhất, thường là dạng string
Trong vài trường hợp có thể là URI hay Path Dù dạng nào, ta đều có thể dùng key này để rút trích document từ db DB có thể sử dụng index cho key đó giúp truy xuất document được nhanh giống trong CSDLQH
- Rút trích dữ liệu (Retrieval) : một trong những điểm hay của Document DB là ngoài việc dùng
key để tìm ra document,db còn cung cấp API cho phép ta truy vấn document dựa theo nội dung
nó chứa trong đó
- Cách tổ chức dữ liệu (Organization) : có vài cách như Collections, Tags, Metadata ẩn, phân cấp
giống thư mục
7
Trang 82 PHẦN 2 : GIỚI THIỆU MONGODB VÀ DEMO CHƯƠNG TRÌNH
MongoDB là Document DB được thiết kế linh hoạt, mở rộng, và tốc độ nhanh, thậm chí với tải lớn Nó
được xây dựng với mục đích đem lại khả năng sẵn sàng cao (high availability), hỗ trợ rich và dynamic schema, và cho phép ta dễ dàng phân tán dữ liệu lên nhiều server khác nhau
MongoDB được viết bởi công ty 10gen (www.10gen.com) bằng C++ nên tốc độ nhanh và phân phối dưới
dạng mã nguồn mở Foursquare là một trong những khách hàng nổi tiếng đang sử dụng MongoDB cho
production của mình
MongoDB có thể chạy trên nhiều hệ điều hành khác nhau, cài đặt cũng rất dễ
Xem link hướng dẫn cài đặt dưới đây
- Document s (objects) được map dễ dàng vào các kiểu dữ liệu các ngôn ngữ lập trình
- Tài liệu con (Embedded documents) và arrays làm giảm nhu cầu không cần phải joins các bảng
- Schemaless : không cần định nghĩa schema, nên dễ dàng thay đổi cấu trúc schema
- Không kết bảng (joins) và không có giao tác đa tài liệu (multi-document transactions) đem lại hiệu suất cao và dễ scaling
Hiệu năng cao (High performance):
- Không kết bảng và embedding giúp đọc và ghi nhanh
Trang 9- Cho phép replicated servers với khả năng tự động kháng lỗi master (master failover)
Dễ dàng mở rộng (Easy scalability)
- Tự động chia mảnh (automatic sharding) data trải ra trên các server, read và write phân tán trên các mảnh (shards)
- Eventually-consistent reads
Mô hình hoạt động ở chế độ phân tán dữ liệu của Mongo
Document-based queries : cho phép truy vấn dữ liệu linh hoạt với JSON/Javascript
Map/Reduce : tính năng này giống các hàm gom nhóm và xử lý dữ liệu trong SQL
- Queries chạy song song trên các mảnh (shards)
Có thể nói khái niệm Map/Reduce trong NoSQL là phức tạp và khó hiểu, hình minh họa sau đây giúp
ta dễ dàng hơn khi so sánh các hàm gom nhóm trong Mysql tương đương với Map/Reduce trong Mongo như thế nào
9
Trang 10(So sánh Map/Reduce của Mongo với hàm Aggregation trong MySQL)
GridFS : cho phép ta lưu trữ files dung lượng lớn
Geospatial Indexing : khả năng index cho các dữ liệu vị trí địa lý Cho phép ta tìm object dựa theo vị
trí của nó (VD : hãy tìm những điểm gần điểm X cho trước)
- Khi ta gặp phải những vấn đề về performance với RDBMS
- Ta đang cần giải quyết vấn đề lưu trữ files trong db
- Ta cần xử lý realtime cho batch processing
- Chúng ta đang phát triển theo mô hình agile (Scrum)
- Dữ liệu phức tạp không thể mô hình hóa trong RDBMS
- Dự án của ta chậm tiến độ và công việc đòi hỏi truy xuất db nhiều
- Ta được yêu cầu sử dụng những server hay mạng riêng biệt cho giải pháp db hiện có
- Ta đang cần deploy lên trên public hay private cloud
Trang 11(Các trường hợp trong thực tế sử dụng MongoDB)
Trang 12Mô hình dữ liệu của Mongo theo chuỗi sau từ lớn đến nhỏ
Trang 13Hình sau so sánh trực quan giữa CSDL quan hệ của MySQL và tương đương trong Mongo
13
Trang 142.8 CÁC KHÁI NIỆM CƠ BẢN TRONG MONGO
- Tương tự như khái niệm row trong RDBMS
- Được biểu diễn dạng JSON(BSON)
- Tương tự foreign key trong RDBMS
- Nghĩ như là “pre-joined relationship”
- Embedding có thể là các object con hay là những collections
Trang 17Cách khác là dùng Atomic Update (giống Transactions trong RDBMS), cho phép one-trip
tới db, thực hiện nhiều tác vụ 1 lần
17
Trang 182.9 DEMO CHƯƠNG TRÌNH SỬ DỤNG MONGODB
MongoDB cung cấp các drivers cho phép ta có thể sử dụng MongoDB trên nhiều môi trường và ngôn ngữ khác nhau : Windows, MacOS, Linux, NET, Java, PHP, C++, Python, Ruby, …
Lưu ý : để chạy được các chương trình demo sau, ta phải start trước MongoDB server (xem phần
sử dụng MongoDB ở trên ) thành công
2.9.1 Sử dụng MongoDB với NET Driver
MongoDB cung cấp các drivers (DLL) cho phép ta lập trình MongoDB với C# và sử dụng LINQ
Trang 19 Mô tả về tính năng chương trình
- Xây dựng 1 chương trình demo nhỏ sử dụng MongoDB để tạo và quản lý các Orders (document), tạo và quản lý blog Posts (Title, Author, Body, Tags) Ở đây minh họa các tính CRUD cho các document trong MongoDB
Cấu trúc source code :
Gồm có 4 project chính có thể chạy độc lập riêng bằng cách chọn Debug -> Start New Instance cho
project tương ứng
19
Trang 201) LinqDemo : minh họa tính năng tạo và quản lý Order sử dụng LINQ
2) MongoCSharpDriverDemo : minh họa tính năng quản lý Orders và multiple documents
3) NoRMDriverDemo : tương tự nhưng minh họa Query with Condition
4) SupportedMongoDbCSharpDriverDemo : tương tự nhưng có thêm quản lý blog Posts
Chương trình khi chạy sẽ xuất ra màn hình như hình sau :
Trang 21 Mô tả về sourcecode
Khai báo đối tượng object Order
Khai báo đối tượng object Post (blog)
Hàm Main() chương trình chính (các project tương tự)
21
Trang 23Các hàm quản lý Order CRUD (document ) trong collection
23
Trang 2525
Trang 26Sử dụng LINQ query có điều kiện các Orders
Driver đường dẫn trong folder sourcecode
\Installers\Java\mongo-2.9.0-RC1.jar
Sourcecode chương trình Java sử dụng MongoDB tại
\Sourcecode\Java
Biên dịch và chạy chương trình dùng command sau :
javac -cp mongo.jar; Sample.java
java -cp mongo.jar; Sample
Mô tả source code
Trang 27File Connect.java
27
Trang 28File Sample.java
Trang 29File Document.java
2.9.3 Xây dựng ứng dụng WebBlogging sử dụng PHP với MongoDB
Download và cài đặt PHP theo hướng dẫn sau
Trang 30Tạo connection tới MongoDB
Insert document vào MongoDB
Trang 3131
Trang 32Sau đây ta xây dựng ứng dụng web về Blog bằng PHP sử dụng MongoDB cho phép người sử dụng có thể post blog, thêm comment, edit, delete, editor blog post, và tính năng Dashboard như các hình chụp sau
Source code hoàn chỉnh tại
\Sourcecode\PHP\WebBlogging
Cách tổ chức các module source code
1.BlogEditor: cho phép soạn thảo blog, xem danh sách các bài posts và dashboard
2.Authentication-SessionManager: chức năng login/logout, Session manager
3.RatingTagging-MapReduce: cho phép Author Rating, Tagging cloud, sử dụng các hàm gom nhom
bằng MapReduce của NoSQL
4.Logging-WebAnalytics: Logging cho web, realtime Web analytics (web traffic data analysis) 5.Location-aware : thêm tính năng xác định vị trí location cho blogging website
Một vài hình ảnh minh họa và sourcecode của WebBlogging
bl ogpost.php
Trang 3333
Trang 34tagcloud
Author’s rating
Trang 3535
Trang 36Page views
Daily Page views
Locating positions
Trang 37Source blogpost.php
37
Trang 38Source edit.php
Source Login.php
Trang 3939
Trang 40Source user.php
Trang 41Source session.php
Source avg_rating.php
41
Trang 43Source tagcloud.php
43
Trang 44Source comment.php
Source dashboard.php(4.Logging-WebAnalytics)
Source log.php
Trang 4545
Trang 46Source blogreader_bot.php
Source realtime_pageviews.php
Trang 4747
Trang 48Source page_views.php
Trang 49Source geolocation.js
Source query.php
49
Trang 50Source restaurants.js
Source haystack.php
Trang 512.9.4 Sử dụng MongoDB với Ruby
Hướng dẫn cài đặt và chạy Ruby theo đường dẫn
Trang 53Chương trình demo Ruby quản lý Product, Order, Inventory, Users
\Sourcecode\Ruby\Product-Inventory
53
Trang 543 PHẦN 3 : PHÂN TÍCH MẠNG XÃ HỘI SỬ DỤNG CÔNG CỤ TƯƠNG TÁC TRỰC
QUAN GEPHI
3.1 GIỚI THIỆU VỀ GEPHI (The Open Graph Viz Platform)
Homepage của Gephi https://gephi.org/
Video giới thiệu Gephi http://www.youtube.com/watch?v=bXCBh6QH5W0
Gephi là một nền tảng mã nguồn mở bằng Java dùng để mô phỏng và phân tích trực quan tương tác cho
tất cả các loại đồ thị network và các hệ thống phức tạp, những đồ thị động và có cấp bậc
Gephi sử dụng 3D engine để hiển thị graph theo thời gian thực và tăng tốc quá trình hiển thị Chúng ta
có thể sử dụng Gephi để khám phá, phân tích, không gian hóa (spatialise), chọn lọc (filter), kết cụm, xử lý
và xuất ra nhiều loại graph khác nhau
Gephi có thể chạy trên nhiều nền tảng khác nhau như Windows, Linux, MacOS
Trang 551 Phân tích khảo sát dữ liệu (Exploratory Data Analysis) : phân tích theo trực giác bằng các phép
xử lý graph theo thời gian thực
2 Phân tích mối liên hệ (Link Analysis) : khám phá những cấu trúc kết hợp bên dưới của các đối
tượng, đặc biệt trong những network có scale bất kỳ
3 Phân tích mạng xã hội (Social Network Analysis): khám phá các mối liên kết, các tổ chức và
small-world
4 Phân tích mạng sinh học (Biological Network Analysis) :thể hiện những mẫu (patterns) của dữ liệu sinh học
5 Tạo những poster : giúp đẩy mạnh công tác khoa học với những bản đồ in được chất lượng cao
3.2 CÁC TÍNH NĂNG NỔI BẬT CỦA GEPHI
Gephi là một công cụ mạnh mẽ giúp người dùng khám phá và hiểu về các graph, giống như là Photoshop dành cho graph
Gephi giúp cho các nhà phân tích dữ liệu tương tác trực quan, khám phá dữ liệu, phân tách các thành phần đồ thị, nó cũng giúp cho các nhà thống kê suy nghĩ trực quan với những giao diện tương tác cao giúp suy diễn ra nhiều vấn đề của mạng (reasoning)
1) Mô phỏng graph thời gian thực (Real-time visualization)
- Do sử dụng công cụ hiển thị đồ họa mạnh nhất hiện nay, và OpenGL engine, nên tăng tốc độ hiển thị và pattern discovery ở những đồ thị lớn
- Có thể hiển thị 50,000 nodes và 1,000,000 cạnh của đồ thị
- Filter động
- Cung cấp nhiều tính năng cho quá trình xử lý graph
55