53 điểm bởi xguru 2024-12-09 | 14 bình luận | Chia sẻ qua WhatsApp
  • Giới thiệu 7 DB đáng chú ý để giải quyết nhiều loại bài toán khác nhau
  • Đây không phải danh sách "DB tốt nhất", mà là các công cụ mang lại góc nhìn mới mẻ và hữu ích
  • Mong rằng trong năm 2025, bạn sẽ dành ra mỗi cơ sở dữ liệu một tuần để tìm hiểu (7 DBs in 7 Weeks)

1. PostgreSQL: cơ sở dữ liệu mặc định

  • PostgreSQL là công nghệ ổn định được dùng như lựa chọn mặc định
    • Cụm từ "Just use Postgres" là một meme nổi tiếng và cũng là biểu tượng của độ tin cậy
    • Tuân thủ ACID và cung cấp các tính năng mạnh mẽ, bao gồm sao chép vật lý và sao chép logic
    • Đây là cơ sở dữ liệu ổn định, được hỗ trợ rộng rãi giữa các nhà cung cấp lớn
  • Sức hấp dẫn lớn nhất của PostgreSQL: khả năng mở rộng
    • Có thể bổ sung các tính năng độc đáo thông qua Extensions
    • Ví dụ về các extension tiêu biểu:
      • AGE: hỗ trợ cấu trúc dữ liệu đồ thị và ngôn ngữ truy vấn Cypher
      • TimescaleDB: hỗ trợ làm việc với dữ liệu chuỗi thời gian
      • Hydra Columnar: cung cấp engine lưu trữ dạng cột
    • Extensions là yếu tố cốt lõi giúp PostgreSQL khác biệt với các cơ sở dữ liệu khác
  • Tính hữu dụng và khả năng mở rộng của PostgreSQL
    • Có hệ sinh thái đa dạng, cấu hình mặc định hợp lý và thân thiện với người dùng
    • Ngay cả các dịch vụ không phải PostgreSQL cũng cung cấp khả năng tương thích client thông qua Postgres wire protocol
    • Nhẹ đến mức có thể cài đặt cả trong môi trường WebAssembly (Wasm)
  • Khuyến nghị học PostgreSQL
    • Đáng để đầu tư thời gian nhằm hiểu được khả năng và giới hạn của PostgreSQL
    • Ví dụ: hiểu sự phức tạp của MVCC (Multi-Version Concurrency Control)
    • Nên thử xây dựng ứng dụng CRUD đơn giản, hoặc viết extension cho PostgreSQL

2. SQLite: cơ sở dữ liệu local-first

  • SQLite là cơ sở dữ liệu "local-first" có thể chạy độc lập
    • Thoát khỏi mô hình client-server và chạy trong cùng môi trường với ứng dụng
    • Ví dụ: WhatsApp và Signal dùng SQLite trên thiết bị để lưu dữ liệu chat
  • Các trường hợp sử dụng nâng cao của SQLite
    • Có thể được dùng sáng tạo vượt ra ngoài vai trò một cơ sở dữ liệu ACID cơ bản
    • Các công cụ và extension mới:
      • Litestream: cung cấp sao lưu dạng streaming cho SQLite
      • LiteFS: hỗ trợ truy cập phân tán để triển khai topology linh hoạt hơn
      • CR-SQLite: dùng CRDT (Conflict-free Replicated Data Types) để loại bỏ nhu cầu xử lý xung đột khi hợp nhất change set
  • Sự trở lại của SQLite trong tâm điểm
    • Đang được chú ý trở lại nhờ Ruby on Rails 8.0
    • 37signals: phát triển các module Rails dựa trên SQLite (như Solid Queue)
      • Hỗ trợ quản lý nhiều cơ sở dữ liệu SQLite trong Rails (database.yml)
    • Bluesky: dùng một cơ sở dữ liệu SQLite riêng cho mỗi người dùng dưới dạng Personal Data Servers
  • Khuyến nghị học cách tận dụng SQLite
    • Thử nghiệm kiến trúc lấy local làm trung tâm với SQLite
    • Thử xem có thể thay mô hình client-server dựa trên PostgreSQL hiện tại bằng SQLite hay không

3. DuckDB: cơ sở dữ liệu có thể truy vấn mọi thứ

  • DuckDB là cơ sở dữ liệu nhúng chuyên cho OLAP
    • Hoạt động cùng ứng dụng như SQLite, nhưng tập trung vào tác vụ OLAP thay vì OLTP
    • Là hệ thống được thiết kế xoay quanh phân tích dữ liệu và truy vấn
  • Đặc tính "Query-Anything" của DuckDB
    • Có thể truy vấn trực tiếp nhiều nguồn dữ liệu bằng SQL:
      • Các định dạng tệp phổ biến như CSV, TSV, JSON
      • Hỗ trợ cả các định dạng nâng cao như Parquet
    • Tính năng này mang lại sự linh hoạt, ví dụ trong phân tích luồng dữ liệu của Bluesky
  • Khả năng mở rộng và hệ sinh thái
    • DuckDB cũng có extension, nhưng chưa phong phú như Postgres (vì đây là dự án còn tương đối trẻ)
    • Có nhiều extension do cộng đồng đóng góp, trong đó gsheets (tích hợp Google Sheets) là ví dụ đáng chú ý
  • Khuyến nghị học cách dùng DuckDB
    • Thử nghiệm phân tích và xử lý dữ liệu qua notebook Python hoặc Evidence
    • Kết hợp với SQLite: giao các truy vấn phân tích từ cơ sở dữ liệu SQLite cho DuckDB để tăng hiệu năng

4. ClickHouse: cơ sở dữ liệu cột

  • ClickHouse là cơ sở dữ liệu chuyên cho tác vụ OLAP
    • Kết hợp PostgreSQL cho OLTP và ClickHouse cho OLAP là lựa chọn lý tưởng
    • Xử lý workload phân tích quy mô lớn, hỗ trợ tốc độ chèn dữ liệu cao nhờ mở rộng ngang và sharding
  • Các đặc điểm chính của ClickHouse
    • Hỗ trợ lưu trữ phân tầng:
      • Có thể tách riêng "hot data" và "cold data" để lưu trữ
      • Ví dụ: tài liệu của GitLab trình bày chi tiết cách tận dụng điều này
    • Xử lý tập dữ liệu lớn và phân tích thời gian thực:
      • Phù hợp với các tập dữ liệu có kích thước mà DuckDB khó xử lý
      • Mang lại hiệu năng mạnh mẽ trong các tình huống cần phân tích thời gian thực
  • Sự thuận tiện trong vận hành
    • Tài liệu về triển khai, mở rộng, sao lưu và các vấn đề vận hành được tổ chức bài bản, chi tiết
    • Ví dụ: có cả tài liệu hướng dẫn cách thiết lập CPU phù hợp
  • Khuyến nghị học ClickHouse
    • Thử nghiệm với tập dữ liệu phân tích quy mô lớn hoặc chuyển các phân tích đang làm bằng DuckDB sang ClickHouse
    • Có thể dùng chDB, phiên bản nhúng của ClickHouse, để so sánh trực tiếp hơn với SQLite

5. FoundationDB: cơ sở dữ liệu dạng layered

  • FoundationDB là một hệ thống độc đáo đóng vai trò "nền tảng của cơ sở dữ liệu"
    • Được thiết kế như một kho key-value, nhưng thay vì chỉ là cơ sở dữ liệu đơn giản, nó hoạt động như "nền móng" để xây dựng cơ sở dữ liệu
    • Được sử dụng tại các công ty lớn như Apple, Snowflake và Tigris Data
  • Các đặc điểm chính và giới hạn
    • Giới hạn:
      • Dữ liệu giao dịch không được vượt quá 10MB
      • Một giao dịch không được kéo dài quá 5 giây kể từ lần đọc đầu tiên
    • Nhờ những giới hạn này, hệ thống có thể hỗ trợ giao dịch ACID trọn vẹn ngay cả ở quy mô lớn
      • Ví dụ: có trường hợp vận hành cụm lớn hơn 100TiB
  • Thiết kế và kiểm thử của FoundationDB
    • Được thiết kế tối ưu cho những workload nhất định
    • Chứng minh độ ổn định và khả năng mở rộng thông qua kiểm thử mô phỏng:
      • Antithesis và các cơ sở dữ liệu khác cũng dùng cùng phương pháp kiểm thử này
      • Tài liệu tham khảo liên quan: các bài viết của Tyler Neely và Phil Eaton
  • FoundationDB với vai trò cơ sở dữ liệu "layered"
    • Sự gắn kết giữa storage engine và data model khá lỏng lẻo:
      • Có thể remap storage engine ở nhiều layer khác nhau
      • Ví dụ: Record layer, Document layer (do tổ chức FoundationDB cung cấp)
    • Trường hợp thiết kế layer do Tigris Data xây dựng là tài liệu đáng tham khảo
  • Khuyến nghị học FoundationDB
    • Làm theo tutorial và khám phá khả năng thay thế các hệ thống như RocksDB
    • Đọc Design Recipes và các bài báo liên quan
    • Hiểu các giới hạn sử dụng và những bài toán có thể giải quyết qua tài liệu Anti-Features và Features

6. TigerBeetle: cơ sở dữ liệu đặt độ chính xác lên tuyệt đối

  • TigerBeetle là cơ sở dữ liệu đơn mục đích, chuyên cho giao dịch tài chính
    • Khác với cơ sở dữ liệu đa dụng, nó tập trung vào một mục tiêu cụ thể, đặc biệt là giao dịch tài chính
    • Được cung cấp dưới dạng mã nguồn mở và được thiết kế với mục tiêu đạt độ tin cậy và độ chính xác rất cao
  • Triết lý thiết kế hướng đến độ chính xác tuyệt đối
    • Triển khai Power of Ten Rules của NASA và Protocol-Aware Recovery
    • Dùng strict serialisabilityDirect I/O để tránh các vấn đề liên quan đến kernel page cache
    • Có thể thấy sự triệt để này trong tài liệu an toàn (Safety doc) và phong cách lập trình độc đáo "Tiger Style"
  • Cách tiếp cận đổi mới với ngôn ngữ Zig
    • Zig là ngôn ngữ lập trình hệ thống còn khá mới, nhưng rất phù hợp với mục tiêu của TigerBeetle
    • Tận dụng ưu điểm của Zig để tối đa hóa sự gọn gàng và hiệu năng
  • Đề xuất học và ứng dụng TigerBeetle
    • Thử mô hình hóa tài khoản tài chính trong môi trường triển khai local:
      • Cài đặt và sử dụng theo Quick Start
    • Tham khảo System Architecture docs để khám phá khả năng kết hợp với cơ sở dữ liệu đa dụng
    • Ví dụ: tích hợp cùng PostgreSQL hoặc FoundationDB để mở rộng use case

7. CockroachDB: cơ sở dữ liệu toàn cầu

  • CockroachDB là cơ sở dữ liệu phân tán toàn cầu
    • Tương thích với PostgreSQL wire protocol, hỗ trợ mở rộng ngang và tính nhất quán mạnh
    • Thiết kế lấy cảm hứng từ Google Spanner, cho phép mở rộng cơ sở dữ liệu trên nhiều khu vực
  • Các đặc điểm kỹ thuật chính của CockroachDB
    • Công nghệ đồng bộ thời gian:
      • Google Spanner dùng atomic clock và GPS clock, còn CockroachDB được thiết kế để chạy trên phần cứng phổ thông
      • Bù trễ đồng bộ dựa trên NTP, so sánh clock drift giữa các node và loại thành viên khi vượt quá mức offset tối đa
    • Cấu hình đa khu vực:
      • Tính năng Table Localities cho phép tối ưu theo trade-off giữa đọc và ghi
      • Dữ liệu được phân tán theo vị trí địa lý của người dùng để cải thiện hiệu năng và độ trễ
  • Đề xuất học cách dùng CockroachDB
    • Triển khai lại ví dụ MovR:
      • Xây dựng MovR (ví dụ ứng dụng phân tán) bằng ngôn ngữ và framework bạn muốn
    • Thử nghiệm thiết kế ứng dụng toàn cầu bằng cách tận dụng chiến lược đa khu vực và mở rộng của CockroachDB
  • Lý do chọn CockroachDB
    • Khác với các cơ sở dữ liệu phân tán khác như DynamoDB, có thể chạy miễn phí trên môi trường local
    • Cung cấp những đặc tính khác biệt là tính nhất quán mạnh và hỗ trợ phân tán toàn cầu

Wrap Up

  • Các cơ sở dữ liệu được giới thiệu đều được thiết kế để giải quyết những bài toán và yêu cầu khác nhau
  • Trong năm 2025, hãy thử học những cơ sở dữ liệu này và khám phá các cách giải quyết vấn đề thú vị, sáng tạo hơn!

14 bình luận

 
wfedev 2025-11-28

Truy vấn mọi thứ! 😆🐤

 
budaestew 2024-12-16

Tôi thực sự bất ngờ vì hiệu năng phân tích của DuckDB lại xuất sắc hơn mong đợi.

 
halfenif 2024-12-09

Đã nhiều tháng nay tôi đang xử lý dữ liệu theo ngày với sqlite, ở mức khoảng 2 triệu bản ghi và 5GB.

Tốc độ xử lý thì tôi khá hài lòng, nhưng sau khi gia công xong, việc tạo lại thành file Excel để cung cấp cho các bên liên quan đang mất quá nhiều thời gian.

Có lẽ tôi cần tìm hiểu thêm về cách dùng OpenPyXl.

 
kimjj81 2024-12-18

Không rõ có phép màu gì, nhưng có vẻ họ dùng tổ hợp duckDB + sqlite.

 
channprj 2024-12-09

Thật bất ngờ là MongoDB lại không được nhắc đến.

 
felizgeek 2024-12-09

Nếu bạn lo về đường cong học tập của lập trình viên, tôi khuyên dùng SQLite. Nó dựa trên tệp nên khá dễ dùng.

 
savvykang 2024-12-09

Nếu chắc chắn không có yêu cầu truy cập từ xa thì đây thực sự là một giải pháp rất đáng hài lòng. Không còn điểm phải quản lý DB, việc chỉnh sửa dữ liệu cũng như sao lưu/khôi phục cũng đơn giản nên rất tốt.

 
aer0700 2024-12-09

Mỗi khi nói sẽ dùng SQLite thì rất dễ bị chê bai, nhưng trước khi bạn nói là mình đã dùng SQLite thì lại chẳng ai nhận ra cả... SQLite tốt hơn bạn nghĩ đấy.

 
jpumpkin94 2024-12-09

Tôi đã dùng MySQL suốt hàng chục năm (??),
nhưng PostgreSQL thì thế nào? Mong nhận được nhiều bình luận từ những anh chị đang dùng PostgreSQL trong môi trường production thực tế.

 
zuppiy 2024-12-09

"Voi vượt trội hơn hải cẩu"
Điều này đúng trong hầu hết các tình huống

 
roxie 2024-12-11

hahahaha

 
kibae 2024-12-09

Năm 2001, tôi đã chuyển từ mysql đầy lỗi (lúc đó là v3.x) sang pgsql.
Có nhiều điểm tôi cho là vượt trội, nhưng... trong thực tế, tôi nghĩ sự tồn tại của Partial Index mới là tính năng mạnh mẽ nhất.

 
chanhee 2024-12-09

Vì công việc ở công ty nên tôi chỉ dùng Oracle và SQL Server, đến khi thử dùng MySQL thì có quá nhiều thứ khiến tôi phải thốt lên kiểu như "Tại sao cái này lại không được nhỉ?". Tôi cũng không còn nhớ chính xác nữa. Cuối cùng thì tôi đã chuyển sang Postgres.

 
bbulbum 2024-12-09

Tôi từng dùng Postgres rồi chuyển sang một nơi dùng MySQL, và có khá nhiều lúc tôi cảm thấy kiểu như: tại sao cái này lại không làm được? tại sao cái này lại không ra hiệu năng như vậy?
Tôi không nhớ chính xác đó là những gì (có thể là chuyện nhỏ mà cũng có thể không).