NoSQL Overview
Vài năm trở lại đây, chúng ta đã chứng kiến sự trỗi dậy của rất nhiều loại cơ sở dữ liệu mới, còn được biết đến dưới tên NoSQL database, thứ đang thách thức sự thống trị của loại hình cơ sở dữ liệu có quan hệ truyền thống. Nhìn lại các cơ sở dữ liệu quan hệ truyền thống, chúng đã một thời gian dài ...
Vài năm trở lại đây, chúng ta đã chứng kiến sự trỗi dậy của rất nhiều loại cơ sở dữ liệu mới, còn được biết đến dưới tên NoSQL database, thứ đang thách thức sự thống trị của loại hình cơ sở dữ liệu có quan hệ truyền thống. Nhìn lại các cơ sở dữ liệu quan hệ truyền thống, chúng đã một thời gian dài là sự lựa chọn phổ biến trong ngành công nghiệp phần mềm bởi sự ổn định, transaction, các report cũng như các interface tiêu chuẩn, tuy nhiên cũng mang lại không ít bất cập.
NoSQL là gì
Trong một thời gian tôi đã nhầm lẫn NoSQL tương đương No SQL, sự thực nó có nghĩa là Not Only SQL - có nhiều hơn một cơ chế lưu trữ có thể sử dụng được dựa trên yêu cầu của hệ thống. Tuy không có một định nghĩa chính xác nào nhưng có thể nhận ra NoSQL thông qua một số điểm sau:
- Không sử dụng mô hình quan hệ
- Chạy tốt trên cluster
- Open-source
- Schema-less
Tại sao xuất hiện NoSQL
Gần như luôn luôn có một công đoạn convert cấu trúc dữ liệu của application và cấu trúc dữ liệu quan hệ trong database khi sử dụng các database truyền thống. Với NoSQL, quên đi công đoạn nản chí đó, thay vì sử dụng database như là điểm tích hợp, các hệ thống mới thường đóng gói luôn cùng với database và tích hợp dựa trên các service.
Sự phát triển của nền tảng Web cũng là một nhân tố sống còn trong lưu trữ dữ liệu với yêu cầu hỗ trợ những lượng lớn data chạy trên các cluster, trong khi đó cơ sở dữ liệu quan hệ nói KHÔNG với cluster.
Một số loại NoSQL
Key-Value databases
Key-value là một kiểu NoSQL đơn giản nhất. Client có thể lấy được giá trị từ key, đặt giá trị cho một key, hay xóa bỏ key khỏi cơ sở dữ liệu. Các cơ sở dữ liệu kiểu này chỉ lưu trữ các giá trị (value) mà không cần quan tâm hay biết đến giá trị đó chưá gì bên trong, ngược lại việc đó dành cho application. Mặt khác kiểu CSDL này luôn luôn sử dụng truy cập kiểu primary-key nên rất dễ dàng mở rộng cũng như đem lại hiệu năng tuyệt vời.
Một số key-value database có thể kể đến như Riak, Redis(thường được sử dụng như Data Structure server), Memcached, Berkeley DB, upscaledb(đặc biệt thích hợp với hệ thống nhúng),...
Các key-value database đa phần được thiết kế khá khác nhau. Ví như, dữ liệu trong Memcached là không bền vững trong khi Riak là có, những đặc điểm này quyết định key-value database nào nên được chọn khi triển khai một giải pháp cho hệ thống.
Document databases
Kiểu cơ sở dữ liệu này hỗ trợ lưu trữ các "document" dưới nhiều định dạng khác nhau như XML, JSON, BSON. Document database như MongoDB còn cung cấp cả một hệ query language và construct phong phú như index, cho phép người dùng có khả năng dễ dàng chuyển đổi sang CSDL quan hệ nếu cần.
Một số document database nổi tiếng như MongoDB, CouchDB, Terrstore, OrientDB, RavenDB
Column family stores
Column-family databases store data in column families as rows that have many columns associated with a row key (Figure 10.1). Column families are groups of related data that is often accessed together. For a Customer, we would often access their Profile information at the same time, but not their Orders.
Column-family database lưu trữ dữ liệu trong một tập hợp các cột, tập hợp này được xác định thông qua một khoá hàng (row key). Các cột trong cùng một hàng lưu trữ các dữ liệu liên quan và thường được truy xuất cùng nhau.
Mỗi column-family có thể coi như một hàng trong cơ sở dữ liệu quan hệ nơi một khóa xác định một hàng và mỗi hàng chứa nhiều cột. Tuy nhiên điểm đặc biệt của CSDL kiểu này đó là mỗi hàng không nhất thiết phải chứa các cột giống nhau, và tại bất kì thời điểm nào ta có thể thêm một cột vào một hàng bất kì mà không phải thêm nó vào các hàng còn lại.
Cassandra là một trong nhưng column-database phổ biến, ngoài ra còn có HBase, Hypertable và Amazon DynamoDB.
Graph Databases
Graph database cho phép bạn lưu các thực thể cũng như quan hệ giữa các thực thể với nhau. Thực thể (entity) còn được biết đến như các nút (node) chứa các thuộc tính. Các quan hệ hay cạnh cũng có thể chứa các thuộc tính và có ý nghĩa định hướng, các nút được tổ chức bởi các quan hệ cho phép tìm ra hình mẫu quan tâm giữa các nút. Sự tổ chức của đồ thị cho phép dữ liệu chỉ cần lưu một lần và rồi có thể được hiểu theo nhiều cách khác nhau dựa trên các mối quan hệ.
Thông thường trong CSDL quan hệ, khi muốn lưu một kiểu quan hệ đơn, ví dụ như "ai là quản lý của bạn", bất cứ một sự thêm bớt một quan hệ khác vào hỗn hợp này đều dẫn đến hàng loạt sự thay đổi của schema cũng như dịch chuyển dịch liệu. Trong CSDL graph, việc duyệt qua các điểm giao hay các quan hệ diễn ra rất nhanh. Các quan hệ giữa các nút không cần phải được tính toán tại thời điểm truy vấn nhưng nó luôn tồn tại bền vững.
Các nút có thể có nhiều kiểu quan hệ khác nhau, cho phép biểu diễn quan hệ giữa các nút và các quan hệ phụ như category, path, time-trees, quad-trees dành cho việc index hay sắp xếp các danh sách liên kết. Các nút có thể chứa bao nhiêu quan hệ tùy ý, do đó, nhiều quan hệ khác nhau có thể cùng được biểu diễn trong một CSDL graph và khả năng mở rộng của nó dường như là vô tận.
Tại sao lại sử dụng NoSQL
Xu hướng thiết kế các ứng dụng chia ra thành các dịch vụ nhỏ đang là xu hướng tất yếu, việc sử dụng các CSDL có khả năng thích ứng với các yêu cầu kỹ thuật cũng có thể thay đổi dựa trên yêu cầu của từng dịch vụ chính là đòn bẩy giúp đưa NoSQL được sử dụng rộng rãi hơn. Hơn nữa phần lớn cá CSDL NoSQL đều là open-source và miễn phí, do đó dễ dàng cho phép người dùng kiểm thử cũng như xây dựng môi trường test để đánh giá hiệu năng trước khi quyết định sử dụng nó trong hệ thống.
Về mặt hiệu suất, NoSQL nâng cao khả năng truy xuất dữ liệu dựa trên sự kết hợp của công nghệ xử lý khối lượng dữ liệu lớn, giảm độ trễ cũng như tăng sức chứa.
Tham khảo
https://www.thoughtworks.com/insights/blog/nosql-databases-overview
http://dataconomy.com/sql-vs-nosql-need-know/