ข้อมูลหลักเทียบกับ SQLite 3 [ปิด]


314

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

มีประโยชน์มากในการใช้ข้อมูลหลักผ่าน SQLite หรือในทางกลับกัน? ข้อดี / ข้อเสียของแต่ละคนคืออะไร?

ฉันพบว่ามันยากที่จะพิสูจน์ค่าใช้จ่ายในการเรียนรู้ Core Data เมื่อ Apple ไม่ได้ใช้กับแอพพลิเคชั่นหลักเช่น Mail.app หรือ iPhoto.app แทนที่จะเลือกใช้ฐานข้อมูล SQLite SQLite ยังใช้อย่างกว้างขวางบน iPhone

ผู้ที่คุ้นเคยกับการใช้ความคิดเห็นทั้งสองเกี่ยวกับประสบการณ์ของพวกเขา? บางทีเช่นเดียวกับสิ่งส่วนใหญ่คำถามนั้นลึกซึ้งกว่าการใช้คำถามหนึ่งกับอีกคำถามหนึ่ง?


1
คุณช่วยเพิ่มลิงค์ไปยังen.wikipedia.org/wiki/Core_Dataสำหรับทุกคนที่ไม่รู้ว่ามันคืออะไร
RSabet

7
โปรดทราบว่า Core Data นั้นไม่ควรใช้เป็นฐานข้อมูล!

คำตอบ:


281

ถึงแม้ว่า Core Data จะเป็นลูกหลานของEnterprise Object Frameworkของ Apple แต่mapper เชิงสัมพันธ์ (ORM) ที่เชื่อมโยงกับแบ็คเอนด์เชิงสัมพันธ์อย่างแน่นหนา Core Data ไม่ใช่ ORM ในความเป็นจริงมันเป็นกรอบการจัดการกราฟวัตถุ มันจัดการกราฟวัตถุอินสแตนซ์ที่มีขนาดใหญ่มากซึ่งอาจทำให้แอปสามารถทำงานกับกราฟที่ไม่พอดีกับหน่วยความจำทั้งหมดโดยการใส่วัตถุในหน่วยความจำและหน่วยความจำไม่เพียงพอตามความจำเป็น ข้อมูลหลักยังจัดการข้อ จำกัด เกี่ยวกับคุณสมบัติและความสัมพันธ์และรักษาความสมบูรณ์ของการอ้างอิง (เช่นการเชื่อมโยงไปข้างหน้าและข้างหลังสอดคล้องกันเมื่อวัตถุถูกเพิ่ม / ลบออกไป / จากความสัมพันธ์) Core Data จึงเป็นเฟรมเวิร์กที่เหมาะสำหรับการสร้างส่วนประกอบ "model" ของสถาปัตยกรรม MVC

ในการใช้การจัดการกราฟของ Core Data เกิดขึ้นเพื่อใช้ SQLite เป็นที่เก็บดิสก์ มันอาจจะได้รับการดำเนินการโดยใช้ฐานข้อมูลเชิงสัมพันธ์ที่แตกต่างกันหรือแม้กระทั่งไม่ใช่ฐานข้อมูลเชิงสัมพันธ์เช่นCouchDB ตามที่คนอื่น ๆ ได้ระบุไว้ Core Data ยังสามารถใช้ XML หรือรูปแบบไบนารีหรือรูปแบบอะตอมมิกที่ผู้ใช้เขียนเป็นแบ็กเอนด์ (แม้ว่าตัวเลือกเหล่านี้ต้องการให้กราฟวัตถุทั้งหมดพอดีกับหน่วยความจำ) หากคุณสนใจว่าจะนำ Core Data ไปใช้กับแบ็กเอนด์ SQLite อย่างไรคุณอาจต้องการตรวจสอบกรอบOmniDataObjectsของOmniGroupซึ่งเป็นการนำโอเพ่นซอร์สของชุดย่อยของ Core Data API มาใช้ BaseTenกรอบยังเป็นการดำเนินการของแกน API ข้อมูลโดยใช้ PostgreSQL เป็นแบ็กเอนด์

เนื่องจาก Core Data ไม่ได้มีวัตถุประสงค์เพื่อเป็น ORM สำหรับ SQLite จึงไม่สามารถอ่าน schema ของ SQLite ได้ ในทางกลับกันคุณไม่ควรพึ่งพาความสามารถในการอ่านที่เก็บข้อมูล SQLite ของ Core Data ด้วยเครื่องมือ SQLite อื่น ๆ สคีมาเป็นรายละเอียดการใช้งานที่อาจเปลี่ยนแปลงได้

ดังนั้นจึงไม่มีข้อขัดแย้งใด ๆ ระหว่างการใช้ Core Data หรือ SQLite โดยตรง หากคุณต้องการฐานข้อมูลเชิงสัมพันธ์ให้ใช้ SQLite (โดยตรงหรือผ่านทางหนึ่งใน wrapper Objective-C เช่นFMDB ) หรือเซิร์ฟเวอร์ฐานข้อมูลเชิงสัมพันธ์ อย่างไรก็ตามคุณอาจต้องการเรียนรู้ข้อมูลหลักเพื่อใช้เป็นกรอบการจัดการกราฟวัตถุ เมื่อรวมกับคลาสคอนโทรลเลอร์ของ Apple และวิดเจ็ตมุมมองที่เข้ากันได้กับการเชื่อมโยงคีย์ - ค่าคุณสามารถใช้สถาปัตยกรรม MVC ที่สมบูรณ์พร้อมรหัสน้อยมาก


11
หมายเหตุ fmdb ไม่ใช่ ORM เพียง objc wrapper รอบ sqlite3 C api
robottobor

ขอบคุณสำหรับการจับ; ฉันจะอัปเดตโพสต์
Barry Wark

3
คำตอบที่ยอดเยี่ยม FMDB ได้ย้ายไปที่ github - github.com/ccgus/fmdb - และถูกแนะนำโดยนักพัฒนา NetNewsWire: inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan

50
ด้วย iOS 5.0 คุณจะได้รับประโยชน์เพิ่มเติมจากความสามารถในการใช้ซิงค์ไฟล์ iCloud ได้ฟรีหากคุณใช้ Core Data หากคุณใช้ SQLite โดยตรงจะต้องมีการแก้ไขด้วยตนเองจำนวนมากและการติดตั้งใช้งานเพื่อให้ซิงค์ใน iCloud
แปลก

1
ลอง www.github.com/pmurphyjam/DBExample เป็นโครงการ Xcode ที่ใช้ SQLite
Pat

46

และด้วย iOS 5.0 คุณจะได้รับสิทธิประโยชน์เพิ่มเติมจากความสามารถในการใช้ซิงค์ไฟล์ iCloud ได้ฟรีหากคุณใช้ Core Data หากคุณใช้ SQLite โดยตรงจะต้องมีการแก้ไขด้วยตนเองจำนวนมากและการติดตั้งใช้งานเพื่อให้ซิงค์ใน iCloud



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

4
อัปเดต (หลังจาก WWDC 2016) - ความสามารถในการเชื่อมต่อ iCloud ของ Core Data กำลังถูกเลิกใช้และอาจจะถูกยกเลิกในอนาคต เพิ่มเติม: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Nikolay Suvandzhiev

35

Core Data ไม่ได้เป็นเครื่องมือฐานข้อมูลมากนักเนื่องจากเป็น API ที่เป็นนามธรรมเหนือแหล่งข้อมูลจริง คุณสามารถบอก Core Data ให้บันทึกเป็นฐานข้อมูล sqlite, plist, ไฟล์ไบนารี่หรือแม้แต่ประเภทแหล่งข้อมูลที่กำหนดเอง

ฉันขอแนะนำให้เรียนรู้ Core Data เพราะเป็นทรัพยากรที่ยอดเยี่ยมที่ช่วยเร่งการพัฒนาแอปพลิเคชันโกโก้ได้อย่างมาก


13

SQLite เป็นหนึ่งในรูปแบบฐานข้อมูลสำหรับ Core Data เมื่อใช้ Core Data คุณจะได้รับการบูรณาการที่ดีขึ้นกับ Cocoa API ที่เหลือ

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