Thứ Ba, 26 tháng 1, 2016

Big Data #5 – NoSQL là gì?


Discussion in 'Big Data' started by phamthanhnhan14, Nov 10, 2014.
  1. phamthanhnhan14

    phamthanhnhan14 Active Member

    NoSQL là gì?

    NoSQL là viết tắt cho Not Relational SQL hay Not Only SQL. Nhiều người nghĩ rằng NoSQL có nghĩa là No SQL, là không đúng – cả hai đều phát âm giống nhau nhưng nghĩa hoàn toàn khác nhau. NoSQL dùng SQL nhưng nó dùng nhiều hơn cả SQL để đạt được mục tiêu của mình.

    Như định nghĩa NoSQL Database trên Wikepedia – “A NoSQL database provides a mechanism for storage and retrieval of data that uses looser consistency models than tranditional relational databases.”
    bsd-bigdata9.png


    Tại sao dùng NoSQL

    CSDL quan hệ truyền thống thường xác định trước cấu trúc dữ liệu. Trong khi thế giới đang hướng đến dữ liệu không cấu trúc, chúng ta thấy giới hạn của CSDL quan hệ truyền thống trong trường hợp này. Ví dụ, ngày nay chúng ta có dữ liệu dạng SMS, tập tin âm thanh wave, photo và video. Có sự khó khăn nhỏ để quản lý chúng dùng CSDL quan hệ truyền thống. Mọi người dùng BLOB lưu trữ dữ liệu như trên. BLOB có thể lưu trữ dữ liệu nhưng khi truy xuất hoặc xử lý thì rất chậm. CSDL NoSQL là loại CSDL có thể tiếp nhận dữ liệu không cấu trúc (unstructured), không tổ chức (unorganized) và không dự đoán trước (unpredictable).

    Cùng với hỗ trợ dữ liệu không cấu trúc, thuận lợi khác của NoSQL database là hiệu suất cao (high performance) và tính sẵn sàng cao (high availability).

    Tính nhất quán cuối cùng

    Ngoài ra cần lưu ý CSDL NoSQL không thể cung cấp 100% ACID (Atomicity, Consistency, Isolation, Durability). Mặc dù vậy, nó cung cấp sự thống nhất cuối cùng.

    Taxonomy (phân loại)

    NoSQL thuộc nhiều loại như: column store, document store, key-value store, và graph database. Chúng ta sẽ nói chi tiết về các loại này sau.

    • Column: Hbase, Cassandra, Accumulo
    • Document: MongoDB, Couchbase, Raven
    • Key-value: Dynamo, Riak, Azure, Redis, Cache, GT.m
    • Graph: Neo4j, Allegro, Virtouso, Bigdata
    Hiện đã có hơn 150 CSDL NoSQL và bạn có thể đọc thêm tại đây.
     


  2. phamthanhnhan14

    phamthanhnhan14 Active Member

    1. Thuật ngữ
    NoSQL
    có nghĩa là Non-Relational (NoRel) - 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ỉ là SQLĐây là thuật ngữ chung cho các hệ CSDL không sử dụng mô hình dữ liệu quan hệ. NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặp giá trị - khóa và hệ thống lưu trữ phân tán.
    2. Lịch sử
    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 lightweight open source relational database (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 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).
    Ghi chú: Một mệnh đề khá thú vị về non-relational data store: “select fun, profit from real_world where relational=false;”.
    3. Định nghĩa
    Thế hệ database kế tiếp là một thế hệ cơ sở dữ liệu non-relational (không rà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àng petabytes dữ liệu trong hệ thống có độ chịu tải, 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ệ database mới này bao gồm: schema-free, hỗ trợ mở rộng dễ dàng, API đơn giản, eventual consistency (nhất quá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,…
    NoSQL storage đặc biệt phổ dụng trong thời kỳ Web 2.0 bùng nổ, nơi các mạ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ên web. 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ải quyết bằng bài toán phân tán. Nửa đầu năm 2009, người ta đã manh nha thuật ngữ NoSQL đánh dấu sự trưởng thành của thế hệ database mới trong khi những sản phẩm phần mềm có thể đã được phát triển từ trước đó rất lâu.
    4. Một số thuật ngữ liên quan.
    - Relational (Rằng buộc) thuật ngữ sử dụng đến các mối quan 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 + foreign key) để ràng buộc dữ liệu nhằm thể hiện tính nhất quán dữ liệu từ các bảng khác nhau.
    - Non-relational (Không rằng buộc): là khái niệm không sử dụng các ràng buộc dữ liệu cho nhất quán dữ liệu ở NoSQL database.
    - High Availability (Tính sẵn sàng): Do chấp nhận sự trùng lặp trong lưu trữ nên nếu một node (commodity machine) nào đó bị chết cũng không ảnh hưởng tới toàn bộ hệ thống
    - High Scalability (Khả năng mở rộng): Gần như không có một giới hạn cho dữ liệu và người dùng trên hệ thống.
    - Eventual consistency (Nhất quán cuối): tính nhất quán của dữ liệu không cần phải đảm bảo ngay tức khắc sau mỗi phép write. Một hệ thống phân tán chấp nhận những ảnh hưởng theo phương thức lan truyền và sau một khoảng thời gian (không phải ngay tức khắc), thay đổi sẽ đi đến mọi điểm trong 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ần mề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, bộ 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ều má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.
    - Distributed Data (Phân tán dữ liệu): mô hình lưu trữ phân tán các file hoặc dữ liệu ra nhiều máy tính khác nhau trong mạng LAN hoặc Internet dưới sự kiểm soát của phần mềm.
    - Deployment Flexibility (Triển khai linh hoạt): 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
    - Durability (Lưu trữ tốt): dữ liệu có thể tồn tại trong bộ nhớ máy tính nhưng đồng thời cũng được lưu trữ lại đĩa cứng.
     
  3. phamthanhnhan14

    phamthanhnhan14 Active Member

    Phân loại NoSQL
    Tính đến thời điểm hiện tại có 150 loại cơ sở dữ liệu NoSql (http://nosql-database.org), chia làm các loại :
    - Wide Column Store / Column Families: Hệ cơ sở dữ liệu cho phép truy xuất ngẫu nhiên/tức thời với khả năng lưu trức một lượng lớn dữ liệu có cấu trúc. Dữ liệu có thể tồn tại dạng bảng với hàng tỷ bản ghi và mỗi bản ghi có thể chứa hàng triệu cột. Hệ thống triển khai từ vài trăm cho đến hàng nghìn thiết bị dẫn đến khả năng lưu trữ hàng petabytes nhưng vẫn đảm bảo hiệu năng cao. Một số sản phẩm thông dụng: Hadoop/Hbase – Apache, Bigtable - Google, Cassandra - Facebook, Hypertable - Baidu, Accumulo, Amazon SimpleDB, Cloundata, Clouera...
    - Document Store: Thực chất là các cơ sở dữ liệu hướng tài liệu, một thiết kế riêng biệt cho việc lưu trữ tài liệu. Các cài đặt có thể là giả lập tương tác trên các cở sở dữ liệu quan hệ, cơ sở dữ liệu đối tượng hay key-value store. Một số sản phẩm tiêu biểu: MongoDB, Elasticsearch, Couchbase Server, CouchDB, RethinkDB, .
    - Key Value / Tuple Store: Mô hình lưu trữ dữ liệu dưới dạng cặp giá trị key-value trong đó việc truy suất, xóa, cập nhật giá trị thực thông qua key tương ứng.Với sự hỗ trợ của các kĩ thuật Btree, B+Tree, Hash,… dữ liệu có thể tồn tại trên RAM hoặc ổ cứng, phân tán hoặc không phân tán. Hầu hết cá NoSql Database đều là key-value store. Các sản phẩm thông dụng: DynamoDB, Azure Table Storage, Riak, Redis,…
    - Graph Databases: Là một dạng cơ sở dữ liệu được thiết kế riêng cho việc lưu trữ thông tin đồ họa như cạnh, nút hay thuộc tính. Một số sản phẩm tiêu biểu như: Neo4j, Infinite Graph, InfoGrid, HyperGraphDB, Dex, GraphBase, …
    - Multimodel Databases: Datomic, OrentDB, ArangoDB, FatDB, AlchemyDB, …
    - Object Databases: Versant, db4o, Objectivity, Starcounter, Perst, VelocityDB, HSS Database, ZoDB, …g) Grid & Cloud Database Solutions: Gigaspaces, Infinispan, Queplix, Hazelcast, …
    - XML Databases: EMC Document xDB, eXist, Sedna, BaseX, Qizx, …

    Tổng kết : 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
     

0 nhận xét: