Firebase real vaqtdagi ma'lumotlar bazasini yaratish bo'yicha eng yaxshi amaliyotlar

News Rush 4 oydan beri Firebase-dan foydalanmoqda va biz yaxshilanishni ko'rishni istagan narsalar bor (siz "mukammal mahsulot" deb nomlay olasizmi?), Bu bizning uyali ma'lumotni sinxronlashtirish talablari uchun suyakka qo'shimcha bo'ldi.

Yo'l davomida biz platformani bizning ehtiyojlarimizga mos ravishda qanday qilib to'g'ri ishlatish haqida ba'zi darslarni bilib oldik. Firebase - bu hujjatga yo'naltirilgan / NoSQL ma'lumotlar bazasi va shuning uchun ushbu platformalarning ko'pgina xususiyatlarini baham ko'radi, ammo o'rganish uchun o'ziga xos o'ziga xos xususiyatlarga ham ega. Yo'l davomida biz kashf qilgan narsalarning miyadagi axlati.

RTFM!

SDK hujjatlari odatda dahshatli, shuning uchun ko'pchiligimiz yuqori nuqtalarni kesib o'tishga va keyinchalik unga (yoki hech qachon) qaytishga moyilmiz.

Buning teskarisi bu erda. Qo'llanmalar va namunalarni kuzatish juda oson va ma'lumotnomalar hujjatlari har tomonlama va aldamchi tarzda qisqa. Deyarli har safar bizning jamoamiz biron bir savol yoki muammoga duch kelganda, biz hujjatlarni sog'inib qolgan narsalarimizda echim topardik. Oxir oqibat o'tirdik va har bir so'zni to'g'ri o'qib chiqdik va 3 soat yaxshi sarflandi.

Haqiqiy dunyo muammolariga echim topish uchun xazina topadigan blog ham mavjud. News Rush-da biz tanqidiy deb topgan ba'zi postlar:

  • Firebase ma'lumotlar bazasida guruh xavfsizligi
  • So'rovlar, 1 qism: Firebase uchun o'zgartirilgan umumiy SQL so'rovlari
  • Eng yaxshi amaliyotlar: Firebase-dagi massivlar

Xulosa: "Sxema kam" degani miyadan kam degani emas!

Hujjatga asoslangan ma'lumotlar bazalari ma'lumotlarning tuzilishi kamroq ahamiyatga ega ekanligi to'g'risida oldindan rejalashtirishni keng tarqalgan noto'g'ri tushunish. Bu afsona. Biror narsa bo'lsa, biz buning aksini topdik: ular ko'proq narsani talab qiladi.

Yaxshi rejalashtirish har qanday dasturiy tarkibiy qismdan eng yuqori ko'rsatkichni siqib chiqarishga yordam berishi mumkinligi haqida g'ayritabiiy narsa yo'q. Ammo SQL ma'lumotlar bazasida rejalashtirish xatolarini tuzatish, oddiygina ko'proq jadvallarga qo'shilish, so'rovlarni bajarish yoki ma'lumotlarning ommaviy yangilanishi orqali amalga oshiriladi. Firebase-da bunday tushunchalar mavjud emasligi sababli, o'tirishga vaqt ajrating va ma'lumotlaringizni va kirish naqshlarini oldindan belgilab oling. Siz qilganingizdan xursand bo'lasiz.

Va RTFM!

Qo'llab-quvvatlash chalkash

Qo'llab-quvvatlashning bir nechta variantlari mavjud, ammo ma'lum bir vaziyatda noto'g'ri foydalanishga urinish asabiylashishi mumkin. Bizning tajribamiz:

  • Noqulaylik: Jamiyatga yo'naltirilgan o'z-o'zini boshqarish va miya hujumi boshqa joylarga mos kelmaydi. "Biror narsa pastga" uchun mos emas.
  • Qo'llab-quvvatlash shakli: "rasmiy" qo'llab-quvvatlash joyi. Bu erda "nimadir ishdan chiqqan" deb xabar bering. Xususiyat so'rovlari konservalangan "biz ko'rib chiqamiz, ammo va'da bermaymiz" degan javobni olishi mumkin.
  • Google Guruhlari: Guruhga yo'naltirilgan pochta tizimlarida burilish vaqti haqidagi odatiy xabarlar bilan asosiy guruhning faol ishtiroki. Ilovalar ichki va "g'alati" mavzular bo'yicha yuqori texnik munozaralar uchun eng yaxshi joy.
  • StackOverflow: Sekin / oldindan aytib bo'lmaydigan javob vaqti, ammo zaxira ma'lumotnomasi uchun eng yaxshi joy. Agar siz StackOverflow-da Savol-Javobni o'qigan bo'lsangiz, unda siz eng yaxshi savol turini ham bilasiz.

Ref va oddiy qidirish "arzon"

Firebase-da "ref" ma'lumotlar uchun ko'rsatgichga o'xshaydi. Ularni keshlash yoki boshqacha boshqarish istagi instinktdir, ammo hozirgi Firebase mijoz kutubxonalarida siz buni hech qachon qilmasligingiz kerak. Ular haqiqatan ham ma'lumotlar ob'ektlariga murojaat qilish uchun URL manzillarini o'rab olishadi va kirish huquqini beradigan voqea qo'ng'iroqlari bir vaqtning o'zida faqat bitta tinglovchiga ega bo'lishi mumkin. Agar ob'ektga ikki xil joydan murojaat qilish kerak bo'lsa, unga ikkita havolani oling. Buning uchun ko'proq "xarajat" bo'lmaydi.

Shunga o'xshash qoida ma'lumotlarni olish uchun qo'llaniladi. SQL ma'lumotlar bazasidan keladiganlar, ko'proq ish vaqtini va xarajatlarni qisqartirish uchun iloji boricha kamroq so'rovlarda katta ob'ektlarni olishga harakat qilishgan. Ma'lumotlar tuzilmalarini tekislashda, bitta ma'lumot olish uchun zarur bo'lgan barcha narsalarni olish uchun "xulosa" ma'lumotlarini bir nechta joyga nusxalash istagi paydo bo'ladi.

Firebase-da, bu deyarli butunlay noto'g'ri qaror. Birinchidan, oddiy kalit / ref-ga asoslangan qidiruvlar juda optimallashtirilgan va Firebase ular uchun katta gorizontal shkalani taklif qiladi. News Rush-da o'tkazgan sinovlarimizda, Firebase ko'proq, kichikroq ob'ektlar bilan yanada yaxshi ishlashini aniqladik. Hatto bir nechta keraksiz maydonlarni olib tashlasangiz, o'lchash mumkin bo'lgan samarani oshirish mumkin.

Redisning hash va to'siqlar kabi tuzilmalar uchun optimallashtirilgan naqshlarida bo'lgani kabi, Firebase-ning ulkan gorizontal kengayishi uning asosiy xususiyatlaridan biridir. Bu shunchaki yoqimli bo'lishi kerak emas. U ilova dizaynida vosita sifatida ishlatilishi kerak.

Massivlardan saqlaning

Firebase hujjatlari allaqachon ushbu mavzuni qamrab olgan. Hammasi to'g'ri. Ulardan saqlaning.

Sanalar yo‘q

Firebase-da sana ob'ekti turi yo'q va navlarning pasayishiga yo'l qo'ymaydi. Biz shunchaki sana maydonlari bilan asl ob'ektlarni olib, ularni millisekunddan boshlab davrga qadar bo'lgan qiymatlarga o'zgartiradigan va shu qiymatlarga mos keladigan salbiy son variantlarini qo'shadigan yordamchi "yangilash" funktsiyasini yozdik. Salbiy sonlar vaqtiga qarab o'sishni tartiblashtirish istalgan kamayish tartibini ta'minlaydi.

Bitta o'lcham barchaga mos kelmaydi

O'sha paytda bu juda yaxshi fikr edi ...

Leftage Firebase-ning kuchli tomonlari. Uni har bir ishingizni qilishga majburlamang. Firebase quyidagilar emas:

  • Qidiruv mexanizmi. Prefiksni solishtirish kabi bir nechta asosiy operatsiyalar mavjud, ammo bu shunday. Agar siz to'liq quvvat bilan qidirishingiz kerak bo'lsa, ELK, Algolia va boshqalardan foydalaning.
  • API stack. Firebase uchun bulutli funktsiyalar juda istiqbolli ko'rinadi, ammo hali ham Beta-da. Agar sizning ilovangiz faqat qilinadigan ishlar ro'yxatidan boshqa narsa bo'lsa, qanday qilib server tomonidan bajariladigan yoki ishonchli kod bajarilishini rejalashtiring.
  • Hisobot mexanizmi. O'zingizning ma'lumotlaringizni kesish / zar / filtr / mutate / munge / va hokazo qilish kerak bo'lsa, siz hali ham aloqador ma'lumotlar bazasidan foydalanishni xohlashingiz mumkin.
  • Oflayn rejimda ishlaydigan yoki to'liq foydalanish mumkin. Oflayn funksiya sinxronizatsiya / qat'iyatlilik orqali ta'minlanadi, ammo Firebase buluti dastlab ishtirok etishi kerak.

O'rnatish vs. yangilash

SET va UPDATE operatsiyalari o'rtasida katta farq bor. Bu kalit hali mavjud bo'lmasa, nima sodir bo'lishiga, xususan murakkab ob'ektlar ichidagi kalitlarga ta'sir qiladi. Unga e'tibor bering!

FirebaseUI ajoyib!

Aytishim kerakki, ko'plab platformalar uchun FirebaseUI sheriklik loyihalari mavjud. Ulardan foydalaning. Firebase kollektsiyasida ob'ektlar ro'yxatini namoyish qilish uchun jadval ko'rinishini o'rnatish kabi narsalar uchun ular juda foydali.

Ushbu kutubxona FUICollectionViewDataSource va FUITableViewDataSource (va ularning Android-dagi ekvivalenti) sinflarini taqdim etadi, ular mobil platformada bir nechta kod satrlarini ishga tushiradi. Biz dastlab Firebase-ni baholaganimizda, juda yaxshi boshlandi. Bir necha soat ichida biz stolning boshqa variantlari bilan solishtirganda juda oz o'rganish bilan konsepsiya isbotini yig'ishga muvaffaq bo'ldik.

Agar siz yanada nozik va boshqarishga tayyor bo'lsangiz, FirebaseUI hali ham foydalidir, chunki u quyi darajadagi ma'lumotlarni yig'ish FUIArray va FUIIndexArray-larni taqdim etadi, bu tablarni sarlavhalari va boshqa oddbol displeylari kabi narsalarni haydashga imkon beradi.

Biror narsani sog'indimmi? O'zingiz bilan baham ko'ring!