การเปรียบเทียบข้อมูลในอดีตแบบเรียลไทม์ - เร็วกว่าใน SQL หรือโค้ด?

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

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

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

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


person RNDThoughts    schedule 26.01.2016    source แหล่งที่มา
comment
คุณได้เปรียบเทียบทั้งสองแนวทางเพื่อดูว่าวิธีใดเร็วกว่ากับข้อมูลของคุณ?   -  person ChrisF    schedule 26.01.2016
comment
ยังไม่ได้ แต่นั่นคือขั้นตอนต่อไป! ก็แค่หาคำแนะนำทั่วไปบ้าง   -  person RNDThoughts    schedule 26.01.2016


คำตอบ (2)


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

พิจารณาตารางหลักที่มีบันทึก 50,000 รายการและข้อมูลประวัติ 1,000,000 รายการ (และเพิ่มขึ้นทุกวัน)

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

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

person Danny_ds    schedule 26.01.2016
comment
กรอบงานการซิงค์ที่ฉันใช้เกี่ยวข้องกับการเปลี่ยนแปลงข้อมูลจริง ดังนั้นฉันจึงได้รับบันทึกประวัติใหม่เมื่อมีการเปลี่ยนแปลงจริงเท่านั้น เมื่อได้รับการอัปเดตเป็นชุดสำหรับบันทึกจำนวนหนึ่ง ฉันจำเป็นต้องเปรียบเทียบการเปลี่ยนแปลงทั้งหมดกับสถานะก่อนหน้าและสร้างรายการผลลัพธ์ของสิ่งที่เปลี่ยนแปลง - person RNDThoughts; 26.01.2016

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

person RNDThoughts    schedule 20.10.2016