วิธีซิงค์ฐานข้อมูลเว็บ HTML5 ออฟไลน์กับฐานข้อมูลส่วนกลาง

ฉันต้องการทำสิ่งต่อไปนี้ในเว็บแอป HTML5 (iPad):

  • อัปโหลดข้อมูลไปยังฐานข้อมูลออนไลน์ (ซึ่งอาจมีขนาด ‹50Mb หากฉันต้องการสร้างฐานข้อมูลออนไลน์ในรูปแบบ SQLite)
  • แยกชุดย่อยหรือสำเนาข้อมูลทั้งหมดไปยังฐานข้อมูลเว็บออฟไลน์
  • (เดินทางออกนอกพื้นที่ครอบคลุมของเครือข่าย 3G)
  • ทำการคำนวณประเภทการวิเคราะห์มากมายกับข้อมูลที่ดาวน์โหลด
  • บันทึกพารามิเตอร์สำหรับการคำนวณของฉันลงในฐานข้อมูลเว็บออฟไลน์
  • ทำซ้ำ โดยบันทึกชุดพารามิเตอร์ที่แตกต่างกันสำหรับเซสชันการคำนวณประเภทการวิเคราะห์ออฟไลน์ที่แตกต่างกันหลายเซสชันในช่วงเวลาที่ขยายออกไป
  • (มุ่งหน้ากลับเข้าสู่พื้นที่ที่มีเครือข่าย 3G ครอบคลุม)
  • ซิงค์พารามิเตอร์ที่บันทึกไว้จากฐานข้อมูลเว็บออฟไลน์ของฉันไปยังฐานข้อมูลกลางแบบออนไลน์

สบายใจทุกขั้นตอนจนถึงขั้นตอนสุดท้าย...

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

ขอบคุณล่วงหน้า


person monch1962    schedule 20.12.2010    source แหล่งที่มา


คำตอบ (4)


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

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

ฉันยังไม่ได้ระบุด้วยว่าครั้งสุดท้ายที่ไคลเอ็นต์ออฟไลน์ถูกซิงค์คือเมื่อใด

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

หากไม่มีการเปลี่ยนแปลงในฐานข้อมูลกลาง ฉันจะอัปเดตด้วยข้อมูลจากไคลเอนต์ออฟไลน์ หากบันทึกบนเซิร์ฟเวอร์มีการเปลี่ยนแปลงนับตั้งแต่การซิงค์ครั้งล่าสุด ฉันจะอัปเดตบันทึกเหล่านั้นไปยังไคลเอนต์

หากไม่มี UUID บนเซิร์ฟเวอร์กลาง แต่มีอยู่บนไคลเอนต์ออฟไลน์ ฉันจะแทรกมันเข้าไป และในทางกลับกัน

หากต้องการล้างข้อมูลบันทึก ฉันสร้างคอลัมน์ "ล้างข้อมูล" และเมื่อมีการเรียกใช้แบบสอบถาม sysnc ฉันจะลบบันทึกออกจากแต่ละฐานข้อมูล (หรือทำเครื่องหมายว่าไม่ได้ใช้งาน ขึ้นอยู่กับข้อกำหนดของแอปพลิเคชัน)

หากทั้งสองเรกคอร์ดมีการเปลี่ยนแปลงตั้งแต่การอัปเดตครั้งล่าสุด ฉันจะต้องอาศัยการป้อนข้อมูลของผู้ใช้เพื่อปรับยอดหรือกฎที่ระบุว่าเรกคอร์ดใด "ชนะ"

โดยปกติฉันไม่เชื่อฟังก์ชันการนำเข้าฐานข้อมูลในตัว เว้นแต่ว่าฉันจะนำเข้าฐานข้อมูลที่ว่างเปล่าโดยสิ้นเชิง

person CurtisMO    schedule 11.04.2011

ขั้นตอน:

  1. เก็บรายการการเปลี่ยนแปลงไว้ในฐานข้อมูลท้องถิ่น
  2. เมื่อเชื่อมต่อกับฐานข้อมูลระยะไกล ให้ตรวจสอบการเปลี่ยนแปลงใดๆ นับตั้งแต่การซิงค์ครั้งล่าสุดบนรีโมต
  3. หากการเปลี่ยนแปลงในฝั่งระยะไกลขัดแย้งกับการเปลี่ยนแปลงในเครื่อง ให้แจ้งให้ผู้ใช้ทราบว่าต้องทำอย่างไร
  4. For all other changes, proceed with sync:
    1. download all online changes which did not change locally.
    2. อัปโหลดการเปลี่ยนแปลงในเครื่องทั้งหมดซึ่งไม่ได้เปลี่ยนแปลงจากระยะไกล

วิธีนี้สามารถทำงานกับฐานข้อมูลหลายชุดรวมกันได้ โดยมีเงื่อนไขว่าต้องมีตัวแปลงข้อมูลอยู่ที่ด้านเดียว

person syockit    schedule 12.03.2011

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

ฐานข้อมูลเว็บ HTML5 ยังใช้ SQLite (แม้ว่าเบราว์เซอร์บางตัวไม่รองรับและดูเหมือนว่า W3C จะลดการสนับสนุนลง)

so...

หากคุณส่งออกข้อมูลโดยใช้คำสั่ง .dump จากนั้นนำเข้าข้อมูลไปยังฐานข้อมูลเว็บโดยใช้ไวยากรณ์ $sqlite mydb.db ‹ mydump.sql คุณควรจะทำเช่นนี้ได้ด้วยการอยู่ไม่สุขกับแบ็กเอนด์ php หรือ java

จากนั้นเมื่อคุณต้องการซิงค์ข้อมูล "ออฟไลน์" กับเซิร์ฟเวอร์ของคุณ เพียงทำดัมพ์ตรงกันข้ามจากฐานข้อมูลเว็บไปยังไฟล์ dump.sql แล้วนำเข้าไปยังฐานข้อมูลเซิร์ฟเวอร์

ไซต์นี้อธิบายการส่งออกและการนำเข้าจากการถ่ายโอนข้อมูล SQLite

แหล่งที่มา: การดัมพ์และการกู้คืน SQLite DB

person ScottC    schedule 28.01.2011
comment
หากคุณลองวิธีนี้แล้วได้ผล หรือหากคุณพบวิธีแก้ไขปัญหาอื่น โปรดแจ้งให้เราทราบ ฉันเพิ่งพบเกี่ยวกับคุณลักษณะฐานข้อมูลเว็บ HTML5 นี้ผ่านโพสต์ของคุณ และฉันสนใจอย่างยิ่งที่จะลองใช้ในโครงการของตัวเองสักวันหนึ่ง - person ScottC; 28.01.2011

HTML5 รองรับเบราว์เซอร์ db SQLite ฉันได้ลองใน Mozilla และ chrome แล้วและใช้งานได้ดี ฉันยังมีข้อกำหนดที่ฉันมีแบบฟอร์มออฟไลน์ ผู้ใช้เจาะข้อมูลและคลิกที่บันทึก มันจะบันทึกในฐานข้อมูลเบราว์เซอร์ในเครื่อง และต่อมาเมื่อผู้ใช้ซิงค์กับเซิร์ฟเวอร์หรือออนไลน์ เขาสามารถคลิกที่ปุ่มซิงค์ซึ่งจะซิงค์ข้อมูลจริง จากเบราว์เซอร์ db แหล่งข้อมูลอื่น ๆ

person Ankur Singhal    schedule 11.04.2014