Các loại NoSQL phổ biến

Một phần của tài liệu PHÁT TRIỂN ỨNG DỤNG WEB (Trang 25 - 50)

2.7.1. MongoDB [2][3]

Mongo là một cơ sở dữ liệu NoSQL nguồn mở, hiệu năng cao, có tính mở rộng cao.Đƣợc viết bằng C++ .Dùng cách lƣu trữ BSON (Json đƣợc biên dịch) với giấy phép AGPL.Thay vì lƣu trữ dữ liệu theo các bảng nhƣ các cơ sở dữ liệu cổ điển.MongoDB lƣu cấu trúc dữ liệu thành các văn bản dựa JSON với mô hình động (gọi đó là BSON), khiến cho việc tích hợp dữ liệu cho các ứng dụng trở nên dễ dàng và nhanh hơn.Với mục tiêu là kết hợp các điểm mạnh của mô hình key-values (nhanh mà tính mở rộng cao) với mô hình dữ liệu quan hệ ( giàu chức năng).

Mục tiêu chính của Mongo là giữ lại các thuộc tính thân thiện của SQL.Do đó các câu truy vấn khá giống với SQL nên MongoDB khá thích hợp cho các lập trình viên đã quen với ngôn ngữ truy vấn SQL.MongoDB có một khối lƣợng tính năng lớn và hiệu năng cao.Với các loại dữ liệu phong phú, nhiều truy vấn và việc giảm thời gian phát triển trong việc mô hình hóa các đối tƣợng.

MongoDB đƣợc sử dụng tốt nhất với nhu cầu cần truy vấn động, nếu bạn muốn định nghĩa chỉ mục mà không cần các hàm map/reduce.Đặc biệt nếu bạn cần tốc độ nhanh cho một cơ sở dữ liệu lớn vì MongoDB ngoài tốc độ đọc nhanh ra thì tốc độ ghi của nó rất nhanh.

Các đặc điểm chính của mongoDB là:

Các truy vấn Ad hoc: Mongo hỗ trợ việc tìm theo trƣờng, khoảng kết quả tìm và tìm theo cú pháp.Các truy vấn có thể trả về các trƣờng đƣợc qui định

16

trong văn bản và cũng có thể bao gồm các hàm Javascript mà ngƣời dùng chƣa định nghĩa.

Đánh chỉ mục: Bất cứ một trƣờng nào trong MongoDB đều đƣợc đánh chỉ mục (giống nhƣ chỉ mục bên RMDBs).

Mô phỏng ( nhân bản): Mongo hỗ trợ mô phỏng Master-slave.Một master có thể điều khiển việc đọc và ghi.Một slave tạo bản sao sữ liệu từ master và chỉ đƣợc sử dụng cho việc đọc và backup (không có quyền ghi).Slave có khả năng chọn ra một master mới nếu master cũ bị hỏng.

Cân bằng tải: Mongo mở rộng theo chiều ngang bằng cách sử dụng sharding.Các lập trình viên chọn các khóa chia sẻ nhằm xác định dữ liệu sẽ đƣợc phân tán nhƣ thế nào.Dữ liệu sẽ đƣợc tách thành các khoảng dựa vào khóa và phân tán dọc theo các Shard

Lưu trữ file: Mongo lƣu trữ bằng file hệ thống, rất tốt cho việc cân bằng tải và nhân bản dữ liệu.Trong cá hệ thống nhiều máy, các file đƣợc phân phối và đƣợc sao ra rất nhiều lần giữa các máy một cách trong suốt.Do đó rất hiệu quả trong việc tạo ra một hệ thống cân bằng tải và dung lỗi tốt

2.7.2. CouchDB [4]

Đƣợc viết bằng Erlang với mục tiêu là tạo ra một cơ sở dữ liệu bền vững, chịu lỗi cao, dễ dàng trong việc sử dụng.Dùng cách lƣu trữ thông thƣờng là JSON với giấy phép Apache 2.0.

Với CouchDB thì mỗi một cơ sở dữ liệu là một tập các văn bản riêng biệt.Mỗi văn bản tự bảo quản chính nó và tự nó bao gồm mô hình của nó ( các trƣờng, loại của mỗi trƣờng).Mỗi một ứng dụng có thể thực thi rất nhiều cơ sở dữ liệu, ví dụ nhƣ chúng ta dùng một cơ sở dữ liệu để lƣu thông tin ngƣời dùng điện thoại và cái còn lại là lƣu trên server.Trên mỗi văn bản(bản ghi) còn bao gồm các thông tin về phiên bản, khiến cho việc dễ dàng đồng bộ các dữ liêu với nhau khi cơ sở dữ liệu bị mất kết nối một thời gian giữa các thiết bị.

CouchDB dử dụng MVCC (multi-Version Concurency Control ) để tránh việc deadlock database trong suốt khi ghi.Tức là nếu trong khi ghi dữ liệu, chúng ta vẫn có thể đọc dữ liệu vì CouchDB sinh ra một bản copy và chúng ta đọc trên bản copy đó.Sau khi ghi xong nó sẽ tiến hành nhập dữ liệu giữa các thiết bị và xóa bản ghi cũ đi.

17

Dùng giao thức HTTP theo Restful với cách thiết kế có khả năng chịu lỗi cao với dùng views đi kèm với map/reduce mang lại một tốc độ cao.Thích hợp cho rất nhiều các thiết bị khác nhau nhƣ máy chủ, máy bàn hay điện thoại thông minh (smartphone)

CouchDB đƣợc sử dụng tốt nhất cho các hệ thống thỉnh thoảng thay đổi dữ liệu nhƣ các hệ thống CMS, các hệ thống cho phép triển khai nhiều trang web.

Các đặc điểm chính của CouchDB:

Lưu trữ theo hướng văn bản (document storage)

Sử dụng ngữ nghĩa ACID: Cho phép điều khiển việc đồng bộ việc ghi và đọc cƣờng độ rất cao mà không lo bị xung đột.

Sử dụng Map/Reduce và các chỉ mục: Mỗi view đƣợc tạo ra bởi một hàm javascript mà thực thi cả 2 hành động map và reduce.Hàm đó khiến cho các văn bản kết hợp với nhau thành một giá trị đơn nhất và trả về kết quả đó.  Kiến trúc phân tán có nhân bản: CouchDB đƣợc thiết kế với khả năng

nhân bản 2 chiều với các dữ liệu offline.Tức là ta có thể chỉnh sửa dữ liệu offline và sau đó đồng bộ chúng sau khi có kết nối trở lại.

REST API: Tất cả dữ liệu đều có một địa chỉ duy nhất đƣợc lấy qua HTTP.Giao thức REST sử dụng các phƣơng thức của HTTP nhƣ GET, POST, PUT và DELETE với 4 chức năng cơ bản (Tạo, đọc, ghi, xóa, sửa)  Built for Offline: Có khả năng nhân bản dữ liệu cho từng thiết bị và tự

động đồng bộ dữ liệu khi thiết bị hoạt động trở lại

2.7.3. Cassandra[5]

Cassandra là một hệ quản trị cơ sở dữ liệu nguồn mở, đƣợc viết bằng Java với mục tiêu chính là trở thành Best of BigTable.Cũng nhƣ CouchDB, nó cũng thuộc tổ chức phần mềm Apache, đƣợc thiết kế với khả năng xử lý một khối dữ liệu cực lớn đƣợc trải ra trên rất nhiều máy chủ trong khi cung cấp một dịch vụ có tính sẵn sàng cao và không hỏng.Nó là một giải pháp NoSQL bƣớc đầu đƣợc phát triển bởi Facebook

Cassandra cung cấp một cấu trúc lƣu trữ theo dạng key/value với khả năng điều hƣớng tính nhất quán.Các khóa ánh xạ đến nhiều giá trị, cái mà đƣợc gộp thành các nhóm cột.Các nhóm cột đƣợc cố định khi cơ sở dữ liệu Cassandra đƣợc tạo ra, nhƣng các cột có

18

thể đƣợc thêm vào nhóm đó bất cứ lúc nào.Hơn nữa, các cột đƣợc thêm vào chỉ để làm các khóa xác định, bởi vậy các khóa khác nhau có thể có số lƣợng cột khác nhau. (adsbygoogle = window.adsbygoogle || []).push({});

Giá trị từ các nhóm cột cho mỗi một khóa đƣợc lƣu trữ cùng nhau.Điều đó khiến cho Cassandra là một hệ quản trị dữ liệu lai giữa hƣớng cột hoặc là hƣớng bản ghi.

Cassandra đƣợc dùng tốt nhất khi bạn ghi nhiều hơn bạn đọc, ví dụ ở đây là hệ thống logging nhiều nhƣ các mạng xã hội, hệ thống ngân hàng, tài chính chứng khoán).Với tốc độ ghi nhanh hơn tốc độ đọc, nó thích hợp cho việc phân tích dữ liệu thời gian thực.

Các đặc điểm nổi bật:

Tính phân cấp: Mỗi node trong một cụm có cùng một luật.Dữ liệu đƣợc phân tán dọc theo các cụm đó (do đó mỗi node lại có một dữ liệu khác nhau), nhƣng không có master bởi mỗi một node có thể phục vụ bất kì một yêu cầu nào.

Hỗ trợ nhân bản và nhân bản nhiều trung tâm dữ liệu: Việc mô phỏng có thể đƣợc cấu hình.Cassandra đƣợc thiết kế cho các hệ thống phân tán, có thể triển khai một số lƣợng lớn các node trên nhiều trung tâm dữ liệu khác nhau.Kiến trúc phân phối các đặc trƣng khóa của Casandra thích hợp cho việc triển khai nhiều chung tập dữ liệu.Sử lý dữ liệu dƣ thừa, đề phòng việc hỏng hóc.

Tính đàn hồi: Thông lƣợng đọc và ghi đều tăng tuyến tính khi các máy mới thêm vào vì giảm đƣợc thời gian chết hoặc bị gián đoạn giữa các ứng dụng

Tính dung lỗi:Dữ liệu đƣợc nhân bản ra thành nhiều node cho khả năng dung lỗi.Việc nhân bản giữa các trung tâm dữ liệu khác nhau cũng đƣợc hỗ trợ.Các node lỗi có thể đƣợc thay thế mà không mất thời gian chờ đợi.

Tính điều hướng nhất quán: Đọc và ghi đƣa ra một yêu cầu về tính nhất quán với việc "việc ghi không bao giờ bị lỗi"

Hỗ trợ Map/Reduce: Cassandra có tích hợp thêm cả Hadoop đồng nghĩa với việc hỗ trợ map/reduce

19

Có truy vấn theo ngôn ngữ riêng: CQL ( viết tắt của Cassandra Query Language) là một thay thể của SQL - like với các giao thức RPC truyền thống.Nó đƣợc điều khiển bởi Java và python

2.7.4. Membase [6]

Là một cơ sở dữ liệu nguồn mở với giấy phép Apache 2.0, nhƣ cassandra, là một hệ quản trị dữ liệu theo dạng key-value đƣợc tối ƣu cho việc lƣu trữ dữ liệu tƣơng tác với các ứng dụng web.Các ứng dụng đó phải phục vụ rất nhiều ngƣời dùng đồng thời: tạo, lƣu trữ thu hồi, tập hợp, thao tác và trình bày dữ liệu.Membase đƣợc thiết kế để cung cấp một cách đơn giản, nhanh chóng và dễ dàng để mở rộng dữ liệu key-value với độ trễ thấp và băng thông cao.Nó đƣợc thiết kế để phân cụm thành một máy tính duy nhất để triển khai qui mô lớn.

Membase đƣợc viết bằng C và Erlang tƣơng thích với memcache nhƣng có khả năng lƣu trữ lâu bền và phân tán.Với tốc độ thực thi rất nhanh (hơn 200 ngàn bản ghi / giây) bằng cách truy xuất dữ liệu bằng khóa và trên ram.Với việc truy xuất trên Ram thì hầu hết việc truy suất các toán tử đều đƣợc thực thi trong khoảng thời gian ít hơn 1ms..Ngoài ra còn cung cấp việc lƣu trữ dữ liệu lâu bền trên đĩa

Membase đƣợc sử dụng tốt nhất cho các ứng dụng yêu cầu tuy xuất dữ liệu với độ trễ cực thấp, tính đồng nhất cao và khả năng mở rộng cao.Ví dụ nhƣ các chƣơng trình gaming online, rất cần độ trễ truy xuất thấp

20

Chƣơng 3 TÌM HIỂU VỀ COUCHDB 3.1. CouchDB là gì

CouchDB là một hệ quản trị cơ sở dữ liệu NoSQL lƣu trữ theo hƣớng văn bản, nguồn mở, truy cập bằng cách sử dụng hệ thống hàm (API) bằng JSON RESTful, có khả năng khả chuyển cao trong việc tƣơng tác dữ liệu giữa các nút.Điều này khiến cho nó rất thích hợp trong các trƣờng hợp liên quan đến việc thống nhất và bền vững dữ liệu.Việc tích hợp các bản sao (ở đây là các view) làm cho nó là nền tảng lý tƣởng cho việc đồng bộ hóa dữ liệu giữa điện thoại di động, máy tính và máy chủ.Couchdb không có mô hình cố định.Thay vào đó nó lƣu trữ các bản ghi (hay văn bản) theo định dạng JSON, khá nhẹ và dễ hiểu cấu trúc dữ liệu, rất thích hợp cho việc lƣu trữ dữ liệu.

Thuật ngữ "Couch" là từ viết tắt của "Cluster Of Unreliable Commodity Hardware"(dịch là ) đã phản ánh mục tiêu của CouchDB là một cơ sở dữ liệu có khả năng mở rộng cực tốt, đƣa ra tính sẵn sàng và độ tin cậy cao ngay cả khi chạy trên phần cứng mà thƣờng dễ hỏng hoặc lỗi.

3.2. Lịch sử CouchDB

CouchDB ban đầu đƣợc viết bằng C++ bởi Damien Katz, trƣớc đây là làm ngƣời trong nhóm phát triển Lotus notes của IBM.Ban đầu nó ở dƣới dạng nguồn mở với giấy phép GNU ( GNU Genaral Public License).

Nhƣng vào tháng 2 năm 2008 thì nó đã trở thành một dự án của Apache và giấy phép đƣợc chuyển thành giấy phép Apache License.Nó cũng đƣợc chuyển sang nền tảng ErLang OTP với thiết kế nhằm việc tăng cƣờng khả năng chịu lỗi.

Vào đầu tháng 12 nhà sáng lập Damien Katz chuyển sang tập trung cho dự án CouchBase, về bản chất là CouchDB + membase.Đầu tháng 4 thì phiên bản CouchDB 1.2 đã ra đời với rất nhiều cải tiến mới về tốc độ thực thi và nhiều tính năng nổi bật khác.

3.3. Các đặc điểm của CouchDB

Là một cơ sở dữ liệu NoSQL, CouchDB cũng có các đặc điểm của một NoSQL nhƣ khả năng mở rộng, tốc độ cao.Ngoài ra CouchDB còn có các đặc điểm riêng sau

21

3.3.1. Document storage

Một máy chủ CouchDB chứa các cơ sở dữ liệu lƣu các văn bản.Mỗi văn bản là duy nhất trong cơ sở dữ liệu và CouchDB cung cấp một thƣ viện hàm RESTful HTTP cho việc đọc và cập nhât (Thêm, xóa, sửa) các văn bản.

CouchDB lƣu dữ liệu ở dạng văn bản với một hoặc nhiều cặp giá trị key/value bằng JSON.Các giá trị của trƣờng có thể đơn giản nhƣ là kiểu chuỗi, kiểu số hoặc ngày tháng, cũng có thể phức tạp hơn nhƣ kiểu danh sách thứ tự hoặc không thứ tự, hoặc là một mảng liên kết.Mỗi một văn bản trong cơ sở dữ liệu CouchDB có một ID duy nhất và không cần có cấu trúc.Tức là các văn bản(bản ghi) không cần phải tuân theo một cấu trúc nhƣ bắt buộc phải có một trƣờng nào đó và có thể thêm các trƣờng đặc biệt khác mà không phụ thuộc các bản ghi khác nhƣ bên RDBMs.

CouchDB .Văn bản thay đổi bởi các ứng dụng client theo trình tự nhƣ sau.Các ứng dụng client tải văn bản cần dùng, sử dụng chúng bằng cách tƣơng tác nó, sau đó là lƣu chúng vào cơ sở dữ liệu.Nếu có một máy khách khác cũng sửa cùng văn bản đó và lƣu thay đổi của họ trƣớc thì client sẽ nhận một thông báo lỗi vì xung đột không lƣu đƣợc.Để giải quyết xung đột này, thì phiên bản văn bản mới nhất sẽ đƣợc mở sửa lại một lần nữa và cố gắng cập nhật lại. (adsbygoogle = window.adsbygoogle || []).push({});

Việc cập nhật cho các văn bản là hoàn toàn.Tức là nếu đã cập nhật hoặc là cập nhật thành công hoặc là không đƣợc cập nhật.CouchDB không cho phép việc cập nhật văn bản một phần.

3.3.2. Map/Reduce Views và Indexes

Dữ liệu đƣợc lƣu trữ có cấu trúc sử dụng các views.Trong CouchDB, vỡi mỗi một view thì đƣợc cấu trúc bởi một hàm Javascript mà có nhiệm vụ ánh xạ (Map) các giá trị và ghép các giá trị (reduce) đó lại thành một văn bản duy nhất.CouchDB có thể đánh chỉ mục views và thực hiện các tác vụ y nhƣ với các văn bản khác nhƣ cập nhật(update), thêm(add), xóa(delete).

3.3.3. Kiến trúc phân tán với việc nhân bản [10] [11]

CouchDB là một mạng ngang hàng dựa trên hệ thống cơ sở dữ liệu phân tán.Bất cứ một máy nào trong các máy dùng CouchDB(Máy chủ và các máy client) đều có một "nhân bản" cơ sở dữ liệu độc lập, mà các ứng dựng tƣơng tác đầy đủ với cơ sở dữ liệu (truy vấn, thêm xóa sửa).Khi các ứng dụng kết nối lại (online) hoặc theo một chu kỳ, thì

22

dữ liệu sẽ đƣợc đồng bộ 2 chiều.Rất thích hợp với các ứng dụng web hiện nay.Ví dụ nhƣ google docs.Bạn có thể soạn thảo offline khi không kết nối mạng.Khi kết nối mạng.Thì sẽ đồng bộ lại dữ liệu với máy chủ.Vậy điều này sẽ dẫn đến một vấn đề là nếu có 2 hay nhiều máy chủ cùng thay đổi dữ liệu trên cùng một văn bản thì sao.Có thể sẽ xảy ra xung đột.Vậy CouchDB xử lý vấn đề này nhƣ thế nào?

Couch DB đƣợc xây dựng để phát hiện và xử lý những xung đột và quá trình sao chép là tăng dần và nhanh, sao chép văn bản nào thay đổi so với các nhân bản trƣớc.Điều này dẫn đến việc cập nhật các bản ghi và đồng bộ rất nhanh.

Mô hình nhân bản trong CouchDB là mô hình đƣợc thiết kế tốt để tăng tốc, thích hợp cho phân phối.Nền tảng nhân bản này cung cấp một tập các tính năng sau:

 Nhân bản từ Master đến máy Slave

 Đồng bộ nhân bản giữa máy 2 máy Master với nhau  Lọc các nhân bản

 Nhân bản tăng dần và 2 chiều (chỉ cập nhật các các văn bản thay đổi từ hai chiều)

 Quản lý các xung đột

Các đặc điểm nhân bản có thể đƣợc sử dụng để kết hợp tạp ra các giải pháp mạnh mẽ tới rất nhiều vấn đề trong ngành Công nghệ thông tin.Ngoài các tính năng nhân bản trên, thì ƣu thế của CouchDB về tính ổn định và khả năng mở rộng là một ƣu thế lớn.Nó đƣợc tăng cƣờng hơn nữa khi đƣợc viết trên ngôn ngữ lập trình Erlang.Erlang đƣợc xây dựng để hỗ trợ tối đa cho việc phân phối, khả năng tức thời, khả năng chịu lỗi cao và đã có uy tín trong nhiều năm trong việc xây dựng các hệ thống đáng tin cậy trong ngày công nghiệp viễn thông.Theo thiết kế thì ngôn ngữ Erlang và thời gian chạy đƣợc tận dụng lợi thế phần cứng có nhiều lõi CPU

3.3.4. REST API

CouchDB dùng chuẩn REST.Tất cả các mục có một định danh duy nhất đƣợc lấy thông qua giao thức HTTP.Chuẩn REST sử dụng các phƣơng thức của HTTP nhƣ POST,

Một phần của tài liệu PHÁT TRIỂN ỨNG DỤNG WEB (Trang 25 - 50)