UUID trong cơ sở dữ liệu

UUID (Các công cụ liên kết Id duy nhất phổ biến) Là các giá trị 128-bit được sử dụng trong cơ sở dữ liệu, trong số những thứ khác, để xác định duy nhất các mục nhập của bảng. Chúng được biểu diễn dưới dạng một chuỗi thập lục phân được chia thành năm nhóm được phân tách bằng dấu gạch ngang (Ví dụ: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). Có nhiều Thảo luận về ưu điểm và nhược điểm của UUID trong cơ sở dữ liệu - chúng không thể thiếu trong hệ thống phân tán.


Trong các ứng dụng microservices và đa thuê nhà, do đó, nên xem xét việc giới thiệu các UUID. Việc chuyển từ kiểu dữ liệu BigInteger sang UUID (một biến thể có thể sắp xếp của UUID phiên bản 4 từ đặc tả RFC 4122 ) trong PHP framework Laravel được thực hiện nhanh chóng: Đầu tiên, chúng tôi tạo một đặc điểm mới:

2aa7136d977617159be1834eaf40e871

Sau đó, chúng tôi thêm tất cả các mô hình của chúng tôi:

2aa7136d977617159be1834eaf40e871

Trong Laravel 9⁺ điều này thậm chí còn dễ dàng hơn: ở đây chúng ta đã có sẵn đặc tính HasUuids để sử dụng. Ngoài ra, khung công tác cũng cung cấp hỗ trợ cho ULID kiểu dữ liệu liên quan, nhưng vẫn chưa được biết đến, điều này có thể thú vị do khả năng đọc và khả năng sắp xếp tốt hơn.

Phần khó khăn là việc di chuyển dữ liệu hiện có. Đại khái người ta có thể tiến hành như sau:

  1. Thêm các cột UUID mới có giá trị trống vào tất cả các bảng
    (mỗi cột dựa trên tất cả các cột khóa chính và khóa ngoài)
  2. Ghi giá trị UUID vào các cột mới
    (với các khóa chính tăng dần cộng với các khóa ngoại được cập nhật)
  3. Xóa các cột ban đầu
  4. Đổi tên các cột mới

Có một số thách thức ở đây: Quá trình di chuyển mất nhiều thời gian và các cột mới được thêm vào cuối bảng (giải pháp khả thi: các cột nghỉ dưỡng ). Một cách trực tiếp hơn nhiều là chuyển đổi trực tiếp các cột.

Nếu bạn đặt nó PostgreSQL một, bạn có thể (tất nhiên sau khi sao lưu trước đó) chạy truy vấn sau, ví dụ: (trước đó bạn có thể xóa tất cả các bảng mà bạn loại trừ trong Z. 19/31 thay thế, cũng như sở hữu các quy tắc đặc biệt trong Z. 37/39 thêm) và sao chép tất cả các truy vấn được tạo từ nó:

2aa7136d977617159be1834eaf40e871

Nếu bây giờ bạn chạy các truy vấn được tạo cùng nhau, bạn đã di chuyển cơ sở dữ liệu trong một thời gian ngắn. Mặc dù các UUID được tạo ra do đó không tuân theo đặc điểm kỹ thuật v4, nhưng về mặt hình học, chúng có thứ tự tương tự như các mục trước đó, không xung đột với các UUID mới (trong nhóm thứ 3 trong v4 luôn có một 4, luôn là một trong các biến thể đã di chuyển 0), cũng có nghĩa là UUID mới luôn lớn hơn UUID đã di chuyển.

Sau đó, bạn nên xóa tất cả các bộ đệm Laravel (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*) và các phiên chạy (rm -f storage/framework/sessions/*) để trống. Tất nhiên, toàn bộ điều cũng có thể được thực hiện trong quá trình di chuyển Laravel:

2aa7136d977617159be1834eaf40e871

Thay vào đó, sau khi chuyển đổi, người ta sẽ sử dụng trong các lần di chuyển trong tương lai bigIncrements hoặc. bigInteger sau đó uuid:

2aa7136d977617159be1834eaf40e871

Trở lại