NoSQL là gì? Tại sao cần quan tâm?


Từ: 12:10 27/09/2012
Bài: 155
Cảm ơn: 178
Thích: 28

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. 

I . NoSQL là gì?

1. Thuật ngữ

NoSQL còn 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ỉ 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.

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.

- non-relational: 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 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.

- distributed storage: 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.

- 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.

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àng tră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ạnh hơ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ạt tậ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át triển giống như object storage devices (OSD).

 

Label
Từ: 14:36 04/10/2012
Bài: 81
Cảm ơn: 82
Thích: 7

=> vì ko có tính ràng buộc do vậy nó chấp nhận dư thừa dữ liệu và sự đồng bộ hóa chậm.

(đổi avatar hay tên trên fb mà nó ko chịu cập nhật ở mọi chỗ ngay là vì lí do này)

ko dùng SQL mà dùng API riêng nên ko nhất quán đồng bộ.

ít host hỗ trợ vì nó khá mới :)) Tuy nhiên viết 1 vài cái kiểu chat thì nhanh ko thua kém flatfile

Label
Từ: 10:32 14/06/2012
Bài: 112
Cảm ơn: 124
Thích: 18

Thấy bảo cái này truy vấn nhanh lắm , làm chút thử nghiệm

<PHP + MYSQL + 10.000 bảng ghi + đã index>

http://mobilestore09b4.freeiz.com/Index.php?username=3123

http://mobilestore09b4.freeiz.com/Index.php

------------------------------------------------------------

<.NET + SQL SERVER + 10.000 bảng ghi + đã index>

http://prtawm.somee.com/Account/SearchByUsername?username=2812acc

http://prtawm.somee.com/Account/Index

-------------------------------------------------------------

Thấy cũng lẹ mà , hay là phải chục triệu bảng ghi thì Mongodb mới thể hiện sức mạnh nhỉ

Label
Từ: 12:10 27/09/2012
Bài: 155
Cảm ơn: 178
Thích: 28

Nhanh hay không là do cách mình dùng API thôi. Vd như facebook, nó xây dựng hệ thống Feed System tốt thì mình hoàn toàn cập nhật được ngay, mà cái Feed system của nó thường chỉ cập nhật cho danh sách bạn bè hoặc subcriber nên cũng không cần thiết phải chỗ nào cũng có.

Mấy dạng website lớn mới cần tới, và nhất là mấy thằng mạng xã hội. Có lẽ noSQL sinh ra để thay thế cho CSDL phân tán.

Label
Từ: 14:36 04/10/2012
Bài: 81
Cảm ơn: 82
Thích: 7

Không phải là thay cho CSDL phân tán mà bản thân các hệ quản trị csdl NoSQL đã phân tán ngay từ nhân rồi.

Các site lớn nhưng ko yêu cầu tính đồng bộ tức thời cao mới dùng dược (mxh như fb, SE như google  ko quan trọng về tính tức thời ...)

Do ko có ràng buộc nên nó nhanh hơn, cập nhật khoảng 1 triệu bản ghi trở lên mới có sự chênh lệch lớn.

Chậc, chậc

Label
Từ: 04:23 05/03/2013
Bài: 29
Cảm ơn: 33
Thích: 0

Thằng bạn mình nó đang code Python , thấy bảo toàn pải dùng NoSQL đi kèm MySQL 

Label
Từ: 23:00 14/04/2013
Bài: 2
Cảm ơn: 2
Thích: 0

@nguyentungduong.9x1: 10.000 bản ghi là quá nhỏ để test cái này nhé :) 

Label
Từ: 23:38 22/05/2013
Bài: 2
Cảm ơn: 2
Thích: 0

NoSql thì có rất nhiều loại. Điển hình nhất là mongodb. Ưu điểm dễ sử dụng, hỗ trợ nhiều ngôn ngữ, khả năng mở rộng dễ dàng. Nhược điểm tốn tài nguyên hệ thống.

Mình có test thử tìm kiếm trên mongodb 1 triệu bản ghi mất 0.02s thôi :D

Label
Từ: 23:38 22/05/2013
Bài: 2
Cảm ơn: 2
Thích: 0

NoSql thì có rất nhiều loại. Điển hình nhất là mongodb. Ưu điểm dễ sử dụng, hỗ trợ nhiều ngôn ngữ, khả năng mở rộng dễ dàng. Nhược điểm tốn tài nguyên hệ thống.

Mình có test thử tìm kiếm trên mongodb 1 triệu bản ghi mất 0.02s thôi :D

Label
Từ: 11:38 17/06/2013
Bài: 1
Cảm ơn: 1
Thích: 0

đào mộ 1 chút hì hì

bác quynhdh cho em hỏi.tại sao nên dùng nosql.nó có những điểm j mạnh hơn so với mysql ạ

em đang thực tập và phải tìm hiểu cái này.dùng thì em dùng được rồi.nhưng anh leader bảo tìm hiểu thông số vs vì sao nó mạnh hơn mysql

à mà cái KHÔNG RÀNG BUỘC nghĩa là sao ạ

bác nào biết cho em xin ít infor với

 

Label
Từ: 10:32 14/06/2012
Bài: 112
Cảm ơn: 124
Thích: 18

anh leader chỗ bạn bảo cái này mạnh , anh leader chỗ tớ bảo cái kia mạnh . anh leader chỗ khác bảo cái khác mạnh . mỗi cái mạnh 1 kiểu :D

Label
Từ: 04:23 05/03/2013
Bài: 29
Cảm ơn: 33
Thích: 0

Cho e hoi Nosql co transaction k vay admin oi

Label
Từ: 14:36 04/10/2012
Bài: 81
Cảm ơn: 82
Thích: 7

Điểm cơ bản của NoSQL là tính nhất quán yếu (vd Casandra mà face dùng thi thoảng cập nhật avatar mà chỗ có chỗ không)

Label
Từ: 04:23 05/03/2013
Bài: 29
Cảm ơn: 33
Thích: 0

thế thì chắc chỉ dùng cho thương mại điện tử với mấy web dạng nghe nhạc xem film thôi nhỉ enlightened

Label
Từ: 12:10 27/09/2012
Bài: 155
Cảm ơn: 178
Thích: 28

Ôi nghĩ mấy cái này làm gì cho nhức đầu :3 Khi nào cần thì sẽ tự phải tìm hiểu.

Label
Từ: 14:36 04/10/2012
Bài: 81
Cảm ơn: 82
Thích: 7

@prtawp

nếu dùng thì chỉ dùng với dữ liệu không cần tính đồng bộ ít nhất với tính nhất quán yếu :)

VD: 1 người cùng click vào 2 sản phẩm tại cùng một thời điểm

=> 2 sp có giá nhỏ hơn một số tiền mà người đó có, nhưng tổng giá trị mà 2 sản phẩm lại lớn hơn.

Khi ấy đơn hàng vẫn ok trong khi thực sự ko đủ $ :3

=> ít nhất dữ liệu về sản phẩm, đơn hàng, tiền bạc phải chính xác.

@admin chuẩn :)

Label
Từ: 04:23 05/03/2013
Bài: 29
Cảm ơn: 33
Thích: 0

hic , chả hiểu mô tê gì cả :((((

Label
Từ: 23:44 10/10/2014
Bài: 12
Cảm ơn: 0
Thích: 0

Mình không hiểu cái này lắm bạn Admin ơi có ví dụ chi tiết về cái này không?