So sánh và lựa chọn các hệ thống di chuyển dữ liệu

So sánh và lựa chọn các hệ thống di chuyển dữ liệu

So sánh và lựa chọn các hệ thống di chuyển dữ liệu

Mô hình dữ liệu có xu hướng thay đổi trong quá trình phát triển và đến một lúc nào đó nó không còn tương ứng với cơ sở dữ liệu nữa. Tất nhiên, cơ sở dữ liệu có thể bị xóa và sau đó ORM sẽ tạo một phiên bản mới phù hợp với mô hình, nhưng quy trình này sẽ dẫn đến mất dữ liệu hiện có. Do đó, chức năng của hệ thống di chuyển là đảm bảo rằng, do thay đổi lược đồ, nó được đồng bộ hóa với mô hình dữ liệu trong ứng dụng mà không làm mất dữ liệu hiện có.

Trong bài viết này, chúng tôi muốn xem xét các công cụ khác nhau để quản lý việc di chuyển cơ sở dữ liệu. Chúng tôi hy vọng bài đánh giá này sẽ hữu ích cho các nhà phát triển đang phải đối mặt với lựa chọn tương tự.

Nhiệm vụ

Công ty chúng tôi hiện đang tích cực phát triển thế hệ sản phẩm tiếp theo – Docs Security Suite (DSS). Phần máy chủ được viết bằng .Net Core và Entity Framework Core được sử dụng làm DBMS. Khi thiết kế một ứng dụng, chúng tôi sử dụng phương pháp Code First.

Mô hình miền ứng dụng được tạo bởi một số nhà phát triển cùng lúc - mỗi nhà phát triển chịu trách nhiệm về phần logic riêng của hệ thống.

Thế hệ DSS trước đây đã sử dụng Di chuyển khung thực thể cổ điển (EF 6) làm hệ thống quản lý di chuyển. Tuy nhiên, đã có một số phàn nàn chống lại nó, nguyên nhân chính là EF thiếu cách tiếp cận lành mạnh để giải quyết xung đột phiên bản. Thực tế này vẫn khiến chúng tôi khó chịu khi sửa lỗi như một phần hỗ trợ, vì vậy chúng tôi quyết định xem xét các lựa chọn thay thế.

Kết quả của cuộc thảo luận, các yêu cầu sau đối với hệ thống quản lý di chuyển đã được hình thành:

  1. Hỗ trợ cho nhiều DBMS khác nhau. Cần có MS SQL Server, PostgreSQL, Oracle, nhưng có thể sử dụng những cái khác
  2. Làm việc với ORM. Ban đầu, dự định sử dụng EF Core, nhưng ở giai đoạn thiết kế, chúng tôi đã sẵn sàng xem xét các ORM khác
  3. Tự động tạo di chuyển. Khi tính đến sự phát triển của Code First, tôi muốn tránh việc phải di chuyển "viết tay"
  4. Phiên bản xung đột. Trong môi trường phát triển phân tán, khi sáp nhập EF Core có thể gặp xung đột. Điều này trở thành một vấn đề nghiêm trọng vì các phần khác nhau của ứng dụng được tạo bởi các nhà phát triển khác nhau, do đó bạn phải dành nhiều thời gian cho mỗi phần.
  5. Tài liệu và hỗ trợ nâng cao. Ở đây, đối với chúng tôi, dường như không cần phải giải thích
  6. Miễn phí. Tiêu chí này có điều kiện, vì hệ thống không quá đắt hoặc đắt tiền nhưng lại lý tưởng về mặt tiện lợi nên chúng tôi cũng sẵn sàng xem xét

Sau một cuộc nghiên cứu nhỏ, chúng tôi đã tìm thấy và thấy các lựa chọn sau đây đáng được xem xét:

  1. Di chuyển cốt lõi của EF
  2. DBup
  3. Nhà TrònE
  4. ThinkHome.Migrator
  5. Người di cư thông thạo

Và bây giờ chi tiết hơn một chút

So sánh và lựa chọn các hệ thống di chuyển dữ liệu
Di chuyển lõi EntityFramework

Đương nhiên, đây là lựa chọn đầu tiên và chính. Một nhạc cụ bản địa có thể hoạt động ngay lập tức mà không cần phải loay hoay với tambourine. Một lượng lớn tài liệu, chính thức và không như vậy, đơn giản, v.v. Tuy nhiên, những lời phàn nàn về EF cổ điển cũng khá phù hợp với EF Core.

Do đó, những ưu điểm của EF Core được nêu bật:

  • Hỗ trợ của Microsoft, tài liệu, bao gồm cả tiếng Nga, cộng đồng lớn
  • Tự động tạo di chuyển dựa trên CodeFirst
  • So với EF 6, EF Core không còn lưu trữ ảnh chụp nhanh cơ sở dữ liệu nữa. Khi làm việc với EF Core trong Code First, không cần triển khai cơ sở dữ liệu nữa
  • Vì chúng ta đang bắt đầu từ Code First nên có thể tiến hành một lần di chuyển tới tất cả các nhà cung cấp quyền truy cập dữ liệu được yêu cầu
  • Về các nhà cung cấp, PostgreSQL được hỗ trợ, Oracle được hỗ trợ, v.v., v.v. và thậm chí cả MS SQL Server 

Và còn những nhược điểm:

  • Giải quyết xung đột vẫn ở mức độ tương tự. Cần phải di chuyển theo trình tự và cập nhật ảnh chụp nhanh cơ sở dữ liệu
  • Sự phụ thuộc vào các mô hình mà quá trình di chuyển được tạo ra

DbUp

So sánh và lựa chọn các hệ thống di chuyển dữ liệu
dbup.github.io

DbUp là thư viện .NET được NuGet cài đặt và giúp đẩy các thay đổi lên SQL Server. Nó theo dõi những tập lệnh thay đổi nào đã được thực thi và chạy những tập lệnh cần thiết để cập nhật cơ sở dữ liệu. Thư viện này phát triển từ một dự án dành cho công cụ viết blog nguồn mở trên ASP.NET và tồn tại theo giấy phép MIT, đồng thời mã có trên GitHub. Việc di chuyển được mô tả bằng T-SQL.

Các lợi thế là gì:

  • Hỗ trợ số lượng lớn DBMS (MS SQL Server, PstgreSQL, MySQL)
  • Vì các tập lệnh được viết bằng T-SQL nên chúng trông khá đơn giản
  • Xung đột cũng được giải quyết bằng SQL

Và nhược điểm:

  • Với tất cả các DBMS được hỗ trợ đa dạng, Oracle không phải là một trong số đó
  • Không tương tác với ORM
  • Viết tập lệnh T-SQL bằng tay không phải là điều chúng tôi hướng tới
  • Tài liệu và cộng đồng ở mức bình thường, mặc dù về mặt viết tập lệnh SQL thì chúng có thể không cần thiết.

Nhà TrònE

So sánh và lựa chọn các hệ thống di chuyển dữ liệu
github.com/chucknorris/roundhouse

Công cụ quản lý di chuyển này, được phân phối theo giấy phép Apache 2.0, giống như công cụ trước đó, chạy trên công cụ di chuyển T-SQL. Rõ ràng, các nhà phát triển ưu tiên giải quyết các vấn đề kỹ thuật liên quan đến hỗ trợ DBMS hơn là tạo ra một quy trình phát triển thoải mái.

Ưu điểm:

  • Hỗ trợ DBMS cần thiết (bao gồm cả Oracle)

Nhược điểm:

  • Oracle (cũng như Access, không liên quan đến chúng tôi) không được hỗ trợ trên .NET Core, chỉ trên .NET Full Framework
  • Không hoạt động với ORM
  • Thậm chí còn có ít tài liệu hơn công cụ trước đó
  • Một lần nữa – việc di chuyển được viết bằng tập lệnh

ThinkHome.Migrator

So sánh và lựa chọn các hệ thống di chuyển dữ liệu

Một công cụ để di chuyển lược đồ cơ sở dữ liệu đã được phiên bản sang nền tảng .NET Core, được phân phối theo giấy phép MIT. Chính nhà phát triển đã viết về phiên bản mới nhất của mình gần một năm trước.

Ưu điểm:

  • Được thiết kế cho .NET Core
  • Đã thực hiện một chuỗi di chuyển phân nhánh
  • Đã triển khai ghi nhật ký di chuyển

Nhược điểm:

  • Cập nhật lần cuối cách đây một năm. Rõ ràng dự án không được hỗ trợ
  • Không được Oracle hỗ trợ (bài viết nói rằng điều này là do việc triển khai .NET Core chưa ổn định - nhưng đây là một năm trước)
  • Không có quá trình di chuyển tự động

Nhìn chung, dự án có vẻ đầy hứa hẹn, đặc biệt nếu nó được phát triển, nhưng chúng tôi cần phải đưa ra quyết định ngay bây giờ.

Người di cư thông thạo

So sánh và lựa chọn các hệ thống di chuyển dữ liệu
github.com/fluentmigrator/fluentmigrator

Công cụ di chuyển phổ biến nhất với lượng lớn người hâm mộ. Được phân phối theo giấy phép Apache 2.0. Như đã nêu trong phần mô tả, đây là một khung di chuyển cho .NET, tương tự như Di chuyển Ruby on Rails. Các thay đổi đối với lược đồ cơ sở dữ liệu được mô tả trong các lớp C#.

Có những lợi thế ở đây:

  • Hỗ trợ cho DBMS cần thiết
  • Hỗ trợ .NET Core
  • Cộng đồng phát triển lớn
  • Xung đột giữa các lần di chuyển được giải quyết tuần tự—thứ tự thực hiện các lần di chuyển được chỉ định. Ngoài ra, nếu xảy ra xung đột xung quanh một thực thể, khi hợp nhất mã, nó sẽ được giải quyết theo cách tương tự như đối với phần còn lại của mã.
  • Có những hồ sơ được thực thi sau khi di chuyển thành công. Và chúng có thể mang các chức năng dịch vụ. Bản cập nhật cuối cùng là một tháng trước, tức là dự án vẫn còn sống

Đối với các nhược điểm, đây là:

  • Không có quá trình di chuyển tự động
  • Không có kết nối với các mẫu EF
  • Không có ảnh chụp nhanh cơ sở dữ liệu

Sự lựa chọn của chúng tôi là gì?

So sánh và lựa chọn các hệ thống di chuyển dữ liệu

Các cuộc tranh luận sôi nổi xoay quanh hai thông số - tạo ra sự di chuyển tự động và giải quyết xung đột một cách lành mạnh. Các yếu tố khác ít đáng sợ hơn nhiều. Do đó, dựa trên kết quả thảo luận, nhóm đã quyết định sử dụng Fluent Migrator trong dự án mới. Bởi việc giải quyết mâu thuẫn trong tương lai sẽ mang lại nhiều lợi ích hơn.

Những phát hiện

Tất nhiên, không có công cụ hoàn hảo. Vì vậy, chúng tôi phải ưu tiên những “mong muốn” của mình để đưa ra lựa chọn. Tuy nhiên, đối với các nhóm và nhiệm vụ khác, các yếu tố khác có thể mang tính quyết định. Chúng tôi hy vọng bài viết này sẽ giúp bạn đưa ra lựa chọn.

Nguồn: www.habr.com

Thêm một lời nhận xét