นี่คือสิ่งที่ฉันได้เรียนรู้ขณะที่ฉันกำหนดวิธีที่ดีที่สุดในการก้าวไปข้างหน้ากับโครงการแอปปัจจุบันของฉัน
Async Storage ("built-in" เพื่อตอบสนอง Native)
ฉันใช้ AsyncStorage สำหรับแอปที่กำลังดำเนินการ พื้นที่เก็บข้อมูลอยู่ในอุปกรณ์ไม่ถูกเข้ารหัส (ดังที่กล่าวไว้ในคำตอบอื่น) หายไปถ้าคุณลบแอพ แต่ควรบันทึกเป็นส่วนหนึ่งของการสำรองข้อมูลของอุปกรณ์และยังคงอยู่ในระหว่างการอัปเกรด (ทั้งการอัปเกรดเนทีฟ )
สรุป: การจัดเก็บในท้องถิ่น; คุณให้โซลูชันการซิงค์ / สำรองข้อมูลของคุณเอง
SQLite
โครงการอื่น ๆ ที่ฉันได้ทำใช้ sqlite3 เพื่อจัดเก็บแอพ สิ่งนี้จะช่วยให้คุณได้รับประสบการณ์คล้ายกับ SQL ด้วยฐานข้อมูลที่สามารถบีบอัดได้ซึ่งสามารถส่งไปยังและจากอุปกรณ์ได้ ฉันไม่ได้มีประสบการณ์ใด ๆ ในการซิงค์พวกเขากับแบ็คเอนด์ แต่ฉันคิดว่ามีห้องสมุดหลายแห่ง มีไลบรารี RN สำหรับเชื่อมต่อกับ SQLite
ข้อมูลจะถูกจัดเก็บในรูปแบบฐานข้อมูลดั้งเดิมของคุณด้วยฐานข้อมูลตารางคีย์ดัชนี ฯลฯ ทั้งหมดที่บันทึกไว้ในดิสก์ในรูปแบบไบนารี สามารถเข้าถึงข้อมูลได้โดยตรงผ่านทางบรรทัดคำสั่งหรือแอพที่มีไดรเวอร์ SQLite
สรุป: การจัดเก็บในท้องถิ่น; คุณจัดหาการซิงค์และสำรองข้อมูล
Firebase
ข้อเสนอ Firebase เหนือสิ่งอื่นใดคือฐานข้อมูล noSQL แบบเรียลไทม์พร้อมกับที่เก็บเอกสาร JSON (เช่น MongoDB) หมายถึงการรักษาลูกค้าจาก 1 ถึง n หมายเลขให้ตรงกัน เอกสารพูดคุยเกี่ยวกับการคงอยู่แบบออฟไลน์ แต่สำหรับรหัสเนทีฟเท่านั้น (Swift / Obj-C, Java) ตัวเลือก JavaScript ของ Google ("เว็บ") ซึ่งใช้โดย React Native ไม่ได้มีตัวเลือกที่เก็บข้อมูลแคช (ดูการอัปเดต 2/18 ด้านล่าง) ไลบรารีถูกเขียนด้วยการสันนิษฐานว่าเว็บเบราว์เซอร์กำลังจะทำการเชื่อมต่อดังนั้นจะมีการเชื่อมต่อแบบกึ่งถาวร คุณอาจจะเขียนกลไกการแคชโลคัลเพื่อเสริมการเรียกใช้หน่วยเก็บ Firebase หรือคุณสามารถเขียนบริดจ์ระหว่างไลบรารีเนทีฟกับรีแอกทีฟเนทีฟ
อัปเดต 2/2018
ฉันได้พบ React Native Firebaseซึ่งมีอินเตอร์เฟส JavaScript ที่เข้ากันได้กับไลบรารี่ของ iOS และ Android (ทำในสิ่งที่ Google สามารถทำได้ / ควรจะทำ) ทำให้คุณได้รับโบนัสจาก React การสนับสนุนพื้นเมือง ด้วยการแนะนำร้านค้าเอกสาร JSON ของ Google ข้างฐานข้อมูลเรียลไทม์ฉันให้ Firebase ดูดีเป็นครั้งที่สองสำหรับแอปแบบเรียลไทม์ที่ฉันวางแผนจะสร้าง
ฐานข้อมูลตามเวลาจริงถูกจัดเก็บเป็นแผนผังคล้าย JSON ที่คุณสามารถแก้ไขบนเว็บไซต์และนำเข้า / ส่งออกได้อย่างง่ายดาย
สรุป: ด้วยปฏิกิริยาตอบสนองพื้นเมือง Firebase RN ได้รับประโยชน์เช่นเดียวกับ Swift และ Java [/ อัปเดต] ปรับขนาดได้ดีสำหรับอุปกรณ์ที่เชื่อมต่อเครือข่าย ต้นทุนต่ำสำหรับการใช้งานต่ำ ผสานรวมกับข้อเสนอคลาวด์อื่น ๆ ของ Google ได้เป็นอย่างดี ข้อมูลสามารถมองเห็นและแก้ไขได้จากส่วนต่อประสาน
ดินแดน
Update 4/2020
MongoDB ได้รับอาณาจักรและกำลังวางแผนที่จะรวมเข้ากับ MongoDB Stitch (กล่าวถึงด้านล่าง) นี้มีลักษณะที่น่าตื่นเต้นมาก
ยังเป็นที่เก็บอ็อบเจ็กต์แบบเรียลไทม์ด้วยการซิงโครไนซ์เครือข่ายอัตโนมัติ พวกเขาโน้มน้าวตัวเองว่าเป็น "อุปกรณ์ก่อน" และวิดีโอสาธิตแสดงให้เห็นว่าอุปกรณ์จัดการการเชื่อมต่อเครือข่ายเป็นระยะ ๆ หรือสูญเสีย
พวกเขาเสนอที่เก็บวัตถุรุ่นฟรีที่คุณโฮสต์บนเซิร์ฟเวอร์ของคุณเองหรือในโซลูชันคลาวด์เช่น AWS หรือ Azure คุณยังสามารถสร้างร้านค้าในหน่วยความจำที่ไม่คงอยู่กับอุปกรณ์ร้านค้าเฉพาะอุปกรณ์ที่ไม่ซิงค์กับเซิร์ฟเวอร์ร้านค้าเซิร์ฟเวอร์แบบอ่านอย่างเดียวและตัวเลือกการอ่าน - เขียนแบบเต็มสำหรับการซิงโครไนซ์กับอุปกรณ์หนึ่งเครื่องหรือมากกว่า พวกเขามีตัวเลือกระดับมืออาชีพและองค์กรที่ค่าใช้จ่ายเพิ่มเติมล่วงหน้าต่อเดือนกว่า Firebase
ต่างจาก Firebase ความสามารถของ Realm ทั้งหมดได้รับการสนับสนุนใน React Native และ Xamarin เช่นเดียวกับในแอพ Swift / ObjC / Java (native)
ข้อมูลของคุณเชื่อมโยงกับวัตถุในรหัสของคุณ เนื่องจากวัตถุเหล่านั้นถูกกำหนดคุณจึงมี schema และการควบคุมเวอร์ชันเป็นสิ่งจำเป็นสำหรับการสร้างรหัส เข้าถึงได้โดยตรงผ่านเครื่องมือ GUI ที่ Realm มี ไฟล์ข้อมูลบนอุปกรณ์เข้ากันได้ข้ามแพลตฟอร์ม
สรุป: อุปกรณ์ก่อนการซิงโครไนซ์ทางเลือกพร้อมแผนฟรีและแบบชำระเงิน คุณสมบัติทั้งหมดที่รองรับใน React Native การปรับขนาดแนวนอนมีราคาแพงกว่า Firebase
iCloud
ฉันไม่ได้เล่นมากกับอันนี้ แต่จะทำในอนาคตอันใกล้
หากคุณมีแอพเนทีฟที่ใช้ CloudKit คุณสามารถใช้ CloudKit JS เพื่อเชื่อมต่อกับคอนเทนเนอร์ของแอพจากเว็บแอป (หรือในกรณีของเราคือ React Native) ในสถานการณ์สมมตินี้คุณอาจมีแอพ iOS ดั้งเดิมและแอป React Native Android
เช่น Realm จะเก็บข้อมูลไว้ในเครื่องและซิงค์กับ iCloud เมื่อทำได้ มีร้านค้าสาธารณะสำหรับแอพของคุณและร้านค้าส่วนตัวสำหรับลูกค้าแต่ละราย ลูกค้าสามารถเลือกที่จะแชร์บางส่วนของร้านค้าหรือวัตถุกับผู้ใช้รายอื่น
ฉันไม่รู้ว่าการเข้าถึงข้อมูลดิบนั้นง่ายเพียงใด schema ที่สามารถตั้งค่าบนเว็บไซต์ของ Apple
สรุป: ยอดเยี่ยมสำหรับแอปที่มีเป้าหมายเป็น Apple
Couchbase
ชื่อใหญ่ บริษัท ใหญ่ ๆ ที่อยู่เบื้องหลัง Community Edition และ Enterprise Edition มีค่าใช้จ่ายในการสนับสนุนมาตรฐาน
พวกเขามีบทช่วยสอนบนเว็บไซต์ของพวกเขาสำหรับการเชื่อมต่อกับ React Native ฉันยังไม่ได้ใช้เวลามากกับสิ่งนี้ แต่ดูเหมือนจะเป็นทางเลือกที่ทำงานได้กับ Realm ในแง่ของการทำงาน ฉันไม่รู้ว่าการเข้าถึงข้อมูลของคุณนอกแอพของคุณหรือ API ใด ๆ ที่คุณสร้างนั้นง่ายเพียงใด
[แก้ไข: พบลิงค์เก่าที่พูดถึง Couchbase และ CouchDB และ CouchDB อาจเป็นตัวเลือกอื่นที่ควรพิจารณา ทั้งสองมีความสัมพันธ์ทางประวัติศาสตร์ แต่ผลิตภัณฑ์ที่แตกต่างอย่างสิ้นเชิงในปัจจุบัน ดูการเปรียบเทียบนี้]
สรุป: ดูเหมือนว่าจะมีความสามารถที่คล้ายกันเป็นอาณาจักร สามารถซิงค์ได้เฉพาะอุปกรณ์หรือซิงค์ ฉันต้องลองดู
MongoDB
อัปเดต 4/2020
Mongo ได้รับอาณาจักรและวางแผนที่จะรวม MongoDB Stitch (กล่าวถึงด้านล่าง) กับอาณาจักร (ดังที่กล่าวไว้ข้างต้น)
ฉันใช้ฝั่งเซิร์ฟเวอร์นี้สำหรับแอปที่ใช้ AsyncStorage ในเครื่อง ฉันชอบที่ทุกอย่างถูกเก็บไว้เป็นวัตถุ JSON ทำให้การส่งผ่านไปยังอุปกรณ์ไคลเอนต์ตรงไปตรงมามาก ในกรณีการใช้งานของฉันมันถูกใช้เป็นแคชระหว่างผู้ให้บริการอัปสตรีมข้อมูลคู่มือทีวีและอุปกรณ์ไคลเอนต์ของฉัน
ไม่มีโครงสร้างที่ยากต่อข้อมูลเช่นสกีมาดังนั้นทุกวัตถุจะถูกเก็บไว้เป็น "เอกสาร" ที่สามารถค้นหาได้ง่ายกรองและอื่น ๆ วัตถุ JSON ที่คล้ายกันอาจมีคุณสมบัติเพิ่มเติม (แต่แตกต่างกัน) หรือวัตถุลูกช่วยให้ มีความยืดหยุ่นมากในการจัดโครงสร้างวัตถุ / ข้อมูลของคุณ
ฉันไม่ได้ลองใช้คุณสมบัติการซิงโครไนซ์ของไคลเอนต์ใด ๆ หรือไม่ได้ใช้มัน ตอบสนองรหัสพื้นเมืองสำหรับ MongoDB ไม่อยู่
สรุป: โซลูชัน NoSQL เฉพาะที่เท่านั้นไม่มีตัวเลือกการซิงค์ที่ชัดเจนเช่น Realm หรือ Firebase
อัปเดต 2/2019
MongoDB มี "ผลิตภัณฑ์" (หรือบริการ) เรียกว่า Stitch เนื่องจากไคลเอนต์ (ในความหมายของเว็บเบราว์เซอร์และโทรศัพท์) ไม่ควรพูดคุยกับ MongoDB โดยตรง (ซึ่งทำโดยใช้รหัสบนเซิร์ฟเวอร์ของคุณ) พวกเขาสร้างส่วนหน้าแบบไร้เซิร์ฟเวอร์ที่แอพของคุณสามารถเชื่อมต่อได้ด้วยหากคุณเลือกใช้ โซลูชันโฮสต์ (Atlas) เอกสารของพวกเขาทำให้ดูเหมือนว่ามีตัวเลือกการซิงค์ที่เป็นไปได้
บทความนี้จากเดือนธันวาคม 2018 กล่าวถึงการใช้ React Native, Stitch และ MongoDB ในแอปตัวอย่างพร้อมกับตัวอย่างอื่น ๆ ที่ลิงก์ในเอกสาร ( https://www.mongodb.com/blog/post/building-ios-and-android-apps) -with-the-mongodb-stitch-react-native-sdk )
Twilio Sync
ตัวเลือก NoSQL อีกตัวสำหรับการซิงโครไนซ์คือการซิงค์ของ Twilio จากไซต์ของพวกเขา: "การซิงค์ช่วยให้คุณจัดการสถานะของอุปกรณ์ทุกชนิดตามเวลาจริงโดยไม่ต้องจัดการกับโครงสร้างพื้นฐานด้านหลัง"
ฉันมองว่านี่เป็นทางเลือกของ Firebase สำหรับหนึ่งในโครงการดังกล่าวโดยเฉพาะหลังจากพูดคุยกับทั้งสองทีม ฉันชอบเครื่องมือสื่อสารอื่น ๆ ของพวกเขาและใช้พวกเขาสำหรับการส่งข้อความอัปเดตจากเว็บแอปง่าย ๆ
[แก้ไข] ฉันได้ใช้เวลากับ Realm มาตั้งแต่แรกที่ฉันเขียนสิ่งนี้ ฉันชอบวิธีที่ฉันไม่ต้องเขียน API เพื่อซิงค์ข้อมูลระหว่างแอพกับเซิร์ฟเวอร์คล้ายกับ Firebase ฟังก์ชั่นที่ไม่ต้องใช้เซิร์ฟเวอร์นั้นดูจะมีประโยชน์มากสำหรับสองสิ่งนี้ จำกัด จำนวนของโค้ดแบ็คเอนด์ที่ฉันต้องเขียน
ฉันชอบความยืดหยุ่นของแหล่งข้อมูล MongoDB ดังนั้นจึงกลายเป็นตัวเลือกของฉันสำหรับฝั่งเซิร์ฟเวอร์ของแอพที่ใช้การเชื่อมต่อบนเว็บและอื่น ๆ
ฉันพบRESTHeartซึ่งสร้าง RESTful API ที่ง่ายและปรับขนาดได้ไปยัง MongoDB ไม่ควรยากเกินไปที่จะสร้างส่วนประกอบ React (Native) ที่อ่านและเขียนวัตถุ JSON ไปยัง RESTHeart ซึ่งส่งผ่านไปยัง / จาก MongoDB
[แก้ไข] ฉันเพิ่มข้อมูลเกี่ยวกับวิธีจัดเก็บข้อมูล บางครั้งสิ่งสำคัญคือต้องรู้ว่าคุณอาจต้องทำงานมากแค่ไหนในระหว่างการพัฒนาและทดสอบหากคุณต้องปรับแต่งและทดสอบข้อมูล
การแก้ไข 2/2019ฉันทดลองกับตัวเลือกเหล่านี้หลายตัวเมื่อออกแบบโครงการที่เกิดขึ้นพร้อมกันในปีที่ผ่านมา (2018) บางคนพูดถึงการ จำกัด การทำงานพร้อมกันอย่างหนักและเบาในเอกสารของพวกเขา (Firebase มีความยากในการเชื่อมต่อ 10,000 ครั้งในขณะที่ Twilio มีข้อ จำกัด ที่นุ่มนวลซึ่งสามารถชนได้ตามการหารือกับทั้งสองทีมที่ AltConf)
หากคุณกำลังออกแบบแอพสำหรับผู้ใช้นับหมื่นถึงแสนคนโปรดเตรียมข้อมูลส่วนหลังให้พร้อม