Chúng ta đang sống trong thời đại Web 2.0 bùng nổ, các mạng dịch vụ dữ liệu cho phép mọi người chia sẻ hàng tỷ nội dung trên nền Web. Khối lượng xử lý dữ liệu đang là rất lớn và nhanh chóng vượt qua giới hạn phần cứng cần để giải quyết. Tuy các hệ cơ sở dữ liệu quan hệ (RDBMS) vẫn được sử dụng để giải quyết lượng dữ liệu này nhưng nó tỏ ra có nhiều mối nguy hại cho những xử lý của nó.
Trang 1MỤC LỤC
Trang 2MỞ ĐẦU
Chúng ta đang sống trong thời đại Web 2.0 bùng nổ, các mạng dịch vụ dữ liệucho phép mọi người chia sẻ hàng tỷ nội dung trên nền Web Khối lượng xử lý dữliệu đang là rất lớn và nhanh chóng vượt qua giới hạn phần cứng cần để giảiquyết Tuy các hệ cơ sở dữ liệu quan hệ (RDBMS) vẫn được sử dụng để giải quyếtlượng dữ liệu này nhưng nó tỏ ra có nhiều mối nguy hại cho những xử lý của nó Hầu hết các dữ liệu được lưu trữ phân tán trên nhiều máy chủ khác nhau CácRDBMS hiện vẫn xử lý khá tốt nhiệm vụ lưu trữ dữ liệu tập trung, nhưng chính vìtính tập trung này lại tạo ra khó khăn cho hệ thống nếu muốn mở rộng Việcngười sử dụng thường xuyên tìm cách phi chuẩn hoá dữ liệu (bằng cách giảm sốjoin cần thiết giữa các bảng) vô hình chung đã phá vỡ thiết kế cơ sở dữ liệu(CSDL) ban đầu Hơn nữa, các giao dịch phân tán trên RDBMS thường rất dễ sinh
ra hiện tượng nút cổ chai, việc xử lý chúng gặp tương đối nhiều khó khăn khi cácRDBMS không có sự hỗ trợ trực tiếp cho những tình huống này Rất nhiều các giảipháp được đưa ra, và NoSQL là một trong những giải pháp đó
NoSQL là một thế hệ cơ sở dữ liệu mới, giảm thiểu tối đa các phép tính toán, tác
vụ đọc-ghi liên quan kết hợp với xử lý theo lô đảm bảo yêu cầu xử lý dữ liệu khốilượng lớn và rất lớn Hệ CSDL này có thể lưu trữ, xử lý từ lượng rất nhỏ đến hàngpetabytes dữ liệu với khả năng chịu tải tốt, khả năng chịu lỗi cao nhưng lại khôngđòi hỏi tài nguyên phần cứng quá cao
Hiện nay, có khoảng 150 hệ cơ sở dữ liệu phân tán NoSQL(2) và còn tiếp tục tăng.Một số hệ quản trị cơ sở dữ liệu đại diện cho NoSQL gồm có: Cassandra,MongoDB, SimpleDB, BigTable, CouchDB… Để tìm hiểu rõ hơn về NoSQL, nhómxin trình bày về một trong những hệ cơ sở dữ liệu phân tán nổi bật, được bắt đầubởi Facebook và tiếp tục được phát triển bởi Apache cho tới ngày nay –Cassandra
Trang 3CHƯƠNG I – Thuật ngữ NOSQL
1 NoSQL là gì?
a) Thuật ngữ
NoSQL được sử dụng như một thuật ngữ chung cho tất cả các cơ sở dữ liệukhông tuân theo quy tắc của các cơ sở dữ liệu quan hệ (RDBMS) phổ biến vàthường liên quan đến việc xử lý và thao tác với một lượng lớn dữ liệu
NoSQL không phải là một sản phẩm hay một công nghệ duy nhất, nó đại diện chomột lớp các sản phẩm liên quan đến việc lưu trữ và xử lý dữ liệu không theo quytắc RDBMS
b) Lịch sử ra đời của NoSQL Tại sao lại sử dụng NoSQL?
Cơ sở dữ liệu NoSQL không hẳn là mới Ngay từ chiếc máy tính đầu tiên ra đời,ngay từ khi có sự lưu trữ và xử lý dữ liệu trên máy tính thì cơ sở dữ liệu NoSQL đãđược manh nha Nhưng khi dữ liệu còn chưa thực sự lớn, đòi hỏi về xử lý dữ liệucũng chưa thật sự nhiều thì các hệ cơ sở dữ liệu quan hệ vẫn thể hiện được thếmạnh của mình và NoSQL chưa thực sự được quan tâm
Việc NoSQL được thừa nhận gần đây là do sự phát triển ồ ạt của các ứng dụngInternet trong thời đại Web 2.0, dẫn đến việc gia tăng nhanh về kích thước dữliệu và ngày càng yêu cầu cao về khả năng truy xuất dữ liệu Với việc gia tăngnhanh về kích thước dữ liệu như vậy nên hầu hết các dữ liệu được lưu trữ phântán trên nhiều máy chủ khác nhau vì hạn chế của thiết bị lưu trữ Các RDBMShiện vẫn xử lý khá tốt nhiệm vụ lưu trữ dữ liệu tập trung, nhưng chính vì tính tậptrung này lại tạo ra khó khăn cho hệ thống nếu muốn mở rộng Việc người sửdụng thường xuyên tìm cách phi chuẩn hoá dữ liệu (bằng cách giảm số join cầnthiết giữa các bảng) vô hình chung đã phá vỡ thiết kế cơ sở dữ liệu (CSDL) banđầu Hơn nữa, các giao dịch phân tán trên RDBMS thường rất dễ sinh ra hiệntượng thắt nút cổ chai, việc xử lý chúng gặp tương đối nhiều khó khăn khi cácRDBMS không có sự hỗ trợ trực tiếp cho những tình huống này Đa số các hệ cơ
sở dữ liệu NoSQL được hình thành trong thế giới của việc xử lý song song vàtránh được hiện tượng này Vì vậy, hệ cơ sở dữ liệu NoSQL nổi lên như một giảipháp sáng giá đáp ứng được tình huống này
Khởi đầu từ tập đoàn cổ phần Inktomi với công cụ tìm kiếm HotBot, cơ sở dữ liệuNoSQL bắt đầu được hình thành nhiều hơn và chất lượng hơn Đỉnh cao của việcphát triển NoSQL là việc Google chính thức sử dụng NoSQL BigTable vào công cụtìm kiếm nổi tiếng của mình Vào năm 2009, Eric Evans, nhân viên của Rackspacegiới thiệu lại thuật ngữ NoSQL trong 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ệ database mới:distributed (phân tán) + non-relational (không ràng buộc)
Trang 4c) Định nghĩa
Thế hệ hệ cơ sở dữ liệu kế tiếp là một thế hệ cơ sở dữ liệu non-relational (khôngràng buộc), distributed (phân tán), open source, horizontal scalable (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àngpetabytes dữ liệu trong hệ thống có độ chịu tải, lỗi cao với những đòi hỏi về tàinguyên phần cứng thấp
Một số đặc điểm nhận dạng cho thế hệ database mới này bao gồm: schema-free,
hỗ trợ mở rộng (dọc/ngang) dễ dàng, API đơn giản, eventual consistency (nhấtquán cuối) và/hoặc transactions hạn chế trên các thành phần dữ liệu đơn lẻ,không giới hạn không gian dữ liệu,
Cơ sở dữ liệu NoSQL đặc biệt phổ dụng trong thời kỳ Web 2.0 (1) bùng nổ, nơi cácmạng dịch vụ dữ liệu cộng đồng cho phép người dùng tạo hàng tỷ nội dung trênweb Do đó, dữ liệu lớn rất nhanh vượt qua giới hạn phần cứng và cần phải giảiquyết bằng bài toán phân tán
Số lượng các hệ cơ sở dữ liệu theo NoSQL đang ngày càng nhiều Hiện nay có tất
cả 150 hệ cơ sở dữ liệu NoSQL (2) Một số hệ cơ sở dữ liệu tiêu biểu như:MongoDB, CouchDB, BigTable, Cassandra…
d) Một số thuật ngữ liên quan
• Non-relational: relational - ràng buộc - thuật ngữ sử dụng đến các mốiquan hệ giữa các bảng trong cơ sở dữ liệu quan hệ (RDBMs) sử dụng môhình khóa gồm 2 loại khóa: khóa chính và khóa phụ (primary key + foreignkey) để ràng buộc dữ liệu nhằm thể hiện tính nhất quán dữ liệu từ các
• Eventual consistency (nhất quán cuối): tính nhất quán của dữ liệu khôngcần phải đảm bảo ngay tức khắc sau mỗi phép write Một hệ thống phântán chấp nhận những ảnh hưởng theo phương thức lan truyền và sau mộtkhoảng thời gian (không phải ngay tức khắc), thay đổi sẽ đi đến mọi điểmtrong hệ thống, tức là cuối cùng (eventually) dữ liệu trên hệ thống sẽ trởlại trạng thái nhất quán
• Vertical scalable (khả năng mở rộng chiều dọc): Khi dữ liệu lớn về lượng,phương pháp tăng cường khả năng lưu trữ và xử lý bằng việc cải tiến phầnmềm và cải thiện phần cứng trên một máy tính đơn lẻ được gọi là khảnăng mở rộng chiều dọc Ví dụ việc tăng cường CPUs, cải thiện đĩa cứng,
Trang 5bộ nhớ trong một máy tính, cho DBMs nằm trong phạm trù này Khảnăng mở rộng chiều dọc còn có một thuật ngữ khác scale up.
• Horizontal scalable (khả năng mở rộng chiều ngang): Khi dữ liệu lớn vềlượng, phương pháp tăng cường khả năng lưu trữ và xử lý là dùng nhiềumáy tính phân tán Phân tán dữ liệu được hỗ trợ bởi phần mềm tức cơ sở
dữ liệu Trong khi giá thành phần cứng ngày càng giảm, tốc độ xử lý, bộnhớ ngày càng tăng thì horizontal scalable là một lựa chọn đúng đắn Hàngtrăm máy tính nhỏ được chập lại tạo thành một hệ thống tính toán mạnhhơn nhiều so với vi xử lý RISC truyền thống đơn lẻ Mô hình này tiếp tụcđược hỗ trợ bởi các công nghệ kết nối Myrinet và InfiniBand Từ đó chúng
ta có thể quản lý, bảo trì từ xa, xây dựng batch procession (xử lý đồng loạttập lệnh) tốt hơn Do những đòi hỏi về tốc độ xử lý I/O cao, lượng cực lớn
dữ liệu, scale horizontally sẽ thúc đẩy các công nghệ lưu trữ mới pháttriển giống như object storage devices (OSD)
• Deployment Flexibility (Triển khai linh hoạt): việc bổ sung thêm/loại bỏ cácnode, hệ thống sẽ tự động nhận biết để lưu trữ mà không cần phải canthiệp bằng tay Hệ thống cũng không đòi hỏi cấu hình phần cứng mạnh,đồng nhất
• Durability (Lưu trữ tốt): dữ liệu có thể tồn tại trong bộ nhớ máy tínhnhưng đồng thời cũng được lưu trữ lại đĩa cứng
2 Phân loại NoSQL
Tính cho đến hiện tại có 150 cơ sở dữ liệu NoSQL (http://nosql-database.org/).Dựa theo đặc điểm và thuộc tính của một số loại cơ sở dữ liệu NoSQL, có thể chiachúng ra làm 4 loại Thực chất thì việc chia chúng ra làm 4 loại như vậy chỉ mangtính tương đối, dựa trên những đặc điểm rất khác biệt vì trên tổng thể, chúngvẫn mang tính chất khá giống nhau
a) Dạng Column Families Stores
Google’ BigTable khởi xướng một mô hình mà dữ liệu được lưu trữ định hướngcột Điều này trái ngược với định hướng dòng như trong RDBMs Lưu trữ theocách định hướng cột cho phép dữ liệu được lưu trữ một cách hiệu quả Phươngpháp này tránh lãng phí không gian lưu trữ khi lưu trữ các giá trị null bằng cáchkhông lưu trữ cột khi giá trị của cột đó không tồn tại (bằng null)
Mỗi đơn vị dữ liệu có thể được coi như một tập hợp các cặp khoá – giá trị, trong
đó mỗi đơn vị được xác định bằng một định danh chính, giống như là khoá chính,
và có xu hướng được gọi là row-key Các đơn vị được sắp xếp và chỉ dẫn dựa trênrow-key Dưới đây là 1 ví dụ về row-key:
Thông tin của 1 cá nhân được cho như sau:
first_name: John
Trang 6Chỉ có cặp khoá – giá trị hợp lệ được lưu trữ Một column-family ‘name’ với hàngfirst_name và last_name Một column-family khác ‘location’ với zip_code.Column-family ‘profile’ với hàng gender Trong một lưu trữ hướng cột nhưBigtable, dữ liệu được lưu trên cơ sở column-family Column-family được địnhnghĩa khi cấu hình hoặc lúc bắt đầu chạy Bản thân các cột không cần định nghĩahoặc trình bày Ngoài ra, các cột có khả năng lưu trữ bất kỳ loại dữ liệu nào nhưmột dữ liệu tồn tại trong một mảng bytes.
Một lưu trữ cơ bản gồm 3 loại: name, location và profile Mỗi loại các cặp giá trị với giá trị hợp lệ được lưu trữ
khoá-Column-family ‘name’ với các giá trị :
Trên thực tế, các column-family không thể phân tách cho một hàng nhất định Tất
cả các dữ liệu liên quan đến row-key được lưu trữ với nhau Column-family hoạtđộng như là một khoá cho các cột nó chứa và row-key như là khoá cho các dữliệu
Dữ liệu được lưu trữ theo trình tự liên tiếp Một dữ liệu khi được điền vào 1node, nó sẽ được chia ra làm nhiều node Các dữ liệu sẽ được sắp xếp và chỉ dẫn
Trang 7không chỉ trên mỗi node mà còn trên khắp các node, cung cấp 1 tập hợp dữ liệulớn liên tục có trình tự Dữ liệu tồn tại được chịu lỗi bằng cách tạo ra 3 bản saocủa mỗi bộ dữ liệu được duy trì Hầu hết các mô hình tận dụng một hệ thống tậptin có phân phối để lưu dữ liệu vào không gian lưu trữ Hệ thống này cho phép
dữ liệu được lưu trữ trong 1 cụm máy
Cấu trúc sắp xếp có chỉ dẫn làm cho việc tìm kiếm dữ liệu cực kì hiệu quả Truycập dữ liệu sẽ ít ngẫu nhiên, nhất thời đồng thời tìm kiếm cũng đơn giản như việctìm kiếm các node trong chuỗi chứa dữ liệu Dữ liệu được chèn vào cuối danhsách Cập nhật dữ liệu thường sẽ là thêm một phiên bản mới chứ không phải là
đè lên dữ liệu đã có Điều này có nghĩa một vài phiên bản của mỗi ô sẽ được duytrì tại mọi thời điểm Đặc điểm của mỗi phiên bản có thể được cấu hình
Một số cơ sở dữ liệu NoSQL tiêu biểu cho dạng này: Hadoop/Hbase, Cassandra,Hypertable, Cloudata,…
b) Dạng Key-Values Stores
Một bảng băm hay một danh sách liên kết là cấu trúc dữ liệu đơn giản nhất cóthể chứa tập hợp các cặp khoá – giá trị (key-values) Cấu trúc dữ liệu như vậy làrất phổ biến vì chúng cung cấp không gian lưu trữ một cách rất hiệu quả, độphức tạp trung bình O(1) của thuật toán truy cập dữ liệu Khoá của 1 cặp key-values là giá trị duy nhất trong các bộ và dễ dàng tìm kiếm để truy cập dữ liệu.Cặp key-values có nhiều kiểu: một số giữ dữ liệu trong bộ nhớ RAM và một sốcung cấp khả năng để duy trì dữ liệu trong disk Cặp key-values có thể được phânphối và tổ chức tại một cụm nút Một kiểu lưu trữ key-values khác nữa nhưngđược sử dụng phổ biến là lưu trữ trong bộ nhớ cache Một bộ nhớ cache cungcấp 1 ảnh chụp của bộ nhớ dữ liệu được sử dụng nhiều trong một ứng dụng.Mục đích của bộ nhớ cache và giảm thao tác đọc-ghi trực tiếp trên cơ sở dữ liệuđược lưu trữ “cứng” tại ổ đĩa Bộ nhớ đệm cache là một chiến lược phổ biếnđược sử dụng ở mọi cấp của một phần mềm máy tính để tăng hiệu suất Hệ điềuhành, cơ sở dữ liệu, các thành phần trung gian và ứng dụng đều sử dụng bộ nhớđệm
Một số cơ sở dữ liệu NoSQL tiêu biểu cho dạng này: DynamoDB, Redis,FoundationDB, BerkeleyDB, Voldermort,…
c) Dạng Document Stores
Document Stores (hay Document Databases) không phải là một hệ thống quản lývăn bản Các nhà phát triển khi bắt đầu với NoSQL thường nhầm lẫn cơ sở dữliệu văn bản với hệ thống quản lý nội dung Các giá trị trong Document Storesbao gồm cấu trúc key-values khá lỏng lẻo, điển hình là JSON (JavaScript ObjectNotatin) và không có tài liệu hay bảng tính (mặc dù chúng có thể được lưu trữ)
Trang 8Document Stores xử lý toàn bộ một bản ghi một lúc và tránh việc cắt nhỏ bản ghithành các giá trị key-values cấu thành nên nó Ở mức độ cao hơn, nó cho phépđặt các bản ghi có chung đặc điểm vào một bộ dữ liệu duy nhất DocumentStores cho phép lập chỉ mục cho các bản ghi trên cơ sở không chỉ đích danh khoáchính mà là tất cả các chỉ mục bên trong của nó
Một số cơ sở dữ liệu NoSQL tiêu biểu cho dạng này: MongoDB, CouchDB,Couchbase,…
d) Dạng Graph Databases
Các dạng được liệt kê phía trên là các dạng chính của các cơ sở dữ liệu NoSQLhiện có Số ít còn lại là cơ sở liệu dạng biểu đồ và cơ sở dữ liệu lưu trữ dưới dạngXML Chúng cũng được coi là cơ sở dữ liệu NoSQL
Một số ít cơ sở dữ liệu NoSQL thuộc dạng này tiêu biểu như: Neo4j và FlockDB
Trang 9CHƯƠNG II – Kiến trúc NoSQL
1 Sơ lược
Các RDBMs hiện tại đã bộc lộ những yếu kém như việc đánh chỉ mục một lượnglớn dữ liệu, phân trang, hoặc phân phối luồng dữ liệu media (phim, ảnh,nhạc, ) Cơ sở dữ liệu quan hệ được thiết kế cho những mô hình dữ liệu nhỏthường xuyên đọc viết trong khi các Social Network Services lại có một lượng dữliệu cực lớn và cập nhật liên tục do số lượng người dùng quá nhiều ở một thờiđiểm Thiết kế trên Distributed NoSQL giảm thiểu tối đa các phép tính toán, I/Oliên quan kết hợp với batch processing đủ đảm bảo được yêu cầu xử lý dữ liệucủa các mạng dịch vụ dữ liệu cộng đồng này Facebook, Amazon là những ví dụđiển hình
Về cơ bản, các thiết kế của NoSQL lựa chọn mô hình lưu trữ tập dữ liệu theo cặpgiá trị key-value Khái niệm node được sử dụng trong quản lý dữ liệu phân tán.Với các hệ thống phân tán, việc lưu trữ có chấp nhận trùng lặp dữ liệu Một yêucầu truy vấn tới data có thể gửi tới nhiều máy cùng lúc, khi một máy nào nó bịchết cũng không ảnh hưởng nhiều tới toàn bộ hệ thống Để đảm bảo tính thờigian thực trong các hệ thống xử lý lượng lớn, thông thường người ta sẽ tách biệt
cơ sở dữ liệu ra làm 2 hoặc nhiều cơ sở dữ liệu Một cơ sở dữ liệu nhỏ đảm bảovào ra liên tục, khi đạt tới ngưỡng thời gian hoặc dung lượng, cơ sở dữ liệu nhỏ
sẽ được gộp (merge) vào cơ sở dữ liệu lớn có thiết kế tối ưu cho phép đọc (readoperation) Mô hình đó cho phép tăng cường hiệu suất I/O - một trong nhữngnguyên nhân chính khiến performance trở nên tốt hơn so với SQL truyền thống
2 Kiến trúc lưu trữ các NoSQL
a) NoSQL Column Families
Trước tiên, một cơ sở dữ liệu dạng Column Families thường áp đặt một lược đồ(schema) đơn giản trước và có thể dễ dàng tạo thêm các cột mới Trong mộtNoSQL Column Families điển hình, người dùng thường có giới hạn trước về cáccolumn-family và thường thì nó không phải là một cột Một column-family là mộttập hợp của các cột nhỏ hơn, thường thì các cột nhỏ này có quan hệ logic vớinhau Chúng cũng được lưu trữ vật lý cùng nhau
Trong một NoSQL Column Families, các column-family giống như các cột ở hệthống RDBMS Chúng cùng được định nghĩa trước khi dữ liệu được lưu trữ vàthường ít thay đổi trong quá trình cập nhật Điểm khác biệt giữa chúng là khi khaibáo cột bên hệ thống RDBMS thì phải khai báo loại dữ liệu có thể lưu trữ (INT,VARCHAR, TEXT,…), còn NoSQL Column Families không có giới hạn như vậy Hơnnữa, ở NoSQL Column Families không lưu trữ giá trị null, còn bên hệ thốngRDBMS thì có
Trang 10Trong lưu trữ vật lý, dữ liệu không được lưu trữ theo một “bảng” duy nhất màđược lưu thành nhiều column-family trong bảng Cơ sở dữ liệu được thiết kếthích ứng với quy mô dữ liệu cực lớn (hàng triệu cột * hàng tỉ hàng) Do kíchthước vậy nên một bảng có thể nằm ở nhiều máy chủ khác nhau, nhưng cùngđược xác định bởi một row-key duy nhất.
Ví dụ: Một bảng với số dữ liệu như sau:
Table ‘people’{
“row_key_1” : {
“name” : {
},
“location” : {
},
“preferences” : {
}},
“row_key_2” : {
“name” : {
},
“location” : {
},
“preferences” : {
}},
“row_key_3” : {
“name” : {
},
“location” : {
},
“preferences” : {
}}
}
Trang 11Sẽ được lưu trữ vật lý dạng:
{
“row_key_1” : {
“name” : {
},
“row_key_2” : {
“name” : {
}
“row_key_3” : {
“name” : {
}
}
b) NoSQL Document Stores
Collections trong Document Stores được coi như bảng bên các hệ thống RDBMS,tuy nhiên các Collections không có các ràng buộc về mặt quan hệ như các bảngRDBMS Trong các Collections này lưu trữ các document (tương tự như bản ghibên hệ thống RDBMS) Các document này có thể là tuỳ ý sắp xếp lại với nhauthành một Collections, nhưng thường thì trong thực tế, các document có mộtphần tương đương sẽ được lưu cùng một Collections để việc lập chỉ mục trở nênhiệu quả hơn
Mỗi document được lưu dưới dạng dữ liệu JSON (ở MongoDB là dạng BSON –Binary JSON) và thường thì chúng hỗ trợ mọi kiểu dữ liệu thường gặp
Các NoSQL Document Stores hầu hết tuân theo định dạng trên để lưu trữ dữ liệunhưng với mỗi cơ sở dữ liệu lại có một cách lưu trữ vật lý khác nhau
MongoDB là một ví dụ điển hình cho NoSQL Document Stores và tuân thủ chínhxác những định dạng trên MongoDB lưu trữ vật lý dạng memory-mapped Mộttập tin memory-mapped là một phân đoạn của bộ nhớ ảo, có vai trò tương tácgián tiếp (tham chiếu) với tập tin nằm trên ổ cứng Điều này thực sự cải thiện tốc
độ đọc-ghi so với đọc ghi thông thường Công nghệ này thực sự được áp dụng rấtrộng rãi, từ nhân hệ điều hành đến các ứng dụng khác, được gọi là bộ nhớ cache
c) NoSQL Key-Values Stores
3 Đặc điểm chung
• High Scalability: Gần như không có một giới hạn cho dữ liệu và người dùngtrên hệ thống
Trang 12• High Availability: Do chấp nhận sự trùng lặp trong lưu trữ nên nếu mộtnode (commodity machine) nào đó bị chết cũng không ảnh hưởng tớitoàn bộ hệ thống.
• Atomicity: Độc lập data state trong các operation
• Consistency: chấp nhận tính nhất quán yếu, cập nhật mới không đảm bảorằng các truy xuất sau đó thấy ngay được sự thay đổi Sau một khoảngthời gian lan truyền thì tính nhất quán cuối cùng của dữ liệu mới đượcđảm bảo
• Durability: dữ liệu có thể tồn tại trong bộ nhớ máy tính nhưng đồng thờicũng được lưu trữ lại đĩa cứng
• Deployment Flexibility: việc bổ sung thêm/loại bỏ các node, hệ thống sẽ
tự động nhận biết để lưu trữ mà không cần phải can thiệp bằng tay Hệthống cũng không đòi hỏi cấu hình phần cứng mạnh, đồng nhất
• Modeling flexibility: Key-Value pairs, Hierarchical data (dữ liệu cấu trúc),Graphs
• Query Flexibility: Multi-Gets, Range queries (load một tập giá trị dựa vàomột dãy các khóa)
4 NoSQL với các ngôn ngữ lập trình bậc cao
Sử dụng giao diện dòng lệnh là một cách nhanh và hiệu quả với các truy vấn cơ
sở dữ liệu NoSQL, thế nhưng trong một dự án thực tế, không phải ai cũng có thể
sử dụng nhưng giao diện này một cách thông thạo và nhuần nhuyễn mà cần tớimột giao diện trực quan Chính vì điều này, nên có rất nhiều các thư viện hỗ trợthực thi NoSQL với các ngôn ngữ lập trình bậc cao như Java, Python, Ruby hayPHP,… Những thư viện này cung cấp những cách giao tiếp cơ bản đến nâng caocho việc truy vấn tới cơ sở dữ liệu NoSQL
a) Framework Thrift
Thrift là một framework phát triển ứng dụng mã nguồn mở Nó giống như mộtứng dụng nền để xây dựng các dịch vụ giao tiếp từ NoSQL với nhiều ngôn ngữ lậptrình khác nhau Với mỗi ngôn ngữ lập trình khác nhau, cần phải cấu hình Thrifttheo một cách khác nhau
Thrift được xây dựng bởi Facebook và sau đó được mở rộng bởi cộng đồng mãnguồn mở trên thế giới Thrift được viết bằng ngôn ngữ C
Việc sử dụng Thrift đem đến khá nhiều hiệu quả do khả năng tương thích vớinhiều ngôn ngữ bậc cao Nhưng không nhất thiết phải sử dụng Thrift vì các cơ sở
dữ liệu NoSQL có hỗ trợ các ngôn ngữ lập trình cụ thể
b) NoSQL với Java
Java là một ngôn ngữ lập trình rất phổ biến và có độ ứng dụng rộng rãi Hầu hếtcác cơ sở dữ liệu NoSQL hỗ trợ Java, trong đó có MongoDB và Hbase
Trang 13MongoDB chính thức hỗ trợ Java bằng cách xây dựng một thư viện Thư viện vàtài liệu về thư viện này có sẵn trên địa chỉhttp://mongodb.org/display/DOCS/Java+Language+Center Thư viện này đượcđóng gói dưới dạng jar Sau khi tải về, chỉ cần thêm đường dẫn tới thư viện nàyvào trong classpath của ứng dụng là có thể sử dụng Dưới đây là một ví dụ đơngiản về việc truy xuất tới cơ sở dữ liệu MongoDB với Java.
javaMongoDBClient.javaimport com.mongodb.DB;
public void init() throws Exception {
m = new Mongo( “localhost” , 27017 );
db = m.getDB( “mydb” );
coll = db.getCollection(“logdata”);
}
public void getLogData() {
DBCursor cur = coll.find();
while(cur.hasNext()) {
System.out.println(cur.next());
}}
public static void main(String[] args) {
}
Trang 14c) NoSQL với Python
Python là một ngôn ngữ lập trình mạnh và khá mềm dẻo Ta hoàn toàn có thể sửdụng Python trong việc truy vấn đến các cơ sở dữ liệu NoSQL bằng các thư viện
mà chính các cơ sở dữ liệu này hỗ trợ
Ví dụ như với NoSQL Apache Cassandra, có thể sử dụng thư viện Pycassa để thựchiện truy vấn Thư viện này được cung cấp trực tiếp tại tranghttp://github.com/pycassa/pycassa Sau khi tải về và cài đặt vào trong thư việncủa Python, ta có thể dễ dàng sử dụng thư viện này bằng cách:
import pycassa
Một số câu lệnh truy vấn khác, như:
• Tạo kết nối đến cơ sở dữ liệu
Giống như Python, Apache Cassandra cũng hỗ trợ PHP với một thư viện có tênphpcassa Thư viện này được phân phối dạng mã nguồn mở tại địa chỉhttp://github.com/hoan/phpcassa
Với phpcassa, việc truy vấn lấy toàn bộ dữ liệu trong cơ sở dữ liệu được trình bàydưới đây: