SQLiteData นำเสนอการซิงค์ CloudKit สำหรับ SQLite พร้อมอ้างสมรรถนะเหนือกว่า SwiftData

ทีมชุมชน BigGo
SQLiteData นำเสนอการซิงค์ CloudKit สำหรับ SQLite พร้อมอ้างสมรรถนะเหนือกว่า SwiftData

Point-Free ได้เปิดตัว SQLiteData ไลบรารี Swift ใหม่ที่นำการซิงโครไนซ์ CloudKit มาสู่ฐานข้อมูล SQLite พร้อมทั้งวางตำแหน่งตัวเองเป็นทางเลือกที่เร็วกว่า SwiftData ของ Apple ไลบรารีนี้ได้จุดประกายการอภิปรายอย่างมากในชุมชนนักพัฒนา โดยเฉพาะเรื่องการอ้างสมรรถนะและการตัดสินใจด้านสถาปัตยกรรม

เบนช์มาร์กสมรรถนะแสดงผลลัพธ์ที่หลากหลาย

SQLiteData อ้างว่ามีสมรรถนะที่เหนือกว่าโซลูชันที่มีอยู่ แต่ชุมชนได้ตั้งคำถามเกี่ยวกับเบนช์มาร์กเหล่านี้ ไลบรารีใช้ Swift macros เพื่อสร้างอินเทอร์เฟซสมรรถนะสูงในเวลาบิลด์ หลีกเลี่ยงแนวทาง Codable ที่ช้ากว่าซึ่งไลบรารี SQLite หลายตัวใช้ อย่างไรก็ตาม นักพัฒนาสังเกตเห็นความขัดแย้งที่น่าสนใจ: SQLiteData ใช้ GRDB อยู่เบื้องหลัง แต่กลับอ้างว่าทำงานได้เร็วกว่าในเบนช์มาร์ก

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

หมายเหตุ: GRDB เป็นชุดเครื่องมือ SQLite ยอดนิยมสำหรับแอปพลิเคชัน Swift Codable เป็นโปรโตคอลของ Apple สำหรับการเข้ารหัสและถอดรหัสข้อมูล แม้ว่าจะช้ากว่าวิธีการเข้าถึงฐานข้อมูลโดยตรง

การเปรียบเทียบ Performance Benchmark (ระยะเวลาเป็นวินาที)

ไลบรารี วิธีการ ระยะเวลา
SQLite (raw) สร้างโดย Enlighter 7.183
Lighter Static generation 8.059
SQLiteData Macro-generated 8.511
GRDB Manual decoding 18.819
SQLite.swift Manual decoding 27.994
SQLite.swift Codable 43.261
GRDB Codable 53.326

การรวม CloudKit เติมเต็มช่องว่างในตลาด

ฟีเจอร์ที่น่าสนใจที่สุดสำหรับนักพัฒนาหลายคนดูเหมือนจะเป็นการซิงโครไนซ์ CloudKit ซึ่งขาดหายไปอย่างเห็นได้ชัดจากระบบนิเวศ SQLite สมาชิกชุมชนเน้นย้ำว่าความสามารถนี้ไม่มีอยู่ในรูปแบบที่ได้รับการดูแลก่อน SQLiteData โดยความพยายามก่อนหน้านี้เช่น Harmony และ SQLiteChangesetSync เป็นเพียงการทดลองหรือถูกละทิ้ง

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

ข้อกังวลการใช้งานของนักพัฒนาและทางเลือกอื่น

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

อย่างไรก็ตาม ผู้สนับสนุนชี้ให้เห็นข้อจำกัดเชิงปฏิบัติของข้อเสนอปัจจุบันของ Apple SwiftData ขาดฟีเจอร์สำคัญเช่นการสนับสนุนงานเบื้องหลัง มีปัญหาสมรรถนะกับชุดข้อมูลขนาดใหญ่ และไม่ทำงานได้ดีนอก SwiftUI views สำหรับนักพัฒนาที่ใช้ SQLite ผ่าน GRDB อยู่แล้ว SQLiteData เสนอเส้นทางเพื่อเพิ่มการซิงค์ CloudKit โดยไม่ต้องเปลี่ยนแปลงสถาปัตยกรรมครั้งใหญ่

หากไม่มีสิ่งนั้น ทางเลือกเดียวของฉันคือ SwiftData หรือ CoreData ซึ่งมีข้อเสียร้ายแรง

ความเข้ากันได้แบบย้อนหลังของไลบรารีกับ iOS 13 ยังดึงดูดนักพัฒนาที่ยังไม่สามารถกำหนดให้ใช้ iOS เวอร์ชันล่าสุดสำหรับแอปพลิเคชันของตน

การเปรียบเทียบคุณสมบัติหลัก

ข้อได้เปรียบของ SQLiteData :

  • การซิงโครไนซ์และแชร์ผ่าน CloudKit
  • รองรับ iOS 13+
  • การเพิ่มประสิทธิภาพด้วย Swift macro
  • รองรับการ query SQL โดยตรงผ่าน sql macro
  • รองรับการทำงานในพื้นหลัง

ข้อจำกัดของ SwiftData :

  • รองรับเฉพาะ iOS 17+ (การทำ indexes ต้องใช้ iOS 18+)
  • มีปัญหาด้านประสิทธิภาพกับชุดข้อมูลขนาดใหญ่
  • จำกัดการใช้งานเฉพาะใน SwiftUI view
  • ไม่รองรับการแชร์ผ่าน CloudKit
  • ต้องพึ่งพาวงจรการอัปเดตประจำปี

สถาปัตยกรรมทางเทคนิคและแนวโน้มอนาคต

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

สำหรับนักพัฒนาที่มองหาทางเลือก ชุมชนได้อภิปรายตัวเลือกหลายอย่างรวมถึงการใช้ GRDB ดิบ Lighter (ซึ่งสร้างการเชื่อมโยงจากสคีมา SQLite) และการรอการปรับปรุง SwiftData แต่ละแนวทางมีการแลกเปลี่ยนระหว่างสมรรถนะ ฟีเจอร์ และการพิจารณาการบำรุงรักษาระยะยาว

การเปิดตัวนี้แสดงถึงการเพิ่มเติมที่สำคัญให้กับระบบนิเวศ Swift โดยเฉพาะสำหรับนักพัฒนาที่ต้องการทั้งสมรรถนะของ SQLite และความสามารถซิงค์ของ CloudKit ว่าจะได้รับการยอมรับอย่างแพร่หลายหรือไม่น่าจะขึ้นอยู่กับว่า Apple จะแก้ไขข้อจำกัดปัจจุบันของ SwiftData ได้เร็วแค่ไหน และชุมชนนักพัฒนา iOS จะยอมรับชั้นนามธรรมอีกชั้นเหนือความต้องการการจัดเก็บข้อมูลของพวกเขาหรือไม่

อ้างอิง: SQLiteData