BÀI TẬP LỚN CƠ SỞ DỮ LIỆU NÂNG CAO TÌM HIỂU VỀ MONGO DB

29 2.6K 13
BÀI TẬP LỚN CƠ SỞ DỮ LIỆU NÂNG CAO TÌM HIỂU VỀ MONGO DB

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐH CÔNG NGHỆ - ĐH QUỐC GIA HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN    CƠ SỞ DỮ LIỆU NÂNG CAO Đề tài: TÌM HIỂU VỀ MONGO DB GV hướng dẫn: PGS.TS. Nguyễn Hà Nam HV thực hiện: Trần Thị Then – K18 Ngô Thị Nga – K18 HÀ NỘI, 2012 2 MỤC LỤC 1 ĐẶT VẤN ĐỀ 4 2 TỔNG QUAN VỀ NOSQL 4 3 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB 5 3.1 Giới thiệu 5 3.2 Các đặc điểm của Mongo 6 3.3 Văn bản BSON 6 3.4 Ngôn ngữ truy vấn của MongoDB 8 3.4.1 Thiết kế lược đồ 10 3.4.2 Chỉ mục 12 3.4.3 Sao chép dữ liệu 16 3.4.4 Truy vấn 18 3.4.5 GridFS 19 4 KẾT LUẬN 21 5 PHỤ LỤC A. HƯỚNG DẪN CÀI ĐẶT 22 6 PHỤ LỤC B. MỘT SỐ CÚ PHÁP CÂU LỆNH 24 3 1 ĐẶT VẤN ĐỀ Với sự phát triển không ngừng của ngành công nghệ thông tin. Khối dữ liệu cần xử lý trong các ứng dụng là rất lớn. Đặc biệt là sự bùng nổ công nghệ Web 2.0, nơi các mạng dịch vụ dữ liệu cộng đồng cho phép người dùng tự do tạo nội dung trên web, dẫn đến dữ liệu tăng lên rất nhanh, vượt qua giới hạn xử lý của các Hệ quản trị cơ sở dữ liệu quan hệ truyền thống. Để đáp ứng được nhu cầu phát triển của xã hội, đòi hỏi một cơ sở dữ liệu (CSDL) có thể lưu trữ, xử lý được một lượng dữ liệu lớn một cách nhanh chóng và hiệu quả. NoSQL đã ra đời, thay thế hệ quản trị CSDL quan hệ, giải quyết bài toán trên. Tác giả viết tài liệu này với mục đích giúp người đọc bước đầu tiếp cận, có cái nhìn khái quát về các CSDL hiện đại NoSQL; hiểu chi tiết hơn hệ cơ sở dữ liệu cơ bản của NoSQL là MongoDB; đồng thời giúp người đọc có thể thực hiện một ứng dụng cơ bản trên hệ cơ sở dữ liệu MongoDB. 2 TỔNG QUAN VỀ NOSQL Với hầu hết các thời kỳ web, Hệ quản trị cơ sở dữ liệu quan hệ dựa trên SQL đã thống trị hầu hết các hệ Quản trị Cơ sở dữ liệu. Tuy nhiên, thời gian gần đây, một cách tiếp cận mới đã bắt đầu biết đến là NoSQL, tạo ra sự thay thế cho các hệ quản trị cơ sở dữ liệu quan hệ truyền thống. NoSQL còn có nghĩa là Non-Relational - không ràng buộc. Tuy nhiên, thuật ngữ đó ít phổ dụng hơn và ngày nay người ta thường dịch NoSQL thành Not Only SQL - Không chỉ SQL. NoSQL ám chỉ đến những cơ sở dữ liệu không dùng mô hình dữ liệu quan hệ để quản lý dữ liệu trong lĩnh vực phần mềm Thuật ngữ NoSQL được giới thiệu lần đầu vào năm 1998 sử dụng làm tên gọi chung cho các cơ sở dữ liệu quan hệ nguồn mở nhỏ nhưng không sử dụng SQL cho truy vấn. Vào năm 2009, Eric Evans, nhân viên của Rackspace giới thiệu lại thuật ngữ NoSQL khi Johan Oskarsson của Last.fm muốn tổ chức một hội thảo về cơ sở dữ liệu nguồn mở phân tán. Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ CSDL mới: một thế hệ CSDL không ràng buộc, phân tán, nguồn mở, khả năng mở rộng theo chiều ngang, có thể lưu trữ, xử lý từ một lượng rất nhỏ cho tới hàng petabytes dữ liệu trong hệ thống có độ chịu tải, chịu lỗi cao với những đòi hỏi về tài nguyên phần cứng thấp. Một số đặc điểm nhận dạng cho thế hệ CSDL mới này bao gồm: schema-free, hỗ trợ mở rộng dễ dàng, API đơn giản, nhất quán cuối (eventual consistency), không giới hạn không gian dữ liệu, Sau đây là danh sách các CSDL NoSQL: 1. Wide Column Store / Column Families: Hadoop/HBase – Apache, BigTable – Google, Cassandra - Facebook/Apache, Hypertable - Zvents Inc/Baidu, Cloudera, SciDB, Mnesia, Tablets,… 2. Key-Value Store/Tuple store 4 a. Key/value cache in RAM: memcached, Citrusleaf database, Velocity, Redis, Tuple space, b. Key/value save on disk: Memcachedb, Berkeley DB, Tokyo Cabinet, Redis, c. Eventually Consistent Key Value Store: Amazon Dynamo, Voldemort, Dynomite, KAI, Cassandra, Hibari, Project Voldemort,… d. Ordered key-value store: NMDB, Memcachedb, Berkeley DB, e. Distributed systems: Apache River, MEMBASE, Azure Table Storage, Amazon Dynamo, 3. Document Store: Apache Jackrabbit, CouchDB, IBM Lotus Notes Storage Format (NSF), MongoDB, Terrastore, ThruDB, OrientDB, RavenDB, 4. Graph Database: Neo4J, Sones, AllegroGraph, Core Data, DEX, FlockDB, InfoGrid, OpenLink Virtuoso, Tuy cùng mang những đặc điểm chung của NoSQL nhưng mỗi CSDL NoSQL cũng có những đặc điểm riêng, và vì thế thường được dùng cho những dự án khác nhau. Ví dụ: MongoDB và Redis là những lựa chọn tốt cho việc lưu trữ các dữ liệu thống kê ít được đọc mà lại được viết thường xuyên. Hadoop, một CSDL dạng tự do, phân tán làm tốt công việc lưu trữ các dữ liệu lớn như các con số thống kê thời tiết hoặc công việc phân tích nghiệp vụ. Memcachedb, một CSDL nhất thời chóng tàn, tuyệt vời trong lưu trữ các phiên làm việc web, các khóa, và các con số thống kê ngắn hạn. Cassandra và Riak (các lưu trữ dư thừa, tự động tạo bó cluster) làm tốt trong các môi trường với các ứng dụng có tính sẵn sàng cao, khi thời gian sống tối đa là sống còn. Để tìm hiểu sâu hơn về các CSDL hiện đại NoSQL, chúng ta đi nghiên cứu chi tiết một CSDL đặc trưng là MongoDB. 3 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB 3.1 Giới thiệu Hệ cơ sở dữ liệu Mongo được phát triển bởi công ty 10gen từ năm 2007, khi công ty này xây dựng một Platform as a Service tương tự như ứng dụng Google App Engine. Trong năm 2009, hệ cơ sở dữ liệu Mongo đã được phát triển như một phần mềm nguồn mở độc lập, có giấy phép của AGPL. Từ phiên bản 1.4 được phát hành vào tháng 3 năm 2011, hệ cơ sở dữ liệu Mongo đã phát hành rộng rãi ngoài thị trường. Cho tới thời điểm hiện tại thì 10gen đã cho phát hành phiên bản 2.0.3 là một phiên bản nâng cấp và hoàn thiện hơn. Hệ cơ sở dữ liệu này đang ngày càng được phát triển hơn để đưa ra những tiện ích hoàn thiện hơn cho người sử dụng. Tên hệ cơ sở dữ liệu Mongo bắt nguồn từ một từ tiếng Anh là “humongous” có nghĩa là rất lớn hay khổng lồ. 5 Mongo là một hệ cơ sở dữ liệu kiểu NoSQL – Not only SQL – không đơn thuần chỉ là SQL mà đây là một hệ cơ sở dữ liệu ứng dụng cho các dữ liệu lớn, không cần cấu trúc. Mongo hỗ trợ các hệ điều hành: Windows, Linux, Mac OS, Solaris với các phiên bản 32 bit và 64 bit. Ngoài ra Mongo còn cung cấp mã nguồn để cho các nhà phát triển khác có thể sử dụng. Với các phiên bản 32 bit thì Mongo hỗ trợ khoảng 2.5 Gb dữ liệu. Hiện tại Mongo đã hỗ trợ các ngôn ngữ lập trình: C, C++, Erlang, Haskell, Java, Javascript, .NET (C# F#, PowerShell,…), Perl, PHP, Python, Ruby, Scala. Ngoài ra, cộng đồng phát triển Mongo cũng hỗ trợ thêm một số ngôn ngữ khác nữa như LISP, Delphi, Erlang, MatLab, Prolog, Objective C, Smalltalk, … 3.2 Các đặc điểm của Mongo - Cơ sở dữ liệu hướng văn bản • Các đối tượng tương tự như kiểu dữ liệu của các ngôn ngữ lập trình • Các văn bản và mảng được nhúng trong cơ sở dữ liệu làm giảm việc phải sử dụng các phép join – nối • Kiểu động, không lược đồ • Không nối và cũng không có các giao tác giữa nhiều đối tượng. Điều này làm tăng hiệu suất và dễ dùng hơn với các dữ liệu lớn. - Hiệu suất cao • Không có phép nối và nhúng dữ liệu làm cho việc đọc và ghi dữ liệu nhanh hơn. • Đánh chỉ mục bằng khóa của các văn bản và mảng nhúng - Tính sẵn sàng cao • Kết nối nhanh với server - Tính dễ thay đổi • Tự động phân vùng dữ liệu trong server: đọc và ghi dữ liệu phân tán trên các mảnh khác nhau; không dùng phép nối hay thực hiện giao tác đa văn bản làm cho việc phân tán các truy vấn dễ dàng và nhanh • Các dữ liệu phân tán trên các server khác nhau, giúp cho việc đọc dữ liệu nhanh hơn. • Ngôn ngữ truy vấn dễ sử dụng 3.3 Văn bản BSON BSON là cách mã hóa các dữ liệu dưới dạng nhị phân với các cặp khóa/ giá trị được lưu trong một thực thể đơn. BSON hỗ trợ nhúng các văn bản và mảng vào trong các văn bản và mảng khác. BSON cũng chứa các phần mở rộng cho phép thể hiện nhiều kiểu dữ liệu khác nhau. 6 Mongo sẽ chuyển các dữ liệu của mình thành các dạng BSON - tức là dạng nhị phân, sau đó lưu các dữ liệu dạng nhị phân này vào trong CSDL. BSON được sử dụng bởi ba lý do sau: 1) Đơn giản, nhẹ: Giữ cho không gian lưu trữ dữ liệu là nhỏ nhất, điều này đặc biệt quan trọng khi mà chuyển dữ liệu qua mạng. 2) Dễ chuyển(Traversable) : BSON được thiết kế để chuyển một cách dễ dàng. Đây là một đặc tính quan trọng trong việc thể hiện dữ liệu cho MongoDB 3) Hiệu quả: Việc mã hóa và giải mã các dữ liệu dạng BSON có thể được thực hiện một cách nhanh chóng trong hầu hết các ngôn ngữ dùng cùng kiểu dữ liệu giống ngôn ngữ C. Các kiểu cơ bản: byte 1 byte (8-bits) int32 4 bytes (32-bit signed interger) int64 8 bytes (64-bit signed interger) double8 bytes (64-bit IEEE 754 floating point) Một số kiểu dữ liệu khác: Cách biểu diễn của nó tương tự với cách biểu diễn ngữ nghĩa của ngôn ngữ C, có thể dùng "\x01" để biểu diễn cho 0000 0001, hay là dùng toán tử * để thể hiện việc lặp lại 0 hay nhiều lần một thể hiện( "\x01"*2 biểu diễn cho "\x01\x01" ) document ::= int32 e_list "\x00" BSON Document e_list ::= element e_list Sequence of elements | "" element ::= "\x01" e_name double Floating point | "\x02" e_name string UTF-8 string | "\x03" e_name document Embedded document | "\x04" e_name document Array | "\x05" e_name binary Binary data | "\x06" e_name Undefined — Deprecated | "\x07" e_name (byte*12) ObjectId | "\x08" e_name "\x00" Boolean "false" | "\x08" e_name "\x01" Boolean "true" | "\x09" e_name int64 UTC datetime | "\x0A" e_name Null value 7 | "\x0B" e_name cstring cstring Regular expression | "\x0C" e_name string (byte*12) DBPointer — Deprecated | "\x0D" e_name string JavaScript code | "\x0E" e_name string Symbol e_name ::= cstring Key name string ::= int32 (byte*) "\x00" String cstring ::= (byte*) "\x00" CString binary ::= int32 subtype (byte*) Binary Ví dụ mã hóa cặp khóa/ giá trị: {"hello": "world"}→ "\x16\x00\x00\x00\x02hello\x00 \x06\x00\x00\x00world\x00\x00" 3.4 Ngôn ngữ truy vấn của MongoDB Để dễ hình dung hơn các đặc điểm của MongoDB, ta hãy xem bảng so sánh tương ứng giữa SQL và Mongo như sau: Về mặt khái niệm: SQL Mongo database database table collection index index partition shard partition key shard key row BSON document column BSON field join embedding và linking primary key _id field group by aggregation 8 Về mặt cú pháp câu lệnh (Chi tiết xem thêm phụ lục B) CREATE TABLE USERS (a Number, b Number) db.createCollection("mycoll") ALTER TABLE users ADD không có INSERT INTO USERS VALUES(3,5) db.users.insert({a:3,b:5}) SELECT a,b FROM users db.users.find({}, {a:1,b:1}) SELECT * FROM users db.users.find() SELECT * FROM users WHERE age=33 db.users.find({age:33}) SELECT a,b FROM users WHERE age=33 db.users.find({age:33}, {a:1,b:1}) SELECT * FROM users WHERE age=33 ORDER BY name db.users.find({age:33}).sort({name:1}) … … Trước khi đi vào tìm hiểu kỹ hơn về MongoDB, chúng ta làm quen với một số khái niệm cơ bản của MongoDB: Văn bản Văn bản là một khái niệm quan trọng trong MongoDB. Văn bản bao gồm tập hợp các khóa với các giá trị tương ứng. Ví dụ: {"greeting" : "Hello, world!"} Văn bản trên gồm một khóa là “greeting”, với giá trị là “Hello, world!”. Các văn bản có thể chứa nhiều cặp khóa/giá trị. Ví dụ: {"greeting" : "Hello, world!", "foo" : 3} Một số lưu ý: - Các cặp khóa/ giá trị trong văn bản được sắp xếp. Văn bản trên sẽ khác với văn bản sau 9 {"foo" : 3, "greeting" : "Hello, world!"} - Khóa trong văn bản là một chuỗi - MongoDB phân biệt chữ hoa chữ thường - Văn bản trong MongoDB không được chứa những khóa giống nhau. Ví dụ văn bản sau là không hợp lệ {"greeting" : "Hello, world!", "greeting" : "Hello, MongoDB!"} Bộ sưu tập Bộ sưu tập là một nhóm các văn bản. Nếu văn bản tương đương với dòng trong CSDL quan hệ thì bộ sưu tập tương đương với bảng. Bộ sưu tập là một Schema-Free, nghĩa là các văn bản có hình dạng khác nhau có thể cùng được lưu trữ trong 1 bộ sưu tập. Ví dụ các văn bản sau có thể cùng được lưu trong một bộ sưu tập: {"greeting" : "Hello, world!"} {"foo" : 5} Bộ sưu tập được xác định bởi tên của nó là một chuỗi UTF-8 3.4.1 Thiết kế lược đồ Với MongoDB, chúng ta ít phải “chuẩn hóa” hơn so với khi làm việc với lược đồ quan hệ vì trong MongoDB không có khái niệm liên kết (join). Nói chung, với mỗi đối tượng (object) mức cao nhất, ta sẽ có một bộ sưu tập (collection) dữ liệu. Một bộ sưu tập không phải cho tất cả các lớp (class), thay vào đó, các đối tượng sẽ được nhúng vào đó. Hình 5.1 minh họa có 2 bộ sưu tập: students và courses. Các văn bản student được nhúng văn bản address và văn bản score. Trong đó, văn bản Score được tham chiếu đến Courses. 10 [...]... ở ổ C:\ProgramData, thư mục “mongoDB” - Tạo thêm thư mục con ở bên trong có tên là "data" và db bên trong “data” Và đây sẽ là nơi chứa các csdl (c:\ProgramData\mongodb\data \db) Bước 4: Tạo file chạy cho MongoDB - Mở 1 editor bất kỳ như "notepad" của win và copy nội dung sau: C:\Program Files\mongodb-win32-x86_64-2.0.3\bin\mongod.exe dbpath=C:/ProgramData/mongodb/data /db PAUSE (tên thư mục đường dẫn... án khác nhau Trong tài liệu đã đề cập đến MongoDB là một CSDL hướng văn bản, lưu trữ dữ liệu dưới cặp khóa/giá trị Để tăng tốc độ xử lý truy vấn, người ta thường sử dụng việc đánh chỉ mục và nhúng các đối tượng trong MongoDB MongoDB tỏ ra đặc biệt hiệu quả với những dự án mà tỉ lệ lượng dữ liệu ghi vào CSDL lớn hơn lượng đọc Với các nội dung đã trình bày, tài liệu đã đáp ứng được mục... Tuy nhiên, do hạn chế về thời gian nên mức độ chuyên sâu nghiên cứu của tài liệu chưa cao Tài liệu đã đề cập đến một lĩnh vực rất mới mẻ và có tính ứng dụng cao Hy vọng vấn đề này sẽ được đông đảo bạn đọc và những người nghiên cứu khoa học quan tâm, nghiên cứu sâu hơn, khai thác triệt để những ứng dụng to lớn của các hệ cơ sở dữ liệu hiện đại để tạo ra các phần mềm chất lượng cao, đáp ứng nhu cầu xã... lựa chọn MongoDB sẽ mang lại hiệu quả cao 4 KẾT LUẬN Sự phát triển không ngừng của công nghệ thông tin, nhu cầu xã hội đòi hòi những hệ thống phần mềm có khả năng lưu trữ và có tốc độ xử lý cao với một lượng dữ liệu lớn Một trong những công nghệ mới ra đời để giải quyết bài toán đó là NoSQL Một hệ thống CSDL với nhiều ưu điểm như mã nguồn mở, có khả năng lưu trữ và xử lý một lượng dữ liệu lớn Mỗi... GridFS không được dùng khi: - Chỉ có ít dữ liệu tĩnh như là một vài file dữ liệu js, css, hình ảnh của một website thì việc lưu trữ bằng GridFS là không cần thiết - Nếu ta cần thiết lập cho dữ liệu được cập nhật một cách tự động và đối tượng được lưu có kích cỡ nhỏ thì ta có thể lưu bằng tay hoặc cũng có thể lưu dữ liệu dưới dạng BSON nhị phân 20 Như vậy, MongoDB là một CSDL hướng văn bản, lưu trữ... ĐẶT Bước 1: Tải phiên bản MongoDB mới nhất phù hợp với phiên bản hệ điều hành đang dùng tại trang: http://www.mongodb.org/downloads (Mình sử dụng bản Windows 32-bit) Bước 2: Giải nén file tải về vào thư mục chứa hệ điều hành Ví dụ, mình giải nén vào ổ C:\Program files\ và được thư mục: C:\Program Files\mongodb-win32-i386-2.0.3 Bước 3: Tạo 1 thư mục để chứ các csdl của MongoDB - Ở đây mình sẽ tạo tiếp... trong MongoDB thường được nhúng trong các đối tượng mức cao hơn để tăng tốc độ xử lý truy vấn Để tăng tốc độ truy vấn, người ta cũng thường đánh chỉ mục cho những bộ sưu tập có tỉ lệ đọc:ghi cao MongoDB thực hiện truy vấn để lấy dữ liệu thông qua các biểu thức truy vấn cùng các tham số cần thiết Với những dự án mà tỉ lệ lượng dữ liệu ghi vào CSDL lớn. .. mảnh này gọi là một chunk - Mỗi chunk lưu trong một document riêng ở trong chunks collection - Thông tin về file thì được lưu ở files collection - Mỗi dữ liệu chỉ có một file và có thể có một hay nhiều chunk Files: File phải chứa các thông tin về _id, độ dài của dữ liệu, cỡ của một chunk, ngày dữ liệu được lưu, MD5 { "_id" : , "length" : data_number, // unique ID for this file // size of... (a db. createCollection("mycoll") không có USERS db. users.insert({a:3,b:5}) SELECT a,b FROM users db. users.find({}, {a:1,b:1}) SELECT * FROM users db. users.find() SELECT * FROM users WHERE db. users.find({age:33}) age=33 SELECT a,b FROM users WHERE db. users.find({age:33}, {a:1,b:1}) age=33 SELECT * FROM users WHERE db. users.find({age:33}).sort({name:1}) age=33 ORDER BY name SELECT * FROM users WHERE db. users.find({age:{$gt:33}})... đổi đáng kể hoặc không gian đĩa được sử dụng bởi các chỉ mục có vẻ lớn bất thường reIndex sẽ bị chậm với các bộ sưu tập lớn Các lệnh sửa CSDL tái tạo lại tất cả các chỉ mục trong CSDL Lưu ý - Chỉ mục trong MongoDB phân biệt chữ hoa chữ thường - Chỉ số thông tin được lưu giữ trong bộ sưu tập system.indexes, chạy db. system.indexes.find () để xem ví dụ Hiệu suất chỉ mục Việc . quát về các CSDL hiện đại NoSQL; hiểu chi tiết hơn hệ cơ sở dữ liệu cơ bản của NoSQL là MongoDB; đồng thời giúp người đọc có thể thực hiện một ứng dụng cơ bản trên hệ cơ sở dữ liệu MongoDB. 2. “humongous” có nghĩa là rất lớn hay khổng lồ. 5 Mongo là một hệ cơ sở dữ liệu kiểu NoSQL – Not only SQL – không đơn thuần chỉ là SQL mà đây là một hệ cơ sở dữ liệu ứng dụng cho các dữ liệu lớn, . cơ sở dữ liệu không dùng mô hình dữ liệu quan hệ để quản lý dữ liệu trong lĩnh vực phần mềm Thuật ngữ NoSQL được giới thiệu lần đầu vào năm 1998 sử dụng làm tên gọi chung cho các cơ sở dữ liệu

Ngày đăng: 08/07/2015, 16:05

Từ khóa liên quan

Mục lục

  • 1 ĐẶT VẤN ĐỀ

  • 2 TỔNG QUAN VỀ NOSQL

  • 3 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB

    • 3.1 Giới thiệu

    • 3.2 Các đặc điểm của Mongo

    • 3.3 Văn bản BSON

    • 3.4 Ngôn ngữ truy vấn của MongoDB

      • 3.4.1 Thiết kế lược đồ

        • 3.4.1.1 Nhúng và tham thiếu

        • 3.4.1.2 Lựa chọn chỉ mục

        • 3.4.2 Chỉ mục

          • 3.4.2.1 Các khái niệm cơ bản

          • 3.4.2.2 Chỉ mục hỗn hợp các khóa

          • 3.4.2.3 Chỉ mục thưa thớt

          • 3.4.2.4 Chỉ mục duy nhất

          • 3.4.2.5 Xóa chỉ mục

          • 3.4.2.6 Đánh chỉ mục lại (reindex)

          • 3.4.3 Sao chép dữ liệu

          • 3.4.4 Truy vấn

          • 3.4.5 GridFS

          • 4 KẾT LUẬN

          • 5 PHỤ LỤC A. HƯỚNG DẪN CÀI ĐẶT

          • 6 PHỤ LỤC B. MỘT SỐ CÚ PHÁP CÂU LỆNH

Tài liệu cùng người dùng

Tài liệu liên quan