ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวแปลงการประทับเวลา Unix

จำนวนเต็ม Epoch เทียบกับคอลัมน์การประทับเวลา: เหตุใดหน่วยจึงอยู่ในสคีมา

· เหตุใดจึงสำคัญ

การประทับเวลา ฐานข้อมูล ข้อมูลรูปแบบ

คอลัมน์จำนวนเต็มและคอลัมน์วันที่-เวลาป้อนข้อมูลทันใจเดียวกัน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

การจัดเก็บเวลาเป็นยุคจำนวนเต็มนั้นง่ายและพกพาได้ แต่ถ้าทุกคนเห็นด้วยกับหน่วยและโซนเท่านั้น โพสต์นี้จะชั่งน้ำหนักจำนวนเต็มเทียบกับประเภทการประทับเวลาดั้งเดิม และโต้แย้งว่าไม่ว่าคุณจะเลือกแบบใด หน่วยจะต้องถูกเขียนลงไป

create_at: 1700000000 หรือ 1700000000000? — คอลัมน์ที่บริการทั้งสองเขียนในหน่วยที่แตกต่างกันเป็นเวลาหกเดือน

คอลัมน์ชื่อ `created_at` ที่มีทั้ง 1,738,578,000 และ 1,738,578,000,000 ไม่สามารถตีความได้อย่างสม่ำเสมอ การเรียงลำดับผู้เขียนจะแยกผู้เขียนตามขนาดมากกว่าลำดับเหตุการณ์ และการตรวจจับอัตโนมัติในผู้อ่านทุกรายจะซ่อนความเสียหายแทนที่จะซ่อมแซม สคีมาล้มเหลวในการเก็บรักษาหน่วยที่จำเป็น

ก่อนการย้าย ให้กำหนดโปรไฟล์ตามผู้ผลิต และเปรียบเทียบแถวตัวแทนกับหลักฐานเหตุการณ์ที่เป็นอิสระ อย่าแบ่งค่ายาวทั้งหมดแบบสุ่มสี่สุ่มห้า คอลัมน์แบบผสมต้องมีที่มาหรือการจัดหมวดหมู่ที่มีขอบเขตอย่างระมัดระวัง ToolAcre ช่วยตรวจสอบตัวอย่าง แต่ไม่ได้อนุมานว่าบริการใดเขียนในแต่ละแถว

ขนาดที่ผสมกันอาจบิดเบือนดัชนีและคิวรีการเก็บรักษาก่อนที่จะมีใครเปิดแถว ถือว่าการค้นพบเป็นเหตุการณ์ความสมบูรณ์ถูกต้องของข้อมูล ไม่ใช่แค่ข้อบกพร่องด้านการจัดรูปแบบในไคลเอ็นต์เพียงเครื่องเดียว

กรณีของยุคจำนวนเต็ม — ความสะดวกในการพกพา การเรียงลำดับ เลขคณิต และความเป็นอิสระจากการตั้งค่าโซนเวลาของฐานข้อมูล

ยุคจำนวนเต็มมีขนาดกะทัดรัดในการแลกเปลี่ยนและเปรียบเทียบได้ง่ายเมื่อแหล่งกำเนิด หน่วย และความกว้างได้รับการแก้ไข หลีกเลี่ยงข้อความที่จัดรูปแบบสถานที่ในพื้นที่จัดเก็บและรองรับการคำนวณระยะเวลาหลังจากการทำให้เป็นมาตรฐาน ผลประโยชน์เหล่านั้นมาจากสัญญาประมาณจำนวน ไม่ใช่จาก INTEGER เพียงอย่างเดียว

ต้นทุนจะปรากฏขึ้นเมื่อไม่มีสัญญา: มนุษย์ไม่สามารถอ่านค่าได้โดยตรง ไคลเอนต์ทั่วไปอาจปัดเศษจำนวนเต็มขนาดใหญ่ และประเภทคอลัมน์ไม่ได้พูดอะไรเกี่ยวกับวินาทีเทียบกับมิลลิวินาที เพิ่มส่วนต่อท้ายหน่วยหรือคำอธิบายสคีมา และตรวจสอบความถูกต้องของผู้เขียนที่ขอบเขต

สัญญาจำนวนเต็มควรระบุการปัดเศษสำหรับการป้อนข้อมูลรองวินาที การปูพื้น การตัดทอน หรือการปัดเศษสามารถกำหนดเหตุการณ์ขอบเขตให้กับวินาทีที่ต่างกัน แม้ว่ามาตราส่วนจะถูกต้องก็ตาม

ยุคจำนวนเต็มเสนอการแลกเปลี่ยนตัวเลขอย่างง่าย โดยมีการแลกเปลี่ยนที่กำหนดโดยสคีมาโดยรอบ

ประเภทชั่วคราวของฐานข้อมูลสามารถเปิดเผยการดำเนินการวันที่ที่อ่านได้และปฏิเสธอินพุตที่ไม่ถูกต้องบางส่วน แต่ช่วง ความหมายเขตเวลา และการเรนเดอร์ไคลเอ็นต์จะแตกต่างกันไปตามกลไกและประเภท พื้นที่เก็บข้อมูลการประทับเวลาไม่มีอะแดปเตอร์ฐานข้อมูล ดังนั้นจึงไม่สามารถจัดอันดับผลิตภัณฑ์เหล่านั้นหรือรับประกัน "การรับรู้" จากชื่อประเภททั่วไปได้

อ่านเอกสารปัจจุบันของเครื่องยนต์ที่เลือกและทดสอบไดรเวอร์ ไคลเอนต์บางรายอาจส่งคืนสตริง วัตถุวันที่ หรือค่าที่ปรับโซน ประเภทเนทิฟจะลดความคลุมเครือบางอย่างก็ต่อเมื่อเข้าใจประเภทและพฤติกรรมเซสชันที่แน่นอนเท่านั้น มันไม่ได้เป็นสิ่งทดแทนสากลสำหรับโมเดลเวลาของแอปพลิเคชัน

ลักษณะการประทับเวลาดั้งเดิมนั้นเฉพาะฐานข้อมูลและต้องได้รับการตรวจสอบในกลไกนั้น

จำนวนเต็มที่มีเครื่องหมายแคบและจำนวนเต็มกว้างมีช่วงที่แตกต่างกัน แต่ความกว้างยังคงไม่ได้เข้ารหัสสเกล BIGINT สามารถเก็บได้หลายมิลลิวินาทีอย่างปลอดภัยในขณะที่ยังไม่มีการตั้งชื่อเชิงความหมาย ในทางกลับกัน ฟิลด์ 32 บิตวินาทีจะเข้าใกล้ขอบเขตที่ทราบ แม้ว่าค่าของฟิลด์จะดูธรรมดาในปัจจุบันก็ตาม

สมุดงานอ้างว่าความคิดเห็นเป็นเพียงบันทึกเดียวซึ่งสมบูรณ์เกินไป ชื่อ ประเภทโดเมน ข้อจำกัด สคีมาที่สร้างขึ้น และข้อกำหนด API ล้วนสามารถพกพาหน่วยนี้ได้ ใช้เลเยอร์ที่บังคับใช้ได้มากกว่าหนึ่งเลเยอร์ ความคิดเห็นของมนุษย์ช่วยให้ผู้ตรวจสอบ ในขณะที่โค้ดและการตรวจสอบความถูกต้องป้องกันไม่ให้ผู้เขียนเปลี่ยนขนาดอย่างเงียบๆ

ความกว้างของฟิลด์และหน่วยเป็นการตัดสินใจสคีมาอิสระ

สมมติว่าแถวที่สร้างขึ้นระหว่างการใช้งาน 2025 ที่รู้จักมี `1738578060000` เมื่อเป็นมิลลิวินาที จะกลายเป็น `2025-02-03T10:21:00.000Z`; เนื่องจากวินาทีนั้นอยู่นอกเหนือความคาดหมายทั่วไปและอาจเกินขอบเขตของผู้บริโภค แถวใกล้เคียง `1738578060` แมปในช่วงเวลาเดียวกับวินาที

คู่นั้นแนะนำหน่วยผสม แต่ไม่ได้พิสูจน์ว่าผู้เขียนคนไหนรับผิดชอบ จัดกลุ่มตามเวอร์ชันบริการ เส้นทางการนำเข้าหรือขนาด จากนั้นตรวจสอบเหตุการณ์ที่ทราบหลายเหตุการณ์ เก็บรักษาข้อมูลสำรองและบันทึกการย้ายข้อมูล ตัวแปลงเป็นเลนส์สำหรับการตรวจสอบ ไม่ใช่กลไกการเขียนซ้ำจำนวนมาก

ตรวจสอบหลายวันตลอดระยะเวลาที่ได้รับผลกระทบ การจับคู่โดยบังเอิญรายการหนึ่งอาจทำให้เข้าใจผิด ในขณะที่รูปแบบเฉพาะของผู้ผลิตที่สอดคล้องกันสนับสนุนกฎการย้ายข้อมูลที่มีการควบคุม

ตัวอย่างการทำงาน: กำหนดขนาดของคอลัมน์เดิมที่น่าสงสัยจากบันทึกที่ทราบ

ป้องกันการเกิดซ้ำโดยการตั้งชื่อฟิลด์ดิบ `created_at_s` หรือ `created_at_ms` โดยแยกวิเคราะห์ที่อะแดปเตอร์ตัวเดียวและเปิดเผยประเภท Instant ภายในประเภทเดียว จัดเก็บ UTC ทันที; ใช้การนำเสนอในพื้นที่เฉพาะที่ขอบที่ผู้ใช้หันเข้าหากันเท่านั้น หากควรใช้ค่า API แบบข้อความ จำเป็นต้องมีออฟเซ็ตที่ชัดเจนหรือ Z

การทดสอบควรส่งค่าที่สามารถแยกแยะได้ทั่วทุกขอบเขตของการทำให้เป็นอนุกรม Zero เป็นฟิกซ์เจอร์ที่แย่เพราะทั้งสองสเกลเห็นด้วย ยืนยัน ISO แบบคงที่ทันทีและไปกลับผ่านไดรเวอร์จริง ซึ่งจะตรวจจับการสูญเสียหน่วยก่อนที่บริการทั้งสองจะเติมหนึ่งคอลัมน์ต่างกันเป็นเวลาหลายเดือน

ในระหว่างการย้ายข้อมูล ให้ปฏิเสธการเขียนใหม่ที่ละเมิดสัญญาที่เลือกก่อนที่จะซ่อมแซมแถวเก่า มิฉะนั้น การล้างข้อมูลจะแข่งกับแหล่งข้อมูลที่ใช้งานอยู่ซึ่งยังคงสร้างข้อมูลแบบผสมต่อไป

สิ่งนี้ไม่ครอบคลุม — ฟังก์ชันเฉพาะฐานข้อมูล เช่น FROM_UNIXTIME และ to_timestamp ซึ่งแตกต่างกันไปตามกลไก

บทความนี้ไม่ได้กำหนด `FROM_UNIXTIME`, `to_timestamp` หรือฟังก์ชันที่เทียบเท่า หน่วยอินพุต ช่วง และการโต้ตอบของโซนเป็นของกลไกและเวอร์ชันเฉพาะ ซึ่งไม่มีส่วนใดส่วนหนึ่งของการใช้งาน ToolAcre การคัดลอกชื่อฟังก์ชันข้ามฐานข้อมูลสามารถสร้างความกำกวมภายใต้การตรวจสอบได้

ใช้เอกสารของผู้ขายและตารางแบบใช้แล้วทิ้งเพื่อพิสูจน์ Conversion ก่อนการย้ายข้อมูล เก็บการแปลงแอปพลิเคชันและฐานข้อมูลจากทั้งการใช้ออฟเซ็ตหรือแฟคเตอร์เดียวกัน การแปลงที่มีเจ้าของเพียงรายการเดียวนั้นทดสอบได้ง่ายกว่าการถ่ายทอดแบบต่อเนื่องกัน

รันฟังก์ชันฐานข้อมูลกับการติดตั้งขอบเขตในการตั้งค่าเซสชันเดียวกันกับการใช้งานจริง ค่าเริ่มต้นของโซนเซสชันสามารถเปลี่ยนแปลงผลลัพธ์ที่เป็นข้อความได้แม้ว่าเลขคณิตของยุคจะถูกต้องก็ตาม

ประเด็นสำคัญ: สคีมาคือที่ที่หน่วยอาศัยอยู่ และวิธีที่ตัวแปลงการประทับเวลา Unix ช่วยคุณตรวจสอบข้อมูลที่มีอยู่โดยระบุหน่วยที่ใช้

สคีมาควรทำให้การแสดงการประทับเวลาไม่น่าแปลกใจสำหรับนักเขียนและผู้อ่านทุกคน จำนวนเต็มอาจเหมาะสม คอลัมน์ขมับดั้งเดิมอาจเหมาะสม มาตราส่วนที่ไม่มีชื่อไม่ได้ เลือกสัญญาหนึ่งฉบับ บังคับใช้ และถือว่าการแปลงเป็นการดำเนินการขอบเขตที่ชัดเจน

สำหรับข้อมูลเดิม ให้ตรวจสอบตัวอย่างภายใต้ทั้งสองหน่วย เชื่อมโยงกับเหตุการณ์ที่ทราบ และบันทึกความไม่แน่นอน การเลือกหน่วยที่มองเห็นได้ของ ToolAcre สนับสนุนการตรวจสอบดังกล่าว แต่การตัดสินใจย้ายข้อมูลขั้นสุดท้ายต้องมาจากแหล่งที่มาและความหมายที่แท้จริงของฐานข้อมูล

การตรวจสอบสคีมาจะเสร็จสมบูรณ์ก็ต่อเมื่อผู้เขียน ผู้อ่าน การจัดทำดัชนี และงานการเก็บรักษาใช้โมเดลเดียวกันเท่านั้น การแก้ไขความคิดเห็นของคอลัมน์เพียงอย่างเดียวจะทำให้ความคลุมเครือของการดำเนินการไม่เปลี่ยนแปลง