Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Bonke abasebenzisi bathatha ukuqaliswa okukhawulezayo kunye ne-UI ephendulayo kwizicelo eziphathwayo ngokulula. Ukuba isicelo sithatha ixesha elide ukuqalisa, umsebenzisi uqala ukuziva elusizi kwaye enomsindo. Ungawonakalisa ngokulula amava omthengi okanye ulahlekelwe ngumsebenzisi ngokupheleleyo nangaphambi kokuba aqalise ukusebenzisa isicelo.

Sakhe safumanisa ukuba i-app ye-Dodo Pizza ithatha imizuzwana emi-3 ukuyivula ngokomndilili, kwaye kwabanye β€œabanethamsanqa” ithatha imizuzwana eyi-15 ukuya kwengama-20.

Ezantsi kokusikwa libali elinesiphelo esonwabisayo: malunga nokukhula kwesiseko sedatha yeRealm, ukuvuza kwememori, indlela esiqokelele ngayo izinto ezifakwe kwindlwane, emva koko sizitsale kunye salungisa yonke into.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude
Umbhali wenqaku: UMaxim Kachinkin -Umphuhlisi we-Android eDodo Pizza.

Imizuzwana emithathu ukusuka ukucofa kwi icon yesicelo ukuya kwiResume () yomsebenzi wokuqala awunasiphelo. Kwaye kwabanye abasebenzisi, ixesha lokuqalisa lifike kwimizuzwana eyi-15-20. Inokwenzeka njani loo nto?

Isishwankathelo esifutshane kakhulu kwabo bangenaxesha lokufunda
Idatabase yethu yeRealm ikhule ngokungenasiphelo. Ezinye izinto ezibekwe kwindlwane azizange zicinywe, kodwa bezisoloko ziqokelelwa. Ixesha lokuqalisa isicelo liye landa ngokuthe ngcembe. Emva koko sayilungisa, kwaye ixesha lokuqalisa lafika kwithagethi - yaba ngaphantsi kwe-1 yesibini kwaye ayiphinda yanda. Eli nqaku liqulethe uhlalutyo lwemeko kunye nezisombululo ezimbini - ngokukhawuleza kunye nokuqhelekileyo.

Ukukhangela kunye nohlalutyo lwengxaki

Namhlanje, nasiphi na isicelo esiphathwayo kufuneka siqalise ngokukhawuleza kwaye siphendule. Kodwa ayisiyiyo le app yeselula kuphela. Amava omsebenzisi wokusebenzisana nenkonzo kunye nenkampani yinto enzima. Ngokomzekelo, kwimeko yethu, isantya sokuhanjiswa sesinye sezibonakaliso eziphambili zenkonzo ye-pizza. Ukuba ukuhanjiswa kukhawuleza, i-pizza iya kutshisa, kwaye umthengi ofuna ukutya ngoku akayi kulinda ixesha elide. Kwisicelo, kwakhona, kubalulekile ukudala imvakalelo yenkonzo ekhawulezayo, kuba ukuba isicelo sithatha imizuzwana engama-20 kuphela ukuqalisa, kuya kufuneka ulinde ixesha elingakanani i-pizza?

Ekuqaleni, nathi sasijongene nenyaniso yokuba ngamanye amaxesha isicelo sithatha imizuzwana embalwa ukusungulwa, emva koko saqala ukuva izikhalazo ezivela kwabanye oogxa malunga nokuba kuthatha ixesha elingakanani. Kodwa asikwazanga ukuphinda-phinda le meko.

Ide kangakanani? Ngoku ka Amaxwebhu kaGoogle, ukuba isiqalo esibandayo sesicelo sithatha ngaphantsi kwemizuzwana emi-5, ngoko oku kuthathwa "njengokungathi kuqhelekileyo". I-Dodo Pizza ye-Android app yasungulwa (ngokuhambelana ne-Firebase metrics _app_start) kwi isiqalo esibandayo ngokwe-avareji kwimizuzwana emi-3 - "Ayintle, ayiyoyiki," njengoko besitsho.

Kodwa emva koko izikhalazo zaqala ukubonakala ukuba isicelo sithathe ixesha elide kakhulu ukusungulwa! Ukuqala, sigqibe ekubeni silinganise ukuba yintoni "kakhulu, kakhulu, inde kakhulu". Kwaye sisebenzise umkhondo we-Firebase kule nto I-app iqala umkhondo.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Lo mkhondo usemgangathweni ulinganisa ixesha phakathi kwexesha umsebenzisi avula ngalo isicelo kunye nomzuzu i-OnResume () yomsebenzi wokuqala iphunyeziweyo. KwiFirebase Console le metric ibizwa ngokuba _app_start. Kwavela ukuba:

  • Amaxesha okuqalisa kubasebenzisi abangaphezulu kwepesenti ezingama-95 aphantse abe yi-20 imizuzwana (abanye nangaphezulu), nangona ixesha lokuqalisa elibandayo eliphakathi lingaphantsi kwemizuzwana emi-5.
  • Ixesha lokuqalisa alikho ixabiso eliqhubekayo, kodwa likhula ngokuhamba kwexesha. Kodwa ngamanye amaxesha kukho amathontsi. Sifumene le pateni xa sonyusa isikali sohlalutyo ukuya kwiintsuku ezingama-90.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Kwafika iingcinga ezimbini engqondweni:

  1. Kukho into evuzayo.
  2. Le "nto" iphinda isetwe emva kokukhululwa ize ivuze kwakhona.

"Mhlawumbi into ene-database," sacinga, kwaye sasichanekile. Okokuqala, sisebenzisa i-database njenge-cache; ngexesha lokufuduka siyayicima. Okwesibini, i-database ilayishwa xa isicelo siqala. Yonke into iyahambelana.

Yintoni engalunganga kwidathabheyisi yeRealm

Saqala ukujonga indlela imixholo yedatha etshintsha ngayo kubomi besicelo, ukusuka kufakelo lokuqala nangaphezulu ngexesha lokusetyenziswa okusebenzayo. Uyakwazi ukujonga imixholo ye-Realm database ngokusebenzisa stetho okanye kwiinkcukacha ngakumbi kwaye ngokucacileyo ngokuvula ifayile nge Realm Studio. Ukujonga imixholo yedatabase usebenzisa i-ADB, khuphela ifayile yedatha yeRealm:

adb exec-out run-as ${PACKAGE_NAME} cat files/${DB_NAME}

Ukujonga imixholo yedatha ngamaxesha ahlukeneyo, safumanisa ukuba inani lezinto zohlobo oluthile lihlala likhula.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude
Umfanekiso ubonisa isiqwenga seRealm Studio kwiifayile ezimbini: ngakwesobunxele - isiseko sesicelo emva kokufakwa, ngakwesokudla - emva kokusetyenziswa okusebenzayo. Kuyabonakala ukuba inani lezinto ImageEntity ΠΈ MoneyType ikhule kakhulu (umfanekiso wekhusi ubonisa inani lezinto zohlobo ngalunye).

Ubudlelwane phakathi kokukhula kwedatha kunye nexesha lokuqalisa

Ukukhula kwedatha okungalawulwayo kubi kakhulu. Kodwa oku kulichaphazela njani ixesha lokuqalisa isicelo? Kulula kakhulu ukulinganisa oku nge-ActivityManager. Ukusukela kwi-Android 4.4, i-logcat ibonisa ilogi kunye nomtya oBonisiweyo kunye nexesha. Eli xesha lilingana nekhefu ukusuka kwithuba lokuqaliswa kwesicelo kude kube sekupheleni komsebenzi wonikezelo. Ngeli xesha kwenzeka ezi ziganeko zilandelayo:

  • Qala inkqubo.
  • Ukuqaliswa kwezinto.
  • Ukudalwa kunye nokuqaliswa kwemisebenzi.
  • Ukudala uyilo.
  • Unikezelo lwesicelo.

Iyasifanela. Ukuba usebenzisa i-ADB nge -S kunye ne -W iiflegi, unokufumana imveliso eyandisiweyo ngexesha lokuqalisa:

adb shell am start -S -W ru.dodopizza.app/.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN

Ukuba uyibambe ukusuka apho grep -i WaitTime ixesha, ungenza ingqokelela yale metric kwaye ujonge kwiziphumo. Igrafu engezantsi ibonisa ukuxhomekeka kwexesha lokuqalisa kwesicelo kwinani lokuqalisa okubandayo kwesicelo.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Ngelo xesha, kwakukho uhlobo olufanayo lobudlelwane phakathi kobukhulu kunye nokukhula kwedatha, eyakhula ukusuka kwi-4 MB ukuya kwi-15 MB. Lilonke, kuvela ukuba ekuhambeni kwexesha (kunye nokukhula kwengqele iqala), zombini ixesha lokuqaliswa kwesicelo kunye nobukhulu bedatha yedatha. Sine-hypothesis ezandleni zethu. Ngoku okwakusele kukuqinisekisa ukuxhomekeka. Ke ngoko, sigqibe kwelokuba sisuse "ukuvuza" kwaye sibone ukuba oku kuya kukhawulezisa ukuqaliswa.

Izizathu zokukhula kwedatha engapheliyo

Ngaphambi kokususa "ukuvuza", kuyafaneleka ukuqonda ukuba kutheni bavele kwindawo yokuqala. Ukwenza oku, masikhumbule ukuba yintoni iRealm.

I-Realm yidathabheyisi enganxulumani. Ikuvumela ukuba uchaze ubudlelwane phakathi kwezinto ngendlela efanayo nokuba zingaphi ii-ORM zolwazi olunxulumene ne-Android ezichazwe. Kwangaxeshanye, iRealm igcina izinto ngokuthe ngqo kwinkumbulo ngenani elincinci leenguqu kunye neemephu. Oku kukuvumela ukuba ufunde idatha kwidiski ngokukhawuleza kakhulu, amandla e-Realm kwaye kutheni ithandwa.

(Ngenjongo yeli nqaku, le nkcazo iya kukwanela. Unokufunda ngakumbi malunga ne-Realm kwindawo epholileyo amaxwebhu okanye phakathi kwabo iakhademi).

Abaphuhlisi abaninzi bajwayele ukusebenza ngakumbi kunye nedatha yobudlelwane (umzekelo, i-ORM yolwazi kunye neSQL phantsi kwe-hood). Kwaye izinto ezinje ngokucinywa kwedatha zihlala zibonakala ngathi zinikezelwe. Kodwa hayi eMhlabeni.

Ngendlela, isici sokucima i-cascade siceliwe ixesha elide. Oku uhlaziyo ΠΈ enye, enxulumene nayo, kwaxutyushwa ngenkuthalo. Kwakukho imvakalelo yokuba kungekudala iza kwenziwa. Kodwa ke yonke into eguqulelwe ekusungulweni kwamakhonkco anamandla kwaye abuthathaka, anokuthi asombulule ngokuzenzekelayo le ngxaki. Wayedlamkile kwaye ekhuthele kulo msebenzi isicelo sokutsala, esele imisiwe okwangoku ngenxa yobunzima bangaphakathi.

Ukuvuza kwedatha ngaphandle kokucinywa kwe-cascading

Ingaba ngokuchanekileyo ivuza njani idatha ukuba uxhomekeke kwi-cascading engekhoyo yokucima? Ukuba unendlu yezinto zeRealm, kufuneka zicinywe.
Makhe sijonge (phantse) umzekelo wokwenyani. Sinento CartItemEntity:

@RealmClass
class CartItemEntity(
 @PrimaryKey
 override var id: String? = null,
 ...
 var name: String = "",
 var description: String = "",
 var image: ImageEntity? = null,
 var category: String = MENU_CATEGORY_UNKNOWN_ID,
 var customizationEntity: CustomizationEntity? = null,
 var cartComboProducts: RealmList<CartProductEntity> = RealmList(),
 ...
) : RealmObject()

Imveliso kwinqwelo inemihlaba eyahlukeneyo, kubandakanywa nomfanekiso ImageEntity, izithako ezilungiselelwe CustomizationEntity. Kwakhona, imveliso kwinqwelo ingaba yi-combo kunye neeseti zayo zeemveliso RealmList (CartProductEntity). Zonke iindawo ezidwelisiweyo zizinto zeRealm. Ukuba sifaka into entsha (copyToRealm () / copyToRealmOrUpdate ()) nge-id efanayo, ke le nto iya kubhalwa ngaphezulu ngokupheleleyo. Kodwa zonke izinto zangaphakathi (umfanekiso, i-customizationEntity kunye ne-cartComboProducts) ziya kuphulukana nonxibelelwano nomzali kwaye zihlale kwisiseko sedatha.

Ekubeni uxhulumaniso kunye nabo lulahlekile, asisazifundi okanye sizicime (ngaphandle kokuba sifikelela ngokucacileyo okanye sicime "itafile" yonke). Oku sikubize ngokuba β€œkukuvuza kweenkumbulo”.

Xa sisebenza kunye neRealm, kufuneka sihambe ngokucacileyo kuzo zonke izinto kwaye sicime yonke into phambi kokuba kwenziwe oko. Oku kunokwenziwa, umzekelo, ngolu hlobo:

val entity = realm.where(CartItemEntity::class.java).equalTo("id", id).findFirst()
if (first != null) {
 deleteFromRealm(first.image)
 deleteFromRealm(first.customizationEntity)
 for(cartProductEntity in first.cartComboProducts) {
   deleteFromRealm(cartProductEntity)
 }
 first.deleteFromRealm()
}
// ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ сохраняСм

Ukuba wenza oku, yonke into iya kusebenza njengoko kufanelekile. Kulo mzekelo, sicinga ukuba azikho ezinye izinto ezibekwe kwindlwane ye-Realm ngaphakathi komfanekiso, i-customizationEntity, kunye ne-cartComboProducts, ngoko ke azikho ezinye iilophu ezifakwe kwindlwane kunye nokucima.

"Khawuleza" isisombululo

Into yokuqala esigqibe ukuyenza kukucoca izinto ezikhula ngokukhawuleza kwaye sijonge iziphumo ukubona ukuba oku kuya kusombulula ingxaki yethu yangaphambili. Okokuqala, isisombululo esilula kwaye esona sicacileyo senziwe, oko kukuthi: into nganye kufuneka ibe noxanduva lokususa abantwana bayo. Ukwenza oku, sazisa ujongano olubuyise uluhlu lwezinto ezibekwe kwindlwane yeRealm:

interface NestedEntityAware {
 fun getNestedEntities(): Collection<RealmObject?>
}

Kwaye siye sayiphumeza kwizinto zethu zeNdawo:

@RealmClass
class DataPizzeriaEntity(
 @PrimaryKey
 var id: String? = null,
 var name: String? = null,
 var coordinates: CoordinatesEntity? = null,
 var deliverySchedule: ScheduleEntity? = null,
 var restaurantSchedule: ScheduleEntity? = null,
 ...
) : RealmObject(), NestedEntityAware {

 override fun getNestedEntities(): Collection<RealmObject?> {
   return listOf(
       coordinates,
       deliverySchedule,
       restaurantSchedule
   )
 }
}

Π’ getNestedEntities sibuyisela bonke abantwana njengoluhlu olucwangcisiweyo. Kwaye into nganye yomntwana inokuphumeza ujongano lwe-NestedEntityAware, ebonisa ukuba inezinto zangaphakathi zeRealm ezinokuthi zicinywe, umzekelo. ScheduleEntity:

@RealmClass
class ScheduleEntity(
 var monday: DayOfWeekEntity? = null,
 var tuesday: DayOfWeekEntity? = null,
 var wednesday: DayOfWeekEntity? = null,
 var thursday: DayOfWeekEntity? = null,
 var friday: DayOfWeekEntity? = null,
 var saturday: DayOfWeekEntity? = null,
 var sunday: DayOfWeekEntity? = null
) : RealmObject(), NestedEntityAware {

 override fun getNestedEntities(): Collection<RealmObject?> {
   return listOf(
       monday, tuesday, wednesday, thursday, friday, saturday, sunday
   )
 }
}

Kwaye njalo-njalo, indlwane yezinto inokuphinda iphindwe.

Emva koko sibhala indlela yokucima ngokuphindaphindiweyo zonke izinto ezifakwe kwindlwane. Indlela (yenziwe njengesandiso) deleteAllNestedEntities ifumana zonke izinto ezikumgangatho ophezulu kunye nendlela deleteNestedRecursively Isusa ngokuphindaphindiweyo zonke izinto ezibekwe kwindlwane usebenzisa ujongano lwe-NestedEntityAware:

fun <T> Realm.deleteAllNestedEntities(entities: Collection<T>,
 entityClass: Class<out RealmObject>,
 idMapper: (T) -> String,
 idFieldName : String = "id"
 ) {

 val existedObjects = where(entityClass)
     .`in`(idFieldName, entities.map(idMapper).toTypedArray())
     .findAll()

 deleteNestedRecursively(existedObjects)
}

private fun Realm.deleteNestedRecursively(entities: Collection<RealmObject?>) {
 for(entity in entities) {
   entity?.let { realmObject ->
     if (realmObject is NestedEntityAware) {
       deleteNestedRecursively((realmObject as NestedEntityAware).getNestedEntities())
     }
     realmObject.deleteFromRealm()
   }
 }
}

Senze oku ngezona zinto zikhula ngokukhawuleza kwaye sajonga ukuba kwenzeke ntoni.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Ngenxa yoko, ezo zinto sazigubungela ngesi sisombululo zayeka ukukhula. Kwaye ukukhula ngokubanzi kwesiseko kwacotha, kodwa akuzange kume.

Isisombululo "esiqhelekileyo".

Nangona isiseko saqala ukukhula kancinci, sakhula. Ngoko saqala ukujonga ngakumbi. Iprojekthi yethu isebenzisa kakhulu ugcino lwedatha kwiRealm. Ngoko ke, ukubhala zonke izinto ezifakwe kwindlwane yento nganye ngumsebenzi onzima, kunye nomngcipheko weempazamo ukwanda, kuba unokulibala ukucacisa izinto xa utshintsha ikhowudi.

Ndandifuna ukuqiniseka ukuba andisebenzisi i-interfaces, kodwa yonke into yayisebenza yodwa.

Xa sifuna into ethile izisebenzele, kufuneka sisebenzise ukucamngca. Ukwenza oku, sinokuya kwintsimi yeklasi nganye kwaye sijonge ukuba yinto ye-Realm okanye uluhlu lwezinto:

RealmModel::class.java.isAssignableFrom(field.type)

RealmList::class.java.isAssignableFrom(field.type)

Ukuba umhlaba yiRealmModel okanye iRealmList, ngoko yongeza into yalo mhlaba kuluhlu lwezinto ezibekwe kwindlwane. Yonke into ifana nqwa nalapha ngasentla, kuphela apha iya kwenziwa ngokwayo. Indlela yokucima i-cascade ngokwayo ilula kakhulu kwaye ibonakala ngolu hlobo:

fun <T : Any> Realm.cascadeDelete(entities: Collection<T?>) {
 if(entities.isEmpty()) {
   return
 }

 entities.filterNotNull().let { notNullEntities ->
   notNullEntities
       .filterRealmObject()
       .flatMap { realmObject -> getNestedRealmObjects(realmObject) }
       .also { realmObjects -> cascadeDelete(realmObjects) }

   notNullEntities
       .forEach { entity ->
         if((entity is RealmObject) && entity.isValid) {
           entity.deleteFromRealm()
         }
       }
 }
}

Ulwandiso filterRealmObject lihluza kwaye ligqithise kuphela izinto zeRealm. Indlela getNestedRealmObjects ngokubonakalisa, ifumana zonke izinto ezibekwe kwindlwane yeRealm kwaye izibeke kuluhlu olunomgca. Emva koko senza into efanayo ngokuphindaphindiweyo. Xa ucima, kufuneka ujonge into esebenzayo isValid, kuba kusenokwenzeka ukuba izinto zabazali ezahlukeneyo zinokuba nendlwane ezifanayo. Kungcono ukunqanda oku kwaye usebenzise ngokulula ukuveliswa kwe-id xa usenza izinto ezintsha.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Ukuphunyezwa ngokupheleleyo kwendlela ye-getNedRealmObjects

private fun getNestedRealmObjects(realmObject: RealmObject) : List<RealmObject> {
 val nestedObjects = mutableListOf<RealmObject>()
 val fields = realmObject.javaClass.superclass.declaredFields

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π½Π΅ являСтся Π»ΠΈ ΠΎΠ½ΠΎ RealmModel ΠΈΠ»ΠΈ списком RealmList
 fields.forEach { field ->
   when {
     RealmModel::class.java.isAssignableFrom(field.type) -> {
       try {
         val child = getChildObjectByField(realmObject, field)
         child?.let {
           if (isInstanceOfRealmObject(it)) {
             nestedObjects.add(child as RealmObject)
           }
         }
       } catch (e: Exception) { ... }
     }

     RealmList::class.java.isAssignableFrom(field.type) -> {
       try {
         val childList = getChildObjectByField(realmObject, field)
         childList?.let { list ->
           (list as RealmList<*>).forEach {
             if (isInstanceOfRealmObject(it)) {
               nestedObjects.add(it as RealmObject)
             }
           }
         }
       } catch (e: Exception) { ... }
     }
   }
 }

 return nestedObjects
}

private fun getChildObjectByField(realmObject: RealmObject, field: Field): Any? {
 val methodName = "get${field.name.capitalize()}"
 val method = realmObject.javaClass.getMethod(methodName)
 return method.invoke(realmObject)
}

Ngenxa yoko, kwikhowudi yethu yomxhasi sisebenzisa "i-cascading delete" kumsebenzi ngamnye wokuguqulwa kwedatha. Umzekelo, kumsebenzi wofakelo ibonakala ngolu hlobo:

override fun <T : Entity> insert(
 entityInformation: EntityInformation,
 entities: Collection<T>): Collection<T> = entities.apply {
 realmInstance.cascadeDelete(getManagedEntities(entityInformation, this))
 realmInstance.copyFromRealm(
     realmInstance
         .copyToRealmOrUpdate(this.map { entity -> entity as RealmModel }
 ))
}

Indlela kuqala getManagedEntities ifumana zonke izinto ezongeziweyo, kunye nendlela cascadeDelete Ucima ngokuphindaphindiweyo zonke izinto eziqokelelweyo ngaphambi kokubhala ezintsha. Sigqiba ukusebenzisa le ndlela kulo lonke usetyenziso. Ukuvuza kweenkumbulo kwi-Realm kuphelile ngokupheleleyo. Emva kokwenza umlinganiso ofanayo wokuxhomekeka kwexesha lokuqalisa kwinani lokuqalisa okubandayo kwesicelo, siyayibona isiphumo.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Umgca oluhlaza ubonisa ukuxhomekeka kwexesha lokuqalisa kwesicelo kwinani lokubanda eliqala ngexesha lokucinywa kwe-cascade ngokuzenzekelayo kwizinto ezifakwe kwindlwane.

Iziphumo kunye nezigqibo

Ugcino lwedatha oluhlala lukhula lweRealm luye lwabangela ukuba usetyenziso luqalise ngokucothayo. Sikhuphe uhlaziyo ngeyethu "cascading delete" yezinto ezifakwe kwindlwane. Kwaye ngoku sibeka iliso kwaye sivavanye ukuba isigqibo sethu silichaphazele njani ixesha lokuqalisa isicelo nge-_app_start metric.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Ukuhlalutya, sithatha ixesha leentsuku ze-90 kwaye sibone: ixesha lokuqaliswa kwesicelo, zombini i-median kunye neyokuwela kwi-95th percentile yabasebenzisi, yaqala ukuhla kwaye ayisayi kunyuka.

Ibali lendlela ukucinywa kwe-Cascade kwiRealm kuphumelele kuphehlelelo olude

Ukuba ujonga itshathi yeentsuku ezisixhenxe, i-_app_start metric ibonakala ifanelekile kwaye ingaphantsi komzuzwana omnye.

Kukwafanelekile ukongeza ukuba ngokuzenzekelayo, i-Firebase ithumela izaziso ukuba ixabiso eliphakathi kwe-_app_start lidlula imizuzwana emi-5. Nangona kunjalo, njengoko sibona, akufanele uthembele koku, kodwa kunokuba ungene kwaye ukhangele ngokucacileyo.

Into ekhethekileyo malunga ne-Realm database kukuba i-database engeyiyo yobudlelwane. Ngaphandle kokusebenziseka kwayo ngokulula, ukufana nezisombululo ze-ORM kunye nokudibanisa into, ayinalo ucimo lwe-cascade.

Ukuba oku akuthathelwa ngqalelo, ke izinto ezibekwe kwindlwane ziya kuqokelelana kwaye β€œzivuze.” I-database iya kukhula rhoqo, nto leyo eya kuchaphazela ukucotha okanye ukuqaliswa kwesicelo.

Ndabelane ngamava ethu ngendlela yokwenza ngokukhawuleza ukucinywa kwe-cascade yezinto kwi-Realm, engekaphumi ebhokisini, kodwa sele kuthethwa ngayo ixesha elide. yithi ΠΈ yithi. Kwimeko yethu, oku kukhawulezise kakhulu ixesha lokuqalisa isicelo.

Ngaphandle kwengxoxo malunga nenkangeleko ekufutshane yeli nqaku, ukungabikho kokucinywa kwe-cascade kwi-Realm kwenziwa ngoyilo. Ukuba uyila isicelo esitsha, ke yithathele ingqalelo oku. Kwaye ukuba sele usebenzisa iRealm, jonga ukuba uneengxaki ezinjalo.

umthombo: www.habr.com

Yongeza izimvo