มักจะไม่ใช่เซิร์ฟเวอร์ฐานข้อมูลที่เสี่ยงต่อการเกิดข้อผิดพลาดเมื่อมีการกระโดดข้ามเวลาทันที: แอปพลิเคชันที่ใช้เวลา
โดยทั่วไปมีสองวิธีในการติดตามเวลา: การติดตามเวลาของตัวเองหรือการเปรียบเทียบเวลาของระบบ ทั้งสองมีการแลกเปลี่ยนเชิงบวกและลบ
ติดตามเวลาของตัวเอง
ฉันเห็นสิ่งนี้ใช้ในการเขียนโปรแกรมและระบบฝังตัวบางตัวซึ่งการกำหนดเวลาที่แน่นอนไม่ใช่สิ่งสำคัญ ในแอปพลิเคชันหลักจะมีการติดตามวิธีการ 'ติ๊ก' นี่อาจเป็นสัญญาณเตือนที่กำหนดโดยเคอร์เนล, สลีปหรือตัวเลือกที่แสดงถึงเวลาที่ผ่านไป เมื่อคุณรู้ว่าเวลาใดผ่านไปแล้วคุณจะรู้ว่าคุณสามารถเพิ่มหรือลบเวลานี้กับตัวนับ ตัวนับนี้เป็นสิ่งที่ทำให้แอปพลิเคชันกำหนดเวลาของคุณเกิดขึ้น ตัวอย่างเช่นหากตัวนับสูงกว่า 10 วินาทีคุณสามารถทิ้งบางสิ่งบางอย่างหรือคุณต้องทำบางสิ่งบางอย่าง
หากแอปพลิเคชันไม่ได้ติดตามเวลาตัวนับจะไม่เปลี่ยนแปลง สิ่งนี้อาจต้องการได้ขึ้นอยู่กับการออกแบบแอปพลิเคชันของคุณ ตัวอย่างเช่นการติดตามระยะเวลาที่กระบวนการที่ใช้เวลานานกำลังจัดการบางสิ่งนั้นจัดการได้ง่ายกว่าตัวนับมากกว่ารายการของการประทับเวลาเริ่ม / หยุด
มือโปร:
- ไม่ขึ้นอยู่กับนาฬิกาของระบบ
- จะไม่แตกหักเป็นครั้งใหญ่
- ไม่มีการเรียกระบบที่มีราคาแพง
- เคาน์เตอร์ขนาดเล็กจะมีค่าใช้จ่ายหน่วยความจำน้อยกว่าการประทับเวลาเต็ม
Con:
- เวลาไม่แม่นยำมาก
- การเปลี่ยนเวลาของระบบอาจทำให้คลาดเคลื่อนมากขึ้น
- การกำหนดเวลาสัมพันธ์กับการเรียกใช้แอปพลิเคชันไม่คงอยู่
เปรียบเทียบเวลาของระบบ
นี่คือระบบที่ใช้บ่อยกว่า: เก็บการประทับเวลาและเปรียบเทียบกับการประทับเวลาโดยใช้การเรียกเวลาของระบบ การบิดเบือนครั้งใหญ่ในเวลาระบบอาจคุกคามความสมบูรณ์ของแอปพลิเคชันของคุณงานที่ใช้เวลาสองสามวินาทีอาจใช้เวลาหลายชั่วโมงหรือสิ้นสุดทันทีขึ้นอยู่กับทิศทางของนาฬิกา
มือโปร:
- การเปรียบเทียบเวลาที่แม่นยำ
- ยังคงมีมากกว่าการเริ่มต้นใหม่และการหยุดทำงานนาน
Con:
- ใช้การเรียกของระบบเพื่อรับการประทับเวลาใหม่เพื่อเปรียบเทียบกับการประทับเวลาอื่น ๆ
- แอปพลิเคชั่นต้องระวังการบิดหรือแตก
ระบบที่ได้รับผลกระทบ
แอปพลิเคชั่นส่วนใหญ่จะใช้การประทับเวลาเปรียบเทียบกับกำหนดเวลางาน สำหรับระบบฐานข้อมูลที่อาจเป็นการล้างแคช
แอปพลิเคชันทั้งหมดที่ใช้ฐานข้อมูลและฟังก์ชั่นเวลาโทรในภาษาแบบสอบถามจะได้รับผลกระทบจากการเบ้หากแอปพลิเคชันไม่ตรวจจับและจัดการตามลำดับ แอปพลิเคชันไม่สามารถหยุดการทำงานหรืออนุญาตช่วงเวลาการล็อกอินที่ไม่ จำกัด โดยขึ้นอยู่กับวัตถุประสงค์ของมัน
ระบบเมลจะใช้การประทับเวลาและ / หรือหมดเวลาสำหรับการจัดการอีเมลที่ค้างหรือไม่ได้ส่งมอบ นาฬิกาเอียงอาจส่งผลกระทบต่อสิ่งนั้น แต่มีผลกระทบน้อยกว่ามาก ตัวจับเวลา Back-off ที่เกี่ยวกับการเชื่อมต่อกับเซิร์ฟเวอร์อาจพลาดได้
ฉันไม่คิดว่า (ไม่ได้วิจัย) ว่าสัญญาณเตือนเคอร์เนลจะดับลงเมื่อเปลี่ยนเวลาของระบบ ระบบที่ใช้สิ่งเหล่านี้อาจปลอดภัย
โซลูชั่น
ค่อยๆขยับเวลา สามารถดูได้ในเอกสารของการแก้ไขเวลาที่คุณชื่นชอบ
now()
ฉันมีหลายระเบียนภายในจำนวนมากที่ถูกกำหนดด้วย คุณสามารถเพิ่มวิธีที่ปลอดภัยในการเปลี่ยนเวลาให้กับคำตอบของคุณได้หรือไม่?