Quản lý phiên bản database với LiquiBase

Việc quản lý phiên bản đối với code đã xuất hiện từ rất lâu và đã có rất nhiều các phần mềm dành cho nó. Theo mình biết và đã từng sử dụng đó là

  • SVN (tiếp cận khá nhiều, coi như đầu tiên, khá cũ và có một số nhược điểm nhưng dễ dùng, phù hợp với các dự án về C#)
  • GIT (cái này khá tiên tiến, mạnh mẽ, càng ngày càng nhiều người dùng, Gitlab, GitHub…)
  • Source Safe (Visual Source Safe) được mua và tiếp tục phát triển bới Microsoft. Cái này mình mới nghe qua chứ chưa dùng bao giờ.

Đó là với code, thế với database thì như thế nào? Trước đây đúng là thuộc dạng 5 mức ngu dốt luôn. Đồng nghiệp hỏi làm mình đứng hình vì còn chưa bao giờ nghĩ đến nó cơ. Tìm hiểu thêm thì biết đúng là nó có tồn tại nhưng còn rất sơ khai. Mặc dù rất quan trọng nhưng lại rất sơ khai do tính đặc thù và khó khăn của nó.

Đại loại là trong quá trình phát triển phần mềm, nhiều phiên bản được nâng cấp và cải thiện, những thay đổi nhỏ thì chỉ cần sửa code nhưng với những thay đổi lớn thì có thể phải sửa cả việc thiết kế cơ sở dữ liệu. Để quản lý việc sửa đổi này thì ta cũng phải có công cụ tương đương như việc quản lý version của code.

Trước đây công ty cũ mình mua phần mềm nước ngoài thì khi nâng cấp nó sẽ gửi cho mình bản code nó đã build. Còn về phần mềm nó sẽ vứt do một loại các kettel Pentaho để chạy theo tuần tự để nâng cấp version cho Database, gọi với cái tên mỹ miều là Migrate dữ liệu.

Tìm hiểu qua thì mình thấy 3 cái tên được nhắc đến nhiều là:

  • SQL Server Data Tools: Cái này của Microsoft, mới nghe qua tên thôi, chắc chỉ support cho SQL Server
  • Flyway: Mới nghe đến tên
  • Liquibase: Thằng này hiện công ty mình đang dùng và được nghe nói đến nhiều nhất. Đang dùng nó để thay đổi với Oracle đi kèm là code ứng dụng bằng Java.

Đối với mình thì hiện tại chưa phải dùng đến nó nhưng chắc chắc sẽ tìm hiểu kỹ hơn về vấn đề này. Đặc biệt là đối với Liquibase để xem cách sử dụng với các trường hợp sử dụng nó như thế nào.

Hiện tại đối với mình quản lý thủ công bằng SVN hoặc GIT đó là viết ra các script thay đổi về DB để lưu trữ lại thôi. Phức tạp và cả team, nhiều team dùng thì chưa nghĩ đến.

Database versioning hoặc Database migration

Database versioning hoặc Database migration

Trong quá trình làm việc tại đơn vị mới mình có tiếp cận với một khái niệm mới về việc quản trị DB đó là quản lý version Database. Nôm na thì ta đã quen thuộc với GIT, SVN… dành cho Code rồi, nhưng với Database thì nếu như phát triển phần mềm theo mô hình thác nước thì DB phải được tạo đầu tiên và không được thay đổi. Nhưng nếu phải thay đổi thì sao? Hoặc là phát triển phần mềm theo mô hình Scrum thì việc quản trị DB sẽ như thế nào?

Việc quản lý version database được ứng dụng trong các trường hợp sau:
– Database versioning: Mô hình phát triển phần mềm theo mô hình Scrum, đối với mỗi phiên bản sẽ có code và database là khác nhau…
– Database migration: Trong mô hình thác nước, việc thay đổi phần mềm là tất yếu khi muốn nâng cấp tính năng mới. Dữ liệu sẽ được thay đổi theo việc code hoặc đơn giản là chuyển đổi sang hệ quản trị cơ sở dữ liệu mới như từ MSSQL sang Oracle…

Ý tưởng chính của việc quản lý version là lưu từng bước thay đổi về mặt DB vào các cấu hình theo từng file ứng với mỗi version. Từ đó khi tiến hành cập nhật thì chạy đúng theo cấu hình.
Ví dụ:
Từ version 1.0 -> 1.1: Tiến hành thêm mới 2 table
Từ version 1.1 -> 1.2: Tiến hành sử cấu trúc 1 table
Từ version 1.2 -> 1.3: Tiến hành thêm mới 1 table và thay đổi lại quan hệ giữa các bảng

Như vậy khi cập nhật phiên bản mới thì phải chạy đúng lần lượt từng bước để việc thay đổi này phù hợp với phần mềm.
Việc thay đổi này không đơn giản là chỉ thay đổi về mặt cấu trúc của Database mà có thể phải thay đổi cả dữ liệu trong các bảng hoặc quan hệ giữa các bảng.

Nổi bật phần mềm liên quan đến lĩnh vực này là: Liquibase, Flyway…