คำถามติดแท็ก synchronization

2
แนวปฏิบัติที่ดีที่สุด / รูปแบบสำหรับการซิงโครไนซ์ข้อมูลแบบสองทาง
บ่อยครั้งในงานของฉันแนวคิดเกี่ยวกับการซิงโครไนซ์ข้อมูลแบบ 2 ทางระหว่างระบบฐานข้อมูลทำให้ข้อมูลเกิด ตัวอย่างคลาสสิกคือระบบ CRM ที่แตกต่างกันสองระบบ (เช่น Raiser's Edge และ Salesforce) และจำเป็นต้องมีการซิงค์ข้อมูลผู้ติดต่อสองทางระหว่างกัน ข้อควรพิจารณาเกี่ยวกับ API นอกเหนือจากสมมติว่าคุณมีคีย์ที่ใช้ร่วมกันในการซิงค์และคิดถึงอัลกอริธึม / รูปแบบที่จะใช้อย่างหมดจดนี่เป็นงานที่มักจะถูกประเมินโดยผู้ที่ไม่ใช่ช่างเทคนิค ตัวอย่างเช่นคุณต้องระวัง: คุณสามารถตรวจสอบระเบียนที่มีการเปลี่ยนแปลงในทั้งสองระบบได้อย่างง่ายดาย (หรือคุณจะต้องเปรียบเทียบระเบียนทั้งหมดระหว่างระบบเพื่อตรวจจับการเปลี่ยนแปลง) หากคุณกำลังจะทำการซิงค์หนึ่งครั้งทุก ๆ ชั่วโมงวิธีการจัดการกับความขัดแย้งที่การเปลี่ยนแปลงระเบียนเดียวกันในเวลาเดียวกันมากขึ้นหรือน้อยลงในทั้งสองระบบ หากคุณกำลังทำการซิงค์แบบเรียลไทม์ (เช่นการอัปเดตในระบบหนึ่งจะกระตุ้นการอัปเดตไปยังระบบอื่นทันที) วิธีจัดการความแตกต่างเมื่อเวลาผ่านไปเนื่องจากข้อบกพร่องหรือระบบล่ม โดยส่วนตัวฉันสามารถคิดหาวิธีจัดการกับสิ่งเหล่านี้ทั้งหมด แต่ฉันสงสัยว่ามีรูปแบบที่เป็นที่รู้จักกันดีวรรณกรรมหรือแนวปฏิบัติที่ดีที่สุดที่ฉันสามารถอ้างถึงได้หรือไม่

5
ความไม่สามารถเปลี่ยนรูปแบบได้ทั้งหมดไม่จำเป็นต้องล็อคในการเขียนโปรแกรมแบบหลายโปรเซสเซอร์หรือไม่?
ส่วนที่ 1 ชัดเจนไม่สามารถตัดทอนความต้องการล็อคในการเขียนโปรแกรมแบบมัลติโปรเซสเซอร์ลดความต้องการนั้นหรือมีกรณีที่ความไม่สามารถเปลี่ยนได้เพียงอย่างเดียวไม่เพียงพอหรือไม่? สำหรับฉันดูเหมือนว่าคุณสามารถเลื่อนการประมวลผลและรัฐแค็ปซูลได้นานก่อนที่โปรแกรมส่วนใหญ่จะต้องทำอะไรบางอย่างจริง (อัปเดตแหล่งข้อมูลสร้างรายงานยกเว้นข้อยกเว้น ฯลฯ ) การกระทำดังกล่าวสามารถทำได้โดยไม่ล็อคหรือไม่? การกระทำเพียงแค่โยนวัตถุแต่ละชิ้นออกไปและสร้างใหม่แทนที่จะเปลี่ยนแบบเดิม (มุมมองที่หยาบคายของการเปลี่ยนแปลงไม่ได้) ให้การป้องกันที่สมบูรณ์จากการโต้แย้งระหว่างกระบวนการหรือมีมุมที่ยังต้องล็อค? ฉันรู้ว่าโปรแกรมเมอร์และนักคณิตศาสตร์ที่ใช้งานได้จำนวนมากชอบพูดถึง "ไม่มีผลข้างเคียง" แต่ใน "โลกแห่งความจริง" ทุกอย่างมีผลข้างเคียงแม้ว่าจะถึงเวลาที่ต้องใช้คำสั่งเครื่อง ฉันสนใจทั้งคำตอบเชิงทฤษฎี / วิชาการและคำตอบเชิงปฏิบัติ / โลกแห่งความจริง หากความไม่สามารถเปลี่ยนแปลงได้ปลอดภัยตามขอบเขตหรือสมมติฐานบางอย่างฉันต้องการทราบว่าขอบเขตของ "เขตปลอดภัย" คืออะไรกันแน่ ตัวอย่างของขอบเขตที่เป็นไปได้: I / O ยกเว้น / ข้อผิดพลาด การโต้ตอบกับโปรแกรมที่เขียนเป็นภาษาอื่น การโต้ตอบกับเครื่องอื่น ๆ (ทางกายภาพเสมือนหรือตามทฤษฎี) ขอขอบคุณเป็นพิเศษสำหรับ @JimmaHoffa สำหรับความคิดเห็นของเขาซึ่งเริ่มต้นคำถามนี้! ส่วนที่ 2 การเขียนโปรแกรมหลายตัวประมวลผลมักจะใช้เป็นเทคนิคการเพิ่มประสิทธิภาพ - เพื่อให้โค้ดทำงานได้เร็วขึ้น เมื่อไหร่ที่จะใช้การล็อคกับวัตถุที่ไม่เปลี่ยนรูปได้เร็วขึ้น? เมื่อพิจารณาถึงขีด จำกัด ที่กำหนดไว้ในกฎหมายของ Amdahlคุณสามารถบรรลุประสิทธิภาพที่เหนือกว่าทุกประการ (ไม่ว่าจะมีหรือไม่มีตัวเก็บขยะที่พิจารณา) กับวัตถุที่ไม่เปลี่ยนรูปหรือการล็อควัตถุที่ไม่แน่นอน …

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

1
Redis vs Zookeeper
ดูเหมือนว่าโง่เมื่อเปรียบเทียบเซิร์ฟเวอร์ทั้งสองนี้เนื่องจากพวกเขามีความหมายที่แตกต่างกันมาก แต่ถ้าคุณคิดเกี่ยวกับมันพวกเขาสามารถทำสิ่งที่คล้ายกันมากมาย: เก็บข้อมูลการกำหนดค่าการล็อคแบบกระจายการเข้าคิว ฯลฯ ฉันมีตัวอย่างของRedisที่ฉันใช้กับสิ่งที่เกี่ยวข้องกับการผลิตบางอย่าง แต่ต้องการทำการซิงโครไนซ์อย่างง่ายระหว่างเซิร์ฟเวอร์ อะไรZookeeperให้ฉันที่ Redis จะไม่?

3
การแก้ปัญหาข้อขัดแย้งสำหรับการซิงค์สองทาง
คุณจะจัดการการซิงโครไนซ์แบบสองทางระหว่างเซิร์ฟเวอร์ฐานข้อมูล 'หลัก' และเซิร์ฟเวอร์ 'รอง' จำนวนมากได้อย่างไรในการแก้ไขข้อขัดแย้งโดยเฉพาะหากการเชื่อมต่อไม่สามารถใช้ได้ตลอดเวลา ตัวอย่างเช่นฉันมีแอพมือถือที่ใช้ CoreData เป็น 'ฐานข้อมูล' บน iOS และฉันต้องการอนุญาตให้ผู้ใช้แก้ไขเนื้อหาโดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต ในเวลาเดียวกันข้อมูลนี้มีอยู่ในเว็บไซต์ที่อุปกรณ์จะเชื่อมต่อ ฉันจะทำอย่างไรถ้า / เมื่อข้อมูลในเซิร์ฟเวอร์ DB ทั้งสองมีข้อขัดแย้ง (ฉันอ้างถึง CoreData เป็นเซิร์ฟเวอร์ฐานข้อมูล แต่ฉันรู้ว่ามันเป็นสิ่งที่แตกต่างออกไปเล็กน้อย) มีกลยุทธ์ทั่วไปในการจัดการกับปัญหาประเภทนี้หรือไม่? นี่คือตัวเลือกที่ฉันคิดได้: 1. ใช้ข้อมูลฝั่งไคลเอ็นต์เป็นลำดับความสำคัญที่สูงขึ้น 2. เหมือนกันกับฝั่งเซิร์ฟเวอร์ 3. พยายามแก้ไขข้อขัดแย้งด้วยการทำเครื่องหมายการประทับเวลาการแก้ไขของแต่ละฟิลด์และทำการแก้ไขล่าสุด แม้ว่าฉันจะแน่ใจว่าตัวเลือกที่ 3 จะเปิดห้องสำหรับการทำลายข้อมูลที่รุนแรง ฉันรู้ว่าทฤษฎีบท CAP เกี่ยวข้องกับเรื่องนี้ แต่ฉันต้องการความมั่นคงในที่สุดเท่านั้นดังนั้นมันจึงไม่ได้ออกกฎสมบูรณ์ใช่ไหม? คำถามที่เกี่ยวข้อง: ที่ดีที่สุดรูปแบบการปฏิบัติสำหรับการประสานข้อมูลแบบสองทาง คำตอบที่สองสำหรับคำถามนี้บอกว่าคงไม่สามารถทำได้

4
วิธีที่ดีที่สุดในการซิงโครไนซ์ข้อมูลระหว่างสองฐานข้อมูลที่แตกต่างกัน
ฉันต้องใช้การประสานข้อมูลระหว่างสองฐานข้อมูลขนาดใหญ่ที่มีโครงสร้างที่แตกต่างกันโดยสิ้นเชิง โดยทั่วไปฉันต้องการรวบรวมข้อมูลบางอย่างเกี่ยวกับผลิตภัณฑ์ในตารางที่แตกต่างกันในฐานข้อมูลแรกและจัดเรียงใหม่สำหรับตารางอื่น ๆ ในฐานข้อมูลที่สอง การสร้างผลิตภัณฑ์ของฉันในครั้งแรกนั้นไม่ซับซ้อนมาก แต่ฉันกำลังมองหาวิธีการอัปเดตข้อมูลเฉพาะบางอย่าง - ไม่ใช่ข้อมูลทั้งหมด - เกี่ยวกับแต่ละผลิตภัณฑ์ เห็นได้ชัดว่ามีบางประเด็นที่ทำให้เรื่องนี้ยุ่งยาก ฉันไม่ได้รับอนุญาตให้ทำสิ่งใดในฐานข้อมูลต้นฉบับนอกเหนือจากแบบสอบถามแบบใช้เลือกข้อมูล บนฐานข้อมูลเป้าหมายฉันสามารถทำการสืบค้นตามปกติ (เลือกอัปเดตแทรกสร้าง) แต่ฉันไม่สามารถแก้ไขโครงสร้าง / ตารางที่มีอยู่ได้ Target และ source db มีโครงสร้างที่แตกต่างกันโดยสิ้นเชิงตารางไม่เหมือนกันเลยดังนั้นข้อมูลจะต้องถูกจัดเรียงใหม่จริง ๆ การเปรียบเทียบตารางจะไม่ทำงาน ฐานข้อมูลเป้าหมายใช้เซิร์ฟเวอร์ MySQL - ซอร์สอาจเป็น DB2 ไม่มีฟิลด์ "เวลาที่อัปเดต" ที่ใดก็ได้ ดังนั้นกระบวนการทั้งหมดจะต้องทำในสคริปต์ Python (นึกคิด) เดียว ฉันคิดเกี่ยวกับการสร้างแฮชสำหรับแต่ละผลิตภัณฑ์โดยอิงตามฟิลด์เพื่ออัปเดตในฐานข้อมูลเป้าหมาย: md5 (รหัส + คำอธิบาย + ผู้จำหน่าย + ประมาณ 10 สาขาอื่น ๆ ) แฮชใหม่ที่ใช้ข้อมูลเดียวกันจะถูกสร้างขึ้นทุกวันจากฐานข้อมูลต้นทาง …

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

5
คุณแสดงถึงการซิงค์แบบสองทิศทางใน REST api ได้ดีที่สุดอย่างไร
สมมติว่าระบบที่มีเว็บแอปพลิเคชันที่มีทรัพยากรและการอ้างอิงถึงแอปพลิเคชันระยะไกลที่มีทรัพยากรที่คล้ายกันอื่นคุณจะแสดงการดำเนินการซิงค์แบบสองทิศทางที่ประสานทรัพยากร 'ท้องถิ่น' กับทรัพยากร 'ระยะไกล' ได้อย่างไร ตัวอย่าง: ฉันมี API ที่แสดงรายการสิ่งที่ต้องทำ รับ / โพสต์ / วาง / ลบ / ลอส / ฯลฯ API นั้นสามารถอ้างอิงบริการสิ่งที่ต้องทำแบบรีโมต GET / POST / PUT / DELETE / todo_services / ฯลฯ ฉันสามารถจัดการ todos จากบริการระยะไกลผ่าน API ของฉันในฐานะตัวแทนผ่าน GET / POST / PUT / DELETE / todo_services / abc123 / …

2
เมื่อใดที่ฉันควรใช้ StringBuilder หรือ StringBuffer
ในเว็บแอปพลิเคชั่นการผลิตโปรแกรมเมอร์เพื่อนของฉันใช้ StringBuffer ทุกที่ ตอนนี้ฉันกำลังดูแลการพัฒนาแอพพลิเคชั่นและการแก้ไข หลังจากอ่านStringBuilderและStringBufferฉันได้ตัดสินใจเปลี่ยนรหัส StringBuffer ทั้งหมดด้วย StringBuilder เพราะเราไม่ต้องการความปลอดภัยของเธรดใน data beans ของเรา ตัวอย่างเช่น: (ในแต่ละ data bean ฉันสามารถเห็นการใช้งานของ StringBuffer) @Override public String toString() { StringBuffer sb = new StringBuffer();// replace it from StringBuilder sb.append(" ABCD : ").append(abcd); sb.append(", EFGH : ").append(efgh); sb.append(", IJKL : ").append(ijkl); } เราสร้าง data beans แยกต่างหากสำหรับแต่ละเซสชั่น / …

3
อย่างชัดเจน DAG แทน Vector Clocks สำหรับการซิงโครไนซ์
ฉันเริ่มดูวิธีการซิงโครไนซ์ข้อมูลระหว่างกลุ่มเพื่อน คนรอบข้างต้องสามารถทำงานได้ในวิธีที่ไม่ได้เชื่อมต่อและจากนั้นประสานกันเพื่อรวมการเปลี่ยนแปลงในท้องถิ่นของพวกเขา ทำเนียบควรจะสามารถที่จะผสานการปรับปรุงในท้องถิ่นด้วย"สามวิธีผสาน" ดังนั้นในการทำข้อมูลให้ตรงกันควรรู้ว่าข้อเท็จจริงใดเป็นข้อมูลล่าสุด แต่เมื่อไม่มีคำสั่งที่เข้มงวดพวกเขาควรจะสามารถรวมข้อเท็จจริงเข้าด้วยกันตามรากที่พบบ่อย เมื่อเพื่อนร่วมงานอิสระทำการเปลี่ยนแปลงพวกเขาสามารถ "ประทับเวลา" ด้วย "นาฬิกา" ฉันใช้คำว่า "นาฬิกา" และ "การประทับเวลา" แต่ฉันไม่ได้หมายถึงนาฬิกาเวลาติดผนัง ฉันหมายถึงการเรียงลำดับบางส่วนของเหตุการณ์ที่ทำให้เกิดความชัดเจน มันเป็นความสัมพันธ์"ที่เกิดขึ้นก่อนหน้า"ระหว่างเหตุการณ์ที่เกิดขึ้นในรูปแบบ acyclic graph (DAG) ดูเหมือนว่าวิธีที่ "ปกติ" ที่จะทำนี้สร้างการสั่งซื้อบางส่วนโดยใช้นาฬิกาเวกเตอร์ อย่างไรก็ตามสิ่งเหล่านี้อาจมีขนาดใหญ่มาก การพัฒนาล่าสุดเช่นนาฬิกาต้นไม้ช่วงเวลาจะช่วยให้การจัดเก็บเวลามีขนาดกะทัดรัดยิ่งขึ้น สิ่งที่ฉันไม่ชัดเจนเลยก็คือทำไมโปรโตคอลการซิงโครไนซ์ไม่ "เพียงแค่" เก็บ DAG อย่างชัดเจน (หรือพวกเขา?) เพียร์สามารถสร้างการประทับเวลาอย่างอิสระโดยการสุ่มสร้าง UUID (หรือโดยวิธีอื่น ๆ เช่น<peer-name> + <local-monotonically-increasing-counter>) การเรียงลำดับของการประทับเวลานี้มีความชัดเจนต่อเพื่อนคนนั้น เมื่อเพื่อน 2 คนซิงค์กันพวกเขาสามารถตกลงในการประทับเวลาใหม่ การเรียงลำดับของการประทับเวลานี้อีกครั้งชัดเจนสำหรับทั้งสองคน ขณะนี้มีความต้องการที่จะผ่านสิ่งที่เกิดขึ้นก่อน DAG ระหว่างเพื่อน แต่การจัดเก็บและข้อกำหนดแบนด์วิดท์ของเรื่องนี้มีขนาดเล็ก จุดเวลาคือกราฟจุดสุดยอด ด้วยเหตุนี้จึงมีขอบขาเข้า 1 หรือ …

1
ถึงเวลาที่จะเลิกซิงโครไนซ์รอและแจ้งเตือนหรือไม่
มีสถานการณ์หนึ่ง (นอกเหนือจากความเข้ากันได้กับ JVM โบราณ) ที่ใช้synchronizedเป็นที่ต้องการใช้Lockหรือไม่ ใครสามารถแสดงให้เห็นถึงการใช้waitหรือnotifyมากกว่าระบบที่ใหม่กว่า? มีอัลกอริทึมที่ต้องใช้หนึ่งในนั้นในการนำไปใช้หรือไม่ ฉันเห็นคำถามก่อนหน้านี้ที่แตะต้องเรื่องนี้ แต่ฉันอยากจะใช้เวลาเพิ่มอีกนิดและจริง ๆ แล้วdeprecateพวกเขา มีกับดักและหลุมพรางและข้อผิดพลาดอยู่มากเกินไปกับสิ่งที่ถูกรีดออกด้วยสิ่งอำนวยความสะดวกใหม่ ฉันแค่รู้สึกว่าอาจถึงเวลาที่จะทำเครื่องหมายพวกเขาล้าสมัย

2
การซิงโครไนซ์ระหว่างสองระบบโดยใช้ MongoDB เป็น changelog
เรากำลังพัฒนาสองระบบที่เกี่ยวข้อง หนึ่งในนั้น (A) จะถูกติดตั้งบนเครื่องของลูกค้าของเรา องค์กรของฉันจะใช้ส่วนที่เหลือ (B) แต่ละระบบมีฐานข้อมูลของตัวเอง (สัมพันธ์) และสกีมาของพวกเขาแตกต่างกัน อย่างไรก็ตามทั้งสองระบบจะต้องทำข้อมูลให้ตรงกัน นอกจากนี้การเปลี่ยนแปลงบางอย่างใน B จะต้องส่งออกไปยังระบบคลาส A ทั้งหมดและอื่น ๆ ไปยังการเปลี่ยนแปลงที่เฉพาะเจาะจง ลูกค้าบางรายไม่มีการเชื่อมต่ออินเทอร์เน็ตดังนั้นในบางกรณีต้องทำข้อมูลให้ตรงกันผ่านการแลกเปลี่ยนไฟล์ ดังนั้นเราจึงวางแผนที่จะแก้ไขปัญหานี้ดังต่อไปนี้: แต่ละระบบรักษาการเปลี่ยนแปลงของฐานข้อมูล เรากำลังวางแผนที่จะนำไปใช้กับ MongoDB เมื่อระบบเริ่มต้นกระบวนการซิงโครไนซ์ระบบจะดึงการเปลี่ยนแปลงที่ทำทั้งหมดจากบันทึก หากระบบเป็น B การเปลี่ยนแปลงที่ดึงมาขึ้นอยู่กับปลายทาง จากนั้นระบบจะจัดลำดับพวกเขาในรูปแบบ XML และในที่สุดก็ส่งพวกเขา (ผ่านไฟล์หรือเครือข่าย) เมื่อปลายทางอื่นได้รับเซ็ตการแก้ไขมันจะยกเลิกการตั้งค่า จากนั้นระบบจะทำการแปลงข้อมูลบางอย่างซึ่งจำเป็นและในที่สุดก็บันทึกการเปลี่ยนแปลง ในขั้นตอนนี้ถ้าจำเป็นระบบจะต้องแก้ไขข้อขัดแย้งที่อาจมีอยู่ ขั้นสุดท้ายระบบรับจะส่งการเปลี่ยนแปลง (และผลิตภัณฑ์อื่น ๆ ของการแก้ไขข้อขัดแย้ง) วิธีนี้เป็นไปได้ปรับขนาดได้และสง่างามหรือไม่? คุณต้องการเปลี่ยนแปลงหรือเพิ่มเติมสิ่งใด

2
การซิงโครไนซ์กับระบบออฟไลน์
ฉันออกแบบระบบที่ฉันจะซิงโครไนซ์ข้อมูลธุรกิจจากอุปกรณ์มือถือ (ที่มีแอพพลิเคชั่นแบบฝัง) ที่สร้างข้อมูลและส่งกลับไปที่เซิร์ฟเวอร์ แต่ละบรรทัดที่ซิงโครไนซ์จะสร้างบันทึกธุรกิจเฉพาะในฐานข้อมูล หากสิ่งที่ฉันซิงโครไนซ์สร้างข้อมูลด้วยวันที่ (ภายในข้อมูลซิงค์) ที่ต่ำกว่าวันที่แก้ไขล่าสุดของข้อมูลธุรกิจของฉันฉันต้องละเว้นมันและเพียงเพิ่มฐานข้อมูลเข้าสู่ระบบ เมื่อประมวลผลข้อมูลที่อัพโหลดแล้วข้อมูลจะถูกดึงจากฐานข้อมูลและดาวน์โหลดไปยังอุปกรณ์ เนื่องจากการดาวน์โหลดนี้ทันทีหลังจากเขียนการซิงค์จึงต้องตรงกัน เป็นไปได้ที่จะยังคงมีรูปแบบตัวอ่าน / ตัวเขียนถ้าสิ่งนี้มีค่าพอที่จะแทนที่โซลูชันที่มีอยู่ สิ่งที่สำคัญกว่าคือการสามารถดาวน์โหลดข้อมูลที่ทันสมัย ข้อมูลที่ถูกดึงมาทั้งหมดไม่มีการใช้งานที่แตกต่างกันในขณะนี้ (มันอาจมาในภายหลัง แต่นั่นจะไม่เป็นปัญหา) ฉันอาจมีการซิงโครไนซ์หลายครั้งบนวัตถุทางธุรกิจเดียวกันที่ทำงานอยู่มันไม่น่าเป็นไปได้ แต่สามารถเกิดขึ้นได้และฉันชอบที่จะสามารถจัดการกับมันได้ คาดว่าการซิงโครไนซ์จะคงอยู่เป็นเวลาไม่กี่วินาที แต่ไม่กี่นาทีเว้นแต่ว่าจะใช้แอปพลิเคชันมือถือในตัวโดยไม่มีการซิงค์อีกหลายวัน ปริมาณของข้อมูลที่ซิงโครไนซ์ไม่คาดว่าจะมีขนาดใหญ่ทั้งกระบวนการซิงโครไนซ์ ดังนั้นฉันจึงลงเอยด้วยการแยกซึ่งกันและกันในวิธีการซิงโครไนซ์ของฉันแม่นยำมากขึ้นฉันใช้ Java และฉันใส่ซิงโครไนซ์กับวิธีการเขียนไม่ใช่กระบวนการซิงโครไนซ์ทั้งหมดเพื่อไม่บล็อกการซิงค์แบบอ่านอย่างเดียว ผมอยากจะรู้ว่า : หากวิธีนี้เหมาะสม ตราบใดที่ปริมาณและเวลาของกระบวนการซิงโครไนซ์ยังคงยอมรับได้ โดยทั่วไปแล้วฉันควรจะดูแนวคิดอะไร โบนัส: หากมีการนำแนวคิดเหล่านี้ไปใช้ในโมดูล Spring

3
โปรแกรมซิงค์ส่วนใหญ่ตรวจสอบการเปลี่ยนแปลงไฟล์ได้อย่างไร
โปรแกรมซิงค์เช่น Dropbox มักจะติดตามการเปลี่ยนแปลงไฟล์โดยทำการเปรียบเทียบแบบไบต์ต่อไบต์หรือใช้แฮชหรือการใช้diff/ การเก็บบันทึกการกระทำในท้องถิ่นเช่นการควบคุมเวอร์ชันหรืออะไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.