Công cụ dành cho nhà phát triển · Trình chuyển đổi dấu thời gian Unix
Số nguyên kỷ nguyên so với cột dấu thời gian: tại sao đơn vị thuộc về lược đồ
· Tại sao nó quan trọng
dấu thời gian cơ sở dữ liệu data-formats
Việc lưu trữ thời gian dưới dạng một kỷ nguyên số nguyên rất đơn giản và có thể mang theo được nhưng chỉ khi mọi người đồng ý về đơn vị và vùng. Bài đăng này cân nhắc các số nguyên so với các loại dấu thời gian gốc và lập luận rằng dù bạn chọn loại nào thì đơn vị cũng phải được ghi lại.
đã tạo_at: 1700000000 hay 1700000000000? — cột mà hai cơ quan viết bằng các đơn vị khác nhau trong sáu tháng
Cột có tên `created_at` chứa cả 1,738,578,000 và 1,738,578,000,000 không thể được diễn giải một cách nhất quán. Việc sắp xếp số lượng các nhà văn theo tỷ lệ thay vì theo trình tự thời gian và việc tự động phát hiện ở mỗi người đọc sẽ che giấu lỗi thay vì sửa chữa nó. Lược đồ không bảo toàn được đơn vị được yêu cầu.
Trước khi di chuyển, hãy lập hồ sơ giá trị theo nhà sản xuất và so sánh các hàng đại diện với bằng chứng sự kiện độc lập. Đừng phân chia tất cả các giá trị dài một cách mù quáng; một cột hỗn hợp cần có nguồn gốc xuất xứ hoặc phân loại được giới hạn cẩn thận. ToolAcre giúp kiểm tra mẫu nhưng không suy ra dịch vụ nào đã viết mỗi hàng.
Mức độ hỗn hợp cũng có thể làm sai lệch các chỉ mục và truy vấn lưu giữ trước khi bất kỳ ai mở một hàng. Hãy coi việc phát hiện là một sự cố về tính toàn vẹn của dữ liệu chứ không chỉ đơn thuần là lỗi định dạng ở một ứng dụng khách.
Trường hợp dành cho các kỷ nguyên số nguyên - tính di động, sắp xếp, số học và tính độc lập khỏi cài đặt múi giờ của cơ sở dữ liệu
Một kỷ nguyên số nguyên rất nhỏ gọn để trao đổi và dễ so sánh khi gốc, đơn vị và chiều rộng cố định. Nó tránh văn bản có định dạng miền địa phương trong bộ lưu trữ và hỗ trợ số học thời lượng sau khi chuẩn hóa. Những lợi ích đó đến từ hợp đồng xung quanh con số chứ không phải từ chính INTEGER.
Chi phí xuất hiện khi không có hợp đồng đó: con người không thể đọc giá trị trực tiếp, một khách hàng chung có thể làm tròn số nguyên lớn và loại cột không nói gì về giây so với mili giây. Thêm hậu tố đơn vị hoặc mô tả lược đồ và xác thực người viết ở ranh giới.
Hợp đồng số nguyên cũng phải nêu rõ làm tròn cho đầu vào dưới giây. Làm sàn, cắt bớt hoặc làm tròn có thể gán các sự kiện ranh giới cho các giây khác nhau ngay cả khi tỷ lệ chính xác.
Các kỷ nguyên số nguyên đưa ra sự trao đổi số đơn giản, với sự cân bằng được xác định bởi lược đồ xung quanh
Loại tạm thời gốc cơ sở dữ liệu có thể hiển thị các hoạt động ngày có thể đọc được và từ chối một số đầu vào không hợp lệ, nhưng phạm vi, ngữ nghĩa múi giờ và kết xuất ứng dụng khách khác nhau tùy theo công cụ và loại. Kho lưu trữ dấu thời gian không chứa bộ điều hợp cơ sở dữ liệu, vì vậy nó không thể xếp hạng các sản phẩm đó hoặc đảm bảo “nhận thức” về một tên loại chung.
Đọc tài liệu hiện tại của động cơ đã chọn và kiểm tra trình điều khiển. Một số máy khách có thể trả về chuỗi, đối tượng Ngày hoặc giá trị được điều chỉnh theo vùng. Loại gốc chỉ giảm bớt một số sự mơ hồ nhất định khi hiểu được loại chính xác và hành vi phiên; nó không phải là sự thay thế phổ biến cho mô hình thời gian ứng dụng.
Hành vi dấu thời gian gốc dành riêng cho cơ sở dữ liệu và phải được xác minh trong công cụ đó
Số nguyên có dấu hẹp và số nguyên rộng có phạm vi khác nhau, nhưng chiều rộng vẫn không mã hóa tỷ lệ. BIGINT có thể giữ nhiều mili giây một cách an toàn trong khi vẫn không được đặt tên về mặt ngữ nghĩa. Ngược lại, trường 32-bit giây tiếp cận một ranh giới đã biết mặc dù các giá trị của nó ngày nay trông bình thường.
Sổ làm việc được yêu cầu nhận xét là bản ghi duy nhất, quá tuyệt đối. Tên, loại miền, ràng buộc, lược đồ được tạo và thông số kỹ thuật API đều có thể mang đơn vị. Sử dụng nhiều hơn một lớp có thể thực thi được. Nhận xét của con người giúp ích cho người đánh giá, trong khi mã và xác thực ngăn người viết âm thầm chuyển đổi quy mô.
Độ rộng trường và đơn vị là các quyết định lược đồ độc lập
Giả sử một hàng được tạo trong quá trình triển khai 2025 đã biết chứa `1738578060000`. Sau một phần nghìn giây, nó sẽ trở thành `2025-02-03T10:21:00.000Z`; tính bằng giây, nó nằm ngoài mong đợi thông thường và có thể vượt quá phạm vi của người tiêu dùng. Hàng lân cận `1738578060` ánh xạ tới cùng thời điểm tính bằng giây.
Cặp đó gợi ý các đơn vị hỗn hợp nhưng không chứng minh được người viết chịu trách nhiệm. Nhóm theo phiên bản dịch vụ, đường dẫn nhập hoặc cường độ, sau đó xác minh một số sự kiện đã biết. Bảo tồn các bản sao lưu và nhật ký di chuyển. Trình chuyển đổi là một ống kính kiểm tra, không phải là một công cụ viết lại hàng loạt.
Kiểm tra một số ngày trong khoảng thời gian bị ảnh hưởng. Một sự trùng khớp ngẫu nhiên có thể gây hiểu lầm, trong khi một mẫu nhất quán dành riêng cho nhà sản xuất hỗ trợ quy tắc di chuyển có kiểm soát.
Ví dụ đã hoạt động: xác định thang đo của cột kế thừa đáng ngờ từ các bản ghi đã biết
Ngăn chặn sự tái diễn bằng cách đặt tên các trường thô `created_at_s` hoặc `created_at_ms`, phân tích cú pháp tại một bộ chuyển đổi và hiển thị một loại tức thì nội bộ duy nhất. Lưu trữ UTC tức thời; chỉ áp dụng cách trình bày cục bộ ở các cạnh hướng tới người dùng. Nếu thích hợp hơn giá trị văn bản API thì hãy yêu cầu giá trị bù trừ rõ ràng hoặc Z.
Các thử nghiệm sẽ gửi các giá trị có thể phân biệt được qua mọi ranh giới tuần tự hóa. Số 0 là một kết quả kém vì cả hai thang đo đều đồng ý. Xác nhận ISO cố định ngay lập tức và khứ hồi thông qua trình điều khiển thực tế. Điều đó cho thấy sự mất mát đơn vị trước khi hai dịch vụ điền vào một cột khác nhau trong nhiều tháng.
Trong quá trình di chuyển, hãy từ chối các thao tác ghi mới vi phạm hợp đồng đã chọn trước khi sửa các hàng cũ. Nếu không, quá trình dọn dẹp sẽ chạy đua với nguồn hoạt động tiếp tục tạo dữ liệu hỗn hợp.
Điều này không bao gồm những gì — các hàm dành riêng cho cơ sở dữ liệu như FROM_UNIXTIME và to_timestamp, khác nhau tùy theo công cụ
Bài viết này không quy định `FROM_UNIXTIME`, `to_timestamp` hoặc các chức năng tương đương. Đơn vị đầu vào, phạm vi và tương tác vùng của chúng thuộc về các công cụ và phiên bản cụ thể, không có phiên bản nào trong số đó là một phần của quá trình triển khai ToolAcre. Sao chép tên hàm trên cơ sở dữ liệu có thể tạo ra sự mơ hồ khi xem xét.
Sử dụng tài liệu của nhà cung cấp và bảng dùng một lần để chứng minh chuyển đổi trước khi di chuyển. Giữ các phép biến đổi ứng dụng và cơ sở dữ liệu không áp dụng cùng một hệ số hoặc độ lệch. Một chuyển đổi được sở hữu tốt sẽ dễ kiểm tra hơn một chuỗi chuyển đổi tiềm ẩn.
Chạy chức năng cơ sở dữ liệu đối với các điểm cố định ranh giới trong cùng cài đặt phiên như phiên bản sản xuất. Giá trị mặc định của vùng phiên có thể thay đổi kết quả văn bản ngay cả khi số học kỷ nguyên chính xác.
Bài học rút ra: lược đồ là nơi đơn vị tồn tại - và cách trình chuyển đổi dấu thời gian Unix giúp bạn kiểm tra dữ liệu hiện có bằng cách nêu rõ đơn vị được áp dụng
Lược đồ phải làm cho việc thể hiện dấu thời gian không gây ngạc nhiên cho mọi người viết và người đọc. Số nguyên có thể thích hợp; các cột thời gian gốc có thể phù hợp. Một thang đo không tên thì không. Chọn một hợp đồng, thực thi nó và coi việc chuyển đổi là một hoạt động có ranh giới rõ ràng.
Đối với dữ liệu cũ, hãy kiểm tra các mẫu trong cả hai đơn vị, liên hệ chúng với các sự kiện đã biết và ghi lại độ không chắc chắn. Lựa chọn đơn vị hiển thị của ToolAcre hỗ trợ việc điều tra đó nhưng quyết định di chuyển cuối cùng phải xuất phát từ nguồn gốc và ngữ nghĩa thực tế của cơ sở dữ liệu.
Việc xem xét lược đồ chỉ hoàn tất khi người viết, người đọc, người lập chỉ mục và công việc lưu giữ có chung một mô hình. Chỉ việc sửa nhận xét cột sẽ giữ nguyên sự mơ hồ khi thực thi.