Công nghệ
Cơ sở dữ liệu là gì? Khái niệm, loại và ví dụ dễ hiểu
Cơ sở dữ liệu là tập thông tin được sắp xếp có hệ thống để máy tính lưu trữ và tra cứu nhanh, thay cho sổ sách rời rạc dễ trùng lặp. Bài dưới đây giải thích cách dữ liệu nằm trong bảng, phần mềm nào quản lý nó, các loại phổ biến và cách chọn đúng loại cho công việc của bạn.
Trả lời nhanh
Cơ sở dữ liệu là gì?
Cơ sở dữ liệu, nói ngắn gọn, là tập hợp dữ liệu về những đối tượng cần quản lý, lưu trên vật mang tin của máy tính và quản lý theo một cơ chế thống nhất.
Cơ sở dữ liệu là gì và vì sao bạn cần quan tâm
Cơ sở dữ liệu là gì? Là tập hợp dữ liệu được tổ chức có hệ thống, lưu dưới dạng tệp điện tử trên máy tính, để con người và phần mềm tra tìm, cập nhật nhanh chóng. Mỗi lần mở ứng dụng ngân hàng xem số dư, tra lịch khám bệnh hay nộp hồ sơ trực tuyến, bạn đang đọc và ghi thông tin vào một cơ sở dữ liệu nào đó, dù không thấy nó hiện trên màn hình.
Điểm khác giữa nó và một đống thông tin lộn xộn nằm ở chữ “tổ chức”. Sổ ghi chép khách hàng trên giấy, bảng tính gửi qua email cho cả phòng, ảnh và tin nhắn chất đống trong điện thoại đều là dữ liệu, nhưng chưa phải cơ sở dữ liệu theo đúng nghĩa. Nó sắp xếp thông tin theo khuôn mẫu thống nhất, quản lý bằng một cơ chế chung, nên khi cần một con số cụ thể, máy tính tìm ra trong chớp mắt thay vì phải đọc lại từ đầu. Hai ý dưới đây làm rõ cách hiểu khái niệm này và vì sao nó hiện diện trong hầu hết các việc hằng ngày.
Tập dữ liệu có hệ thống, máy tính lưu và tra nhanh
Cơ sở dữ liệu, nói ngắn gọn, là tập hợp dữ liệu về những đối tượng cần quản lý, lưu trên vật mang tin của máy tính và quản lý theo một cơ chế thống nhất. Dữ liệu là tập hợp thông tin được thu thập, lưu trữ và xử lý để phục vụ nghiên cứu, quản lý hay ra quyết định. Ghép hai điều đó lại: một cửa hàng tạp hóa ghi sổ hàng hóa, một bệnh viện lưu hồ sơ bệnh nhân, một trường học quản lý điểm thi, tất cả đều cần nơi lưu trữ chung, nhập vào và khai thác ra nhanh chóng, chính xác. Cách tổ chức như vậy chính là thứ công cụ này mang lại, thay vì mỗi người mỗi kiểu ghi chép.
Để hiểu rõ hơn, cần phân biệt dữ liệu thô với dữ liệu đã tổ chức. Một dòng tin nhắn “giao hàng giúp tôi chiều nay ở số 12” là dữ liệu thô, máy tính không biết nên xếp nó vào đâu. Trong khi đó, dữ liệu có cấu trúc được xếp theo khuôn mẫu cố định, thường là bảng gồm các hàng và cột, mỗi ô chứa đúng một loại thông tin như tên khách, địa chỉ, ngày đặt hàng. Dữ liệu phi cấu trúc thì không theo khuôn mẫu nhất định, ví dụ văn bản tự do, email, hình ảnh hay ghi âm cuộc gọi. Cả hai loại đều có thể nằm trong đó, nhưng phần có cấu trúc mới là nơi các thao tác tra tìm, thống kê chạy nhanh nhất.
Cách hiểu này cũng giải thích vì sao cùng một lượng thông tin mà sắp xếp khác nhau thì hiệu quả khác nhau. Một danh sách khách hàng gõ liên tục trong một file văn bản, muốn đếm số người ở Hà Nội phải đọc từng dòng. Đưa danh sách đó vào cơ sở dữ liệu, mỗi khách thành một dòng, mỗi thông tin thành một cột, máy tính đếm gần như ngay lập tức và còn có thể sắp xếp, lọc theo ý muốn.
Quản lý thông tin đúng người, đúng việc, không trùng lặp
Số lượng bản ghi là điểm mà bảng tính không theo nổi. Một cơ sở dữ liệu có thể lưu tới hàng triệu, thậm chí hàng tỷ bản ghi mà vẫn hoạt động trơn tru. Nhờ đó, một cửa hàng nhỏ và một tập đoàn đa quốc gia đều dùng được cùng một cách tiếp cận, chỉ khác quy mô. Ngoài ra, dữ liệu nằm ở một nơi duy nhất nên nhiều người ở nhiều địa điểm có thể làm việc cùng lúc trên đó. Phòng kinh doanh ở Hà Nội và kho hàng ở Bình Dương nhìn thấy cùng một thông tin, không ai phải gửi bản sao qua lại cho nhau.
Việc phân quyền truy cập cũng quan trọng không kém. Nó cho phép cấp quyền theo từng mức: một số tài khoản chỉ được đọc, số khác được chỉnh sửa, và có thể hạn chế một số người chỉ thấy một phần dữ liệu nhất định. Nhân viên kế toán xem được thu chi nhưng không cần đụng tới hồ sơ sức khỏe của nhân viên, còn người mới vào việc chỉ tra được phần liên quan tới công việc của họ. Giới hạn quyền như vậy giữ thông tin nhạy cảm khỏi những mắt nhìn không có nhiệm vụ.
Trong công việc cụ thể, công cụ này hiện diện ở hầu hết các mảng của doanh nghiệp. Phần bán hàng lưu thông tin khách hàng để hiểu nhu cầu và xây dựng chiến lược tiếp thị, đồng thời là nền tảng của việc quản lý quan hệ khách hàng. Phần kho hàng theo dõi hàng tồn, đảm bảo cung ứng kịp thời và giảm lãng phí. Phần nhân sự lưu hồ sơ nhân viên, giúp quản lý và đánh giá năng suất. Phần tài chính lưu thu chi, hóa đơn, báo cáo để kiểm soát dòng tiền. Phần quản lý dự án thì giữ lịch trình, tài nguyên và tiến độ. Mỗi mảng là một nhóm dữ liệu, nhưng tất cả cùng nằm trong một hệ thống thống nhất. Thông tin nhờ vậy không bị trùng lặp, không xảy ra chuyện hai phòng hai con số khác nhau cho cùng một việc.
Tuy vậy, đừng nghĩ nó chỉ là chuyện của công ty lớn. Tạp chí The Economist từng gọi dữ liệu là loại dầu mới, và câu nói ấy đúng cả với tiệm cắt tóc ghi lịch hẹn, nhóm bán hàng online lưu đơn và số điện thoại khách. Sự ra đời của nó từng tạo bước chuyển về chất trong hoạt động của các cơ quan thông tin, thư viện, và hôm nay nó làm điều tương tự cho bất kỳ ai cần sắp xếp thông tin của mình gọn gàng, tra lại được khi cần. Hiểu được nó là gì và làm được gì, người đọc sẽ dễ hình dung vì sao mọi dịch vụ từ chuyển tiền tới đặt xe đều chạy trên nền này.
Cơ sở dữ liệu quan hệ hoạt động ra sao
Kiểu sắp xếp phổ biến nhất trong các kho dữ liệu là cơ sở dữ liệu quan hệ. Dữ liệu được chia vào các bảng, mỗi bảng giữ một nhóm thông tin riêng, và các bảng nối với nhau qua những khóa chung. Cách tổ chức này do nhà khoa học Edgar Codd phát triển từ năm 1970. Đến nay nó vẫn chạy sau hầu hết hệ thống bán hàng, thư viện, đặt vé mà người dùng Việt chạm tới mỗi ngày.
Muốn hình dung nó hoạt động thế nào, chỉ cần nhớ ba thứ: bảng, khóa và mối quan hệ. Cả ba đều dễ hiểu nếu lấy ví dụ từ sổ sách quen thuộc trong đời thường.
Dữ liệu nằm trong bảng gồm dòng và cột, mỗi ô chứa một giá trị
Bảng dữ liệu là thành phần chính của mô hình này. Một bảng gồm các cột và các hàng, giao điểm giữa chúng là ô chứa dữ liệu. Cột, hay còn gọi là trường, thể hiện một thuộc tính của đối tượng. Trong bảng khách hàng có thể có cột họ tên, cột địa chỉ. Mỗi cột chỉ nhận một loại thông tin, nên nhìn vào tên cột là biết ngay ô bên dưới chứa gì.
Hàng là chuyện khác. Một hàng gom các thông tin liên quan với nhau thành một bản ghi. Họ tên, địa chỉ của cùng một người nằm trên cùng một dòng. Mỗi hàng là một đối tượng hoàn chỉnh, còn mỗi cột là một khía cạnh của đối tượng ấy. Ô dữ liệu ở giao điểm hàng và cột chính là nơi một giá trị cụ thể được lưu.
Kiểu tổ chức này gần với cách người ta làm việc trên bảng tính, nhưng khác ở chỗ các bảng không đứng riêng lẻ. Chúng liên kết với nhau bằng khóa chính và khóa ngoài. Việc lấy dữ liệu ra thực hiện bằng SQL, ngôn ngữ truy vấn chuẩn dùng để quản lý và truy xuất thông tin. SQL có cú pháp đơn giản nên người mới cũng dễ học.
Nhờ cấu trúc rõ ràng ấy, người dùng có thể đặt những câu hỏi phức tạp. Liệt kê đơn hàng trong tháng qua, cộng tổng tiền theo từng chi nhánh, đối chiếu tồn kho với số đã bán, tất cả đều làm được trên các bảng đã nối sẵn. Dữ liệu càng nhiều, cách chia bảng và nối bảng càng cho thấy lợi thế so với việc nhồi tất cả vào một trang tính dài.
Cách tổ chức này còn giúp khi có người mới tiếp nhận hệ thống. Nhân sự vừa chuyển sang bộ phận bán hàng chỉ cần đọc tên các bảng và các cột là biết đơn hàng nằm đâu, thông tin khách hàng lưu ở bảng nào, đường nào dẫn từ bảng này sang bảng kia. Người cũ rời đi, người mới vào, cấu trúc vẫn giữ nguyên và công việc không gián đoạn.
Khóa chính và khóa ngoại nối các bảng với nhau thành mối quan hệ
Khóa chính (Primary Key) là một hoặc nhiều trường dùng để định danh mỗi bản ghi, không được trùng nhau và không được để trống. Trong bảng khách hàng, mã số của mỗi người thường đóng vai trò này. Hai người có thể trùng họ tên, thậm chí trùng ngày sinh, nhưng mã số thì không bao giờ giống nhau. Về lý thuyết, một bảng có thể không định nghĩa khóa chính. Dù vậy người ta hầu như luôn đặt khóa chính để quản lý cho gọn.
Khóa ngoại (Foreign Key) là trường ở bảng này trỏ tới khóa chính của bảng khác, tạo mối quan hệ giữa hai bảng. Bảng đơn hàng không cần chép lại họ tên, địa chỉ của người mua. Nó chỉ giữ mã khách hàng làm khóa ngoại. Khi cần biết ai mua, hệ thống theo mã ấy sang bảng khách hàng và lấy thông tin. Thông tin về người mua nhờ vậy chỉ nằm một chỗ, sửa một lần là đúng cho mọi đơn hàng.
Các bảng nối với nhau theo ba dạng. Một-một là mỗi bản ghi chỉ có một bản ghi tương ứng duy nhất ở bảng kia. Một-nhiều phổ biến nhất: một bản ghi ở bảng này có thể có nhiều bản ghi tương ứng ở bảng kia, như một khách hàng đặt nhiều đơn hàng. Nhiều-nhiều thì hai chiều cùng rộng, như một học sinh đăng ký nhiều môn học và một môn học có nhiều học sinh.
Mỗi dạng quan hệ phục vụ một tình huống thật. Quan hệ một-một thích hợp khi muốn tách riêng một nhóm thông tin, ví dụ phần hồ sơ nhạy cảm của một nhân viên nằm ở bảng khác, chỉ nối qua mã của người đó. Quan hệ một-nhiều gặp khắp nơi trong bán hàng: một cửa hàng có nhiều đơn, một đơn có nhiều mặt hàng. Quan hệ nhiều-nhiều thường cần một bảng trung gian để ghi từng cặp nối, tránh việc chép trùng thông tin ở cả hai bên.
Chính ba dạng quan hệ này làm nên chữ “quan hệ” trong tên gọi. Dữ liệu được tách nhỏ vào đúng bảng của nó, rồi nối lại khi cần. Thay vì chép lặp đi lặp lại cùng một thông tin ở nhiều nơi, mỗi thứ chỉ lưu một lần và được dẫn tới mọi nơi cần dùng.
Lược đồ ERD và tính toàn vẹn là lý do mô hình quan hệ được tin dùng
Muốn nhìn nhanh một hệ thống gồm những bảng nào và chúng nối nhau thế nào, người ta vẽ ERD, lược đồ thực thể - quan hệ, bản vẽ thể hiện các bảng và mối quan hệ bên trong. ERD dùng các ký hiệu hình học quen thuộc: hình chữ nhật cho thực thể, hình thoi cho quan hệ, hình bầu dục cho thuộc tính. Nhìn vào bản vẽ, người mới tham gia dự án cũng nắm được cấu trúc và thao tác dễ hơn.
Bên cạnh tính dễ hiểu, mô hình quan hệ còn linh hoạt. Có thể chỉnh sửa hay xóa dữ liệu mà không cần thay đổi cấu trúc có sẵn. Thêm một khách hàng mới, cập nhật số điện thoại, hủy một đơn hàng, đều làm được mà không đụng tới phần còn lại của hệ thống. Truy vấn phức tạp từ nhiều nguồn khác nhau cũng nằm trong tầm tay, vì các bảng vốn được thiết kế để nối với nhau.
Ràng buộc khóa và các quy tắc giúp đảm bảo tính toàn vẹn của dữ liệu. Sai một mã, trùng một bản ghi, để trống một ô bắt buộc, đều bị hệ thống chặn lại ngay khi nhập. Người dùng không phải tự soát từng dòng bằng mắt như khi làm trên bảng tính. Máy giữ nguyên tắc thay con người, và nguyên tắc ấy được áp dụng cho mọi lần nhập liệu.
Những đặc điểm ấy giải thích vì sao kiểu này được ưa chuộng ở những lĩnh vực không cho phép sai số. Tài chính, quốc phòng, an ninh hay thông tin sức khỏe cá nhân đều cần dữ liệu chính xác tuyệt đối, và mô hình quan hệ đáp ứng được yêu cầu đó. Một con số sai trong sổ kế toán hay một hồ sơ bệnh án trùng lặp có thể kéo theo hậu quả thật, nên tính toàn vẹn ở đây không phải thứ phụ.
Trong đời thường, nó hiện diện khắp nơi. Các hệ thống đặt vé tàu xe, quản lý thư viện, giáo dục, mua sắm trực tuyến, các trang web và ứng dụng di động đều chạy trên nền tảng này. Mỗi lần tra lịch tàu hay mượn một cuốn sách ở thư viện, người dùng đang hỏi dữ liệu từ những bảng được nối với nhau theo đúng cách vừa mô tả.

Hệ quản trị cơ sở dữ liệu (DBMS): phần mềm đứng sau mọi thao tác
Để những bảng dữ liệu ấy làm được việc, cần một phần mềm đứng giữa bạn và kho dữ liệu. Khi bạn bấm nút tra đơn hàng trên một trang bán hàng, câu trả lời hiện ra chỉ trong tích tắc chính nhờ nó: phần mềm chịu trách nhiệm tìm, lấy, cập nhật và bảo vệ từng dòng thông tin.
Phần mềm ấy gọi là hệ quản trị cơ sở dữ liệu, hay DBMS. Hiểu đúng nó là gì, có những loại nào và mạnh yếu ra sao sẽ giúp người làm việc với dữ liệu chọn đúng công cụ, tránh mua hớ hay dựng một hệ thống quá sức cần thiết.
DBMS là công cụ quản lý dữ liệu, không phải chính dữ liệu
Nhiều người dùng hai khái niệm này lẫn vào nhau. Cơ sở dữ liệu là nơi chứa dữ liệu, còn DBMS là phần mềm quản lý và vận hành toàn bộ dữ liệu đó. Ví dụ gần gũi nhất: một cuốn sổ bán hàng chính là cơ sở dữ liệu, còn quy trình và người trông sổ, biết khi nào cho ghi thêm, khi nào cho tra, khi nào cấm sửa, đóng vai trò của DBMS.
Về mặt chức năng, DBMS giúp mô tả dữ liệu, cập nhật dữ liệu và tìm kiếm dữ liệu. Người dùng cuối được cung cấp các tiện ích để tạo, truy xuất, cập nhật và quản lý dữ liệu mà không cần biết bên dưới dữ liệu nằm ở đâu, được ghi lên đĩa ra sao. Nhờ vậy, một nhân viên kho chỉ cần gõ mã hàng vào ô tìm kiếm, phần còn lại do phần mềm lo.
Một hệ thống database hoàn chỉnh không dừng ở phần mềm. Nó gồm năm thành phần chính: phần cứng, phần mềm, dữ liệu, quy trình và ngôn ngữ truy cập database. Máy chủ và ổ cứng là phần cứng; DBMS cùng các ứng dụng là phần mềm; những dòng thông tin bán hàng, nhân sự, tồn kho là dữ liệu. Quy trình là cách tổ chức, phân công ai được làm gì với dữ liệu. Còn ngôn ngữ truy cập là cách con người ra lệnh cho hệ thống.
Ngoài việc quản lý, DBMS còn gánh nhiều việc mà nếu làm tay sẽ rất dễ sai. Nó bảo toàn và bảo mật dữ liệu, hạn chế nhiều quyền truy cập cùng lúc gây ghi đè lẫn nhau, và giúp giảm thời gian phát triển ứng dụng. Nhờ lưu trữ dữ liệu tập trung tại một nơi thống nhất thay vì phân tán nhiều file rời rạc, doanh nghiệp dễ kiểm soát ai đã sửa gì, khi nào sửa. Đó là lý do mọi ứng dụng nghiêm túc, từ phần mềm bán hàng đến dịch vụ công, đều xây dựng trên nền một hệ quản trị.
Các hệ quản trị phổ biến và cách phân loại theo giấy phép
Trên thị trường có nhiều hệ quản trị, nhưng một số cái tên xuất hiện khắp nơi: MySQL, PostgreSQL, Oracle Database và Microsoft SQL Server. Danh sách các ví dụ quen thuộc còn kể thêm Microsoft Access, FileMaker, Clipper, dBASE hay DB2. Theo bảng xếp hạng DB-Engines, bốn hệ quản trị cơ sở dữ liệu phổ biến nhất hiện nay đều thuộc loại quan hệ, tức là loại lưu dữ liệu theo bảng như phần trước đã nói.
Mỗi hệ sinh ra trong bối cảnh khác nhau nên cũng phù hợp với quy mô khác nhau. Oracle ra đời năm 1979, chạy trên UNIX và Windows, phù hợp với các hệ thống lớn. DB2 ra đời năm 1985, chạy trên AIX, HP-UX, Linux, Solaris, phục vụ hệ thống lớn và vừa. MySQL ra đời năm 1987, chạy trên mọi hệ điều hành, phù hợp hệ thống vừa và nhỏ. MS SQL Server ra đời năm 2000, chạy trên Windows, cũng nhắm tới hệ vừa và nhỏ.
Cách phân loại dễ hiểu nhất cho người mới là theo giấy phép. Nhóm mã nguồn mở, miễn phí gồm MySQL, MariaDB và PostgreSQL: ai cũng có thể tải về dùng, phù hợp doanh nghiệp nhỏ, sinh viên học tập hay dự án mới khởi động. Nhóm mã nguồn tư nhân gồm Oracle Database, SQL Server và Microsoft Access, thường đi kèm dịch vụ hỗ trợ chính thức từ hãng.
Hệ điều hành cũng là một căn cứ chọn. Trên Linux, các lựa chọn quen thuộc là MySQL và MariaDB; trên Windows thì SQL Server là lựa chọn phổ biến. Vì vậy, khi dựng một hệ thống, đội kỹ thuật thường chọn phần mềm khớp với môi trường máy chủ sẵn có, thay vì đổi cả nền tảng chỉ vì một phần mềm.
Ngoài nhóm quan hệ, còn có các hệ quản trị NoSQL nổi bật như MongoDB, Cassandra hay Redis, phục vụ kiểu dữ liệu và nhu cầu khác với bảng truyền thống. Các loại này sẽ được nói kỹ ở mục sau; ở đây chỉ cần biết rằng danh sách DBMS không dừng lại ở bốn cái tên quen thuộc trên.
DBMS nhanh và an toàn hơn bảng tính, nhưng tốn kém và đòi hỏi kỹ thuật
Khác với bảng tính quen thuộc, DBMS được sinh ra để gánh những khối lượng việc mà làm tay sẽ rất dễ sai. Nó dùng bộ nhớ đệm và cơ chế ghi đĩa định kỳ để giảm ghi trực tiếp lên đĩa. Khi có lỗi hoặc mất điện, nhật ký giao dịch cùng cơ chế quay lui và làm lại sẽ khôi phục dữ liệu. Bộ quản lý giao dịch đảm bảo mọi giao dịch tuân theo nguyên tắc ACID, tức bộ bốn thuộc tính nguyên tử, nhất quán, độc lập, bền vững. Một thao tác hoặc hoàn tất trọn vẹn hoặc không thực hiện gì. Ví dụ đơn giản: một giao dịch chuyển tiền giữa hai tài khoản hoặc cả hai bước đều thành công, hoặc không bước nào diễn ra, không bao giờ để tiền bị trừ mà chưa tới nơi.
DBMS có thể truy vấn hàng triệu bản ghi nhanh nhờ chỉ mục, phân mảnh dữ liệu và bộ nhớ đệm. Ba cơ chế tăng tốc truy vấn này giúp người dùng hầu như không cảm nhận được độ trễ, dù kho dữ liệu đã phình to gấp nhiều lần ngày đầu.
Một lớp bảo mật khác đến từ phân quyền và truy vết. DBMS phân quyền chi tiết từng người dùng và ghi lịch sử thao tác để truy vết, nên khi có chuyện xảy ra, người quản trị biết chính xác ai đã làm gì, khi nào làm. Nhờ dữ liệu nằm tập trung tại một nơi thay vì rải rác nhiều file, việc kiểm soát cũng chặt hơn.
Tuy nhiên, mặt trái cũng có thật và nên nhìn thẳng. Chi phí triển khai và duy trì cao, tính cả phần mềm, phần cứng và nhân sự; phần cứng và phần mềm của DBMS còn tương đối đắt và hệ thống khá phức tạp, cần hướng dẫn khi sử dụng. Vận hành đòi hỏi kiến thức chuyên môn nên khó với tổ chức thiếu đội ngũ kỹ thuật. Với cửa hàng nhỏ hay nhóm vài người làm dự án, một bảng tính được quản lý kỷ luật đôi khi vẫn là lựa chọn hợp lý hơn.
Còn hai hạn chế ít khi được nhắc nhưng đáng nhớ. DBMS không thể thực hiện các phép tính phức tạp như bảng tính làm được, nên nhiều nơi vẫn kết hợp cả hai: dữ liệu sống nằm trong DBMS, còn phân tích, dựng báo cáo thì xuất sang bảng tính. Và ở một số tổ chức, dữ liệu tích hợp thành một thể thống nhất nên một sai sót kỹ thuật nhỏ có thể làm sập toàn bộ hệ thống. Chính vì vậy, sao lưu định kỳ và phân quyền chặt chẽ không phải là tùy chọn, mà là điều kiện tối thiểu để sống yên với dữ liệu của mình.
Đọc thêm: Cách xóa tài khoản Facebook, Instagram, Zalo và dữ liệu cá nhân
Các loại cơ sở dữ liệu khác và cách chọn đúng loại
Không phải mọi khối thông tin đều xếp gọn vào bảng với các hàng, các cột. Một bài viết trên mạng xã hội, một giỏ hàng trực tuyến, một bản đồ quan hệ bạn bè: dữ liệu của chúng lộn xộn, thay đổi liên tục và khổng lồ về số lượng. Để chứa những khối dữ liệu như vậy, người ta đã tạo ra cả một gia đình các loại cơ sở dữ liệu khác nhau, mỗi loại sinh ra để phục vụ một kiểu công việc riêng.
Nhận ra sự khác biệt giữa các loại này giúp người làm sản phẩm, chủ cửa hàng hay sinh viên học công nghệ tránh được sai lầm đắt giá: dùng sai loại ngay từ đầu, về sau phải viết lại gần như toàn bộ phần ứng dụng.
NoSQL là gì và bốn kiểu lưu trữ phổ biến: tài liệu, khóa-giá trị, cột, đồ thị
NoSQL là nhóm hệ thống không dùng mô hình bảng quan hệ truyền thống, lưu dữ liệu linh hoạt theo tài liệu, khóa-giá trị, cột hoặc đồ thị. Tên gọi này hiểu theo nghĩa “not only SQL”, ám chỉ rằng SQL không phải là lựa chọn duy nhất, bởi nhóm này sinh ra để bổ sung cho cách lưu trữ kiểu bảng đã kể ở phần trước. Trong khi SQL sắp xếp dữ liệu vào bảng có cấu trúc cố định, NoSQL cho phép dữ liệu không theo khuôn sẵn: mỗi bản ghi có thể có những trường khác nhau mà không cần sửa lại cả hệ thống.
Điểm mạnh rõ nhất của NoSQL nằm ở khả năng mở rộng theo chiều ngang. Khi dữ liệu nhiều lên, thay vì mua một máy chủ mạnh hơn, người ta chỉ cần bổ sung thêm máy chủ thường và chia dữ liệu cho các máy cùng gánh. Với ứng dụng có lưu lượng cao, cách làm này vừa hiệu quả vừa rẻ, bởi NoSQL thường kinh tế hơn do độ phức tạp ít hơn và không đòi hỏi phần cứng hay phần mềm đắt tiền. Hiệu năng với tập dữ liệu lớn và phi cấu trúc cũng vượt trội, nhờ mỗi hệ được tối ưu riêng cho từng loại truy vấn.
Có điều, sự linh hoạt đó không miễn phí. NoSQL không có schema cố định, nên trách nhiệm áp đặt ràng buộc dữ liệu chuyển sang lập trình viên: nếu họ bỏ sót, dữ liệu rác sẽ lọt vào mà hệ thống không báo lỗi. Nhiều hệ NoSQL cũng nới lỏng một phần nguyên tắc ACID, chấp nhận không có tính nhất quán mạnh hay tức thì để đổi lấy hiệu suất và tính khả dụng. Đổi lại, phần mềm phải tự xử lý các tình huống dữ liệu chưa đồng bộ. Một điều nữa đáng cân nhắc: chuyển giữa các hệ NoSQL khác nhau, ví dụ từ CouchDB sang MongoDB, đòi hỏi viết lại phần ứng dụng truy cập dữ liệu, nghĩa là chọn nhãn hàng nào thì dính chặt nhãn hàng ấy.
Ai học nghề cũng nên biết rằng thị trường việc làm cho NoSQL còn kém hơn SQL, dù nhu cầu đang tăng dần, và nhiều hệ NoSQL hiện nay đã tích hợp hỗ trợ một phần cú pháp SQL để người mới dễ tiếp cận. Với người phân tích dữ liệu phức tạp, SQL vẫn là lựa chọn quen thuộc: cú pháp đơn giản, người mới nắm bắt nhanh, lại chạy tốt trên MySQL, Oracle hay SQL Server.
- Kiểu tài liệu: lưu dữ liệu dưới dạng cặp khóa-giá trị, trong đó phần giá trị là tài liệu định dạng JSON hoặc XML. JSON là định dạng văn bản nhẹ để biểu diễn dữ liệu theo cặp tên-giá trị, rất hợp với ứng dụng web và di động. MongoDB và Amazon DocumentDB là những tên tuổi phổ biến của nhóm này, nổi bật nhờ các giao diện lập trình mạnh mẽ và trực quan.
- Kiểu khóa-giá trị: đơn giản nhất trong cả gia đình, mỗi khóa là duy nhất và trỏ tới một giá trị có thể là mảnh dữ liệu lớn hoặc chuỗi JSON. Redis, Memcached, DynamoDB, Riak và Berkeley DB là những cái tên thường gặp; nhờ cấu trúc tối giản, nhóm này truy xuất cực nhanh, thường được đặt ở tầng đầu để đệm cho hệ thống.
- Kiểu cột: lưu dữ liệu theo cột thay vì theo hàng, các cột được xử lý tách biệt và giá trị nằm liền kề nhau trên bộ nhớ. Khi truy vấn chỉ cần vài trường dữ liệu giữa hàng triệu bản ghi, cách lưu này đọc đúng phần cần thiết mà không lôi cả hàng theo. HBase, Cassandra và Hypertable là các đại diện tiêu biểu.
- Kiểu đồ thị: lưu thực thể dạng node, mối quan hệ dạng cạnh, mỗi node và cạnh có một mã định danh riêng. Cách này hợp với những bài toán đi sâu vào mối quan hệ, như gợi ý bạn bè hay đề xuất sản phẩm dựa trên hành vi liên kết giữa người với người, người với hàng hóa. Neo4j là cái tên phổ biến nhất, bên cạnh OrientDB, FlockDB và Infinite Graph.
Theo cách lưu trữ: trong bộ nhớ, trên đĩa, tập trung, phân tán và trên đám mây
Một cách phân loại khác nhìn vào chỗ dữ liệu nằm. Loại trong bộ nhớ (in-memory) lưu toàn bộ dữ liệu trên RAM, nhờ vậy thời gian truy xuất tính bằng phần nghìn giây, phù hợp những ứng dụng cần độ trễ thấp như fintech hay các hệ thống phải trả lời chỉ trong vài giây. Redis và Memcached là ví dụ quen thuộc của nhóm này.
Nhưng RAM đắt và mất điện là mất dữ liệu. Loại trên đĩa lưu vào ổ cứng hoặc SSD, chậm hơn một chút nhưng ổn định, phù hợp lưu trữ lâu dài; phần lớn hệ thống thực tế kết hợp cả hai: dữ liệu nóng đặt trên RAM, dữ liệu lịch sử nằm trên đĩa.
Theo vị trí, hệ tập trung hoạt động hoàn toàn tại một địa điểm duy nhất, thường dùng cho tổ chức lớn như doanh nghiệp hay trường đại học, vì dễ quản lý và kiểm soát. Ngược lại, hệ phân tán chia dữ liệu trên nhiều máy chủ kết nối qua mạng, cho tốc độ tăng, độ tin cậy tốt hơn và dễ mở rộng; khi một máy gặp sự cố, các máy còn lại vẫn gánh việc. Google Spanner và Apache Cassandra là những ví dụ tiêu biểu của hướng phân tán.
Còn hệ đám mây chạy trên nền Internet, cho phép truy cập tệp từ bất kỳ đâu miễn là có kết nối mạng. Vì dữ liệu truyền đi trên đường mạng, mã hóa là phần thiết yếu của loại này để bảo vệ thông tin. Ngoài các phân loại kỹ thuật, người ta còn gặp loại nguồn mở cho công chúng dùng miễn phí, rẻ hơn nhưng có thể thiếu một số tính năng tiên tiến của bản thương mại, và loại dành cho cá nhân, chỉ gồm vài bảng, lưu trên máy riêng của một người, không phù hợp với khối lượng lớn.
Theo mục đích sử dụng: cơ sở dữ liệu vận hành và kho dữ liệu phân tích
Cùng một doanh nghiệp thường chạy song song hai hệ thống với hai nhiệm vụ khác nhau. Loại thứ nhất là cơ sở dữ liệu vận hành, xử lý và lưu trữ dữ liệu giao dịch hằng ngày: cho phép người dùng thêm, chỉnh sửa, xóa dữ liệu theo thời gian thực. Hệ thống bán hàng ghi từng hóa đơn, ứng dụng ngân hàng ghi từng giao dịch đều thuộc nhóm này, và đây cũng là nguồn dữ liệu quan trọng cho phân tích kinh doanh về sau.
Kho dữ liệu (Data Warehouse) là nơi tổng hợp dữ liệu lịch sử từ nhiều nguồn, phục vụ báo cáo và phân tích thay vì giao dịch hằng ngày. Nó gom cả dữ liệu lịch sử lẫn dữ liệu truyền thông từ nhiều nguồn về một chỗ, giúp đơn giản hóa việc lập báo cáo và hỗ trợ ra quyết định. Tách hai loại này ra là điều hợp lý: nếu chạy báo cáo nặng ngay trên hệ thống bán hàng, các giao dịch thực tế sẽ bị chậm theo.
Ngoài hai nhóm chính, còn có loại lưu dữ liệu theo ý nghĩa để hỗ trợ tìm kiếm thông minh.
Chọn loại nào phụ thuộc vào dữ liệu, khối lượng và tần suất truy vấn
Không có loại nào tốt nhất cho mọi bài toán. Việc lựa chọn cần cân nhắc ít nhất năm yếu tố: loại dữ liệu, khối lượng, tần suất truy vấn, tính sẵn sàng và hiệu suất mong muốn. Dữ liệu có cấu trúc rõ ràng, cần báo cáo chặt chẽ thì mô hình quan hệ vẫn là lựa chọn an toàn; dữ liệu lộn xộn, thay đổi liên tục, lượng truy cập khổng lồ thì các hệ NoSQL phát huy thế mạnh.
Hậu quả của việc chọn sai không xuất hiện ngay ngày đầu. Chúng lộ ra khi hệ thống đã vận hành: chỉnh sửa sau này tốn thời gian, để lại lỗ hổng bảo mật và hạn chế khả năng mở rộng. Ví dụ theo quy mô cũng dễ hình dung: một tiệm cà phê ghi chép doanh thu và nguyên liệu chỉ cần bảng tính hoặc một hệ nhỏ gọn cài trên máy riêng; cửa hàng online có khách, đơn hàng, tồn kho liên quan tới nhau nên mô hình quan hệ như MySQL hay PostgreSQL là lựa chọn hợp lý; còn mạng xã hội hay ứng dụng triệu người dùng, nơi bản ghi không theo khuôn sẵn và lưu lượng tăng vọt mỗi ngày, thường phải chọn các hệ NoSQL. Nghĩa là trước khi quyết định, hãy hỏi dữ liệu của mình trông như thế nào và ai sẽ hỏi nó những câu gì, mỗi ngày bao nhiêu lần, thay vì chạy theo loại đang được khen nhiều nhất.

Cơ sở dữ liệu trong đời sống người Việt
Câu hỏi ấy có lời đáp ngay trong đời sống hằng ngày. Sáng quẹt thẻ mua bữa sáng, trưa đi khám bệnh lấy toa thuốc, tối lên app đặt vé cuối tuần: mỗi việc như vậy đều để lại hàng triệu dòng thông tin, được ghi lại và tra cứu ngay tại chỗ. Ít ai để ý, nhưng chính những kho thông tin khổng lồ ấy đang vận hành thầm lặng phía sau hầu hết việc làm hằng ngày của người Việt, từ quầy thuốc đến cổng dịch vụ công.
Từ thủ tục nhà nước đến sổ sách doanh nghiệp đều dựa trên dữ liệu
Ở cấp nhà nước, chuyển đổi số về bản chất là chuyện gom thông tin từng nơi rời rạc vào những kho dùng chung. Trước đây, một hồ sơ của người dân thường bị chép lại nhiều lần ở nhiều cơ quan, mỗi nơi một bản, thiếu nhất quán là chuyện thường. Khi các cơ quan dùng chung một nguồn thông tin, người dân khai một lần rồi các nơi tra cứu được, thủ tục bớt giấy tờ và việc đối chiếu thông tin giữa các cơ quan cũng dễ hơn hẳn.
Bởi vậy, kể cả ở doanh nghiệp nhỏ, việc ghi chép có hệ thống đã tạo ra khác biệt thật. Một cửa hàng ghi đủ từng phiếu nhập, từng hóa đơn bán sẽ biết ngay mặt hàng nào lãi, mặt hàng nào ế, thay vì đoán theo cảm tính. Khi cần kiểm soát thu chi, chủ doanh nghiệp đối chiếu hóa đơn mua với hóa đơn bán, số tiền chi với số tiền thu; con số nào lệch khỏi mặt bằng chung thì soi lại trước. Cách làm này không cần phần mềm đắt tiền, chỉ cần thói quen ghi đúng, ghi đủ và chịu tra cứu lại định kỳ.
Không những thế, chính những bản ghi đều đặn ấy còn là căn cứ khi có tranh chấp hay khi cơ quan quản lý hỏi tới. Sổ sách rời rạc, mỗi nơi một kiểu thì khó chứng minh; dữ liệu ghi một chỗ, theo một khuôn thì tra lại được từng giao dịch. Đây là lý do nhiều hộ kinh doanh chuyển từ sổ tay sang phần mềm bán hàng, dù chỉ là bản miễn phí cho một quầy hàng nhỏ.
Doanh nghiệp, y tế, giáo dục và dịch vụ hằng ngày đều chạy trên dữ liệu
Trong khu vực tư nhân, hầu như mọi phần mềm doanh nghiệp đều có một kho thông tin làm lõi. Hệ thống quản trị nguồn lực ERP và quản lý quan hệ khách hàng CRM dùng DBMS để lưu thông tin khách hàng, đơn hàng, kế toán. Hệ thống bán lẻ xử lý lượng giao dịch lớn mỗi ngày; mỗi lần quẹt thẻ hay quét mã tại quầy đều là một bản ghi được ghi lại và đối chiếu ngay. Truy vấn dữ liệu giúp ngành bán lẻ theo dõi tồn kho, đặt hàng thêm kịp thời và phân tích xu hướng mua của khách. Một chai nước bỏ quên nhập kho hay một mặt hàng bán chạy bị thiếu đều bị phát hiện qua chính những con số này.
Ngành ngân hàng là ví dụ rõ nhất về độ khắt khe: mỗi tài khoản, mỗi giao dịch chuyển tiền, mỗi báo cáo tài chính đều nằm trong kho thông tin được quản lý theo nguyên tắc chặt chẽ, vì sai một bản ghi là sai tiền của người thật. Y tế cũng vậy. Bệnh viện dùng hệ thống bệnh án điện tử EMR lưu bệnh án, kết quả xét nghiệm, toa thuốc và lịch hẹn. Nhờ truy vấn nhanh, bác sĩ và nhân viên y tế xem được hồ sơ của người bệnh ngay tại phòng khám thay vì lật sổ giấy cũ.
Giáo dục, thương mại điện tử và các dịch vụ đặt vé hoạt động theo cách tương tự. Kho thông tin giáo dục lưu thông tin đăng ký của học sinh, danh mục khóa học và kết quả học tập. Trường học dùng hệ thống quản lý học tập LMS để lưu điểm số, lịch học, hồ sơ, nên phụ huynh xem được điểm của con ngay trên điện thoại. Cửa hàng online quản lý đơn hàng, sản phẩm, vận chuyển và thanh toán trong cùng một hệ thống; hệ thống đặt vé quản lý giá vé, chỗ ngồi và lịch trình, để hai người cùng mua một ghế trên cùng chuyến là chuyện gần như không thể xảy ra.
Kế đến là chuyện của chính người dùng. Mỗi khi điền form đăng ký, quẹt thẻ hay đặt lịch online, thông tin cá nhân của mình đang được ghi vào một trong những kho dữ liệu ấy. Điều này vừa là tiện lợi, vừa là lời nhắc nên điền đúng mức cần thiết và chọn dùng dịch vụ của đơn vị uy tín, vì dữ liệu một khi đã nằm trong hệ thống thì sẽ đi theo mình rất lâu.
Bài viết thuộc Góc đọc Xuân của Chúc Mừng Năm Mới.
Nguồn tham khảo
- Hệ thống phân tích cơ sở dữ liệu hóa đơn điện tử: Phát hiện sớm rủi ro, ngăn ngừa gian lận hóa đơn (logistics.gov.vn)
- Các loại cơ sở dữ liệu (tel4vn.edu.vn)
- Cơ sở dữ liệu hóa chất quốc gia sẽ đóng góp vai trò to lớn trong công tác quản lý (congthuong.vn)
- Cơ sở dữ liệu (Wikipedia)