Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Bonke abasebenzisi bathatha kalula ukwethulwa kanye ne-UI esabelayo ezinhlelweni zeselula. Uma uhlelo lokusebenza luthatha isikhathi eside ukwethula, umsebenzisi uqala ukuzizwa edangele futhi ethukuthele. Ungakwazi ukonakalisa kalula ulwazi lwekhasimende noma ulahlekelwe ngokuphelele umsebenzisi ngisho nangaphambi kokuba aqale ukusebenzisa uhlelo lokusebenza.

Sake sathola ukuthi uhlelo lokusebenza lwe-Dodo Pizza luthatha imizuzwana emi-3 ukwethula ngokwesilinganiso, futhi kwabanye “abanenhlanhla” kuthatha imizuzwana engu-15-20.

Ngezansi kwesinqamuleli kunendaba eneziphetho ezijabulisayo: mayelana nokukhula kwesizindalwazi se-Realm, ukuvuza kwenkumbulo, indlela esiqongelele ngayo izinto ezibekwe esidlekeni, bese sizidonsa ndawonye salungisa yonke into.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani
Umbhali wesihloko: UMaxim Kachinkin - Unjiniyela we-Android eDodo Pizza.

Imizuzwana emithathu kusukela ngokuchofoza kusithonjana sohlelo lokusebenza ku-OnResume() yomsebenzi wokuqala ayinamkhawulo. Futhi kwabanye abasebenzisi, isikhathi sokuqalisa sifinyelele imizuzwana engu-15-20. Kungenzeka kanjani lokhu?

Isifinyezo esifushane kakhulu salabo abangenaso isikhathi sokufunda
Isizindalwazi sethu se-Realm sikhule ngokungapheli. Ezinye izinto ezibekwe esidlekeni azizange zisuswe, kodwa zahlala ziqoqwana. Isikhathi sokuqalisa isicelo sakhula kancane kancane. Sabe sesiyilungisa, futhi isikhathi sokuqalisa safika esihlokweni - saba ngaphansi kwesekhondi elingu-1 futhi asibange sisakhula. Lesi sihloko siqukethe ukuhlaziywa kwesimo kanye nezixazululo ezimbili - esheshayo nesivamile.

Ukucinga nokuhlaziya inkinga

Namuhla, noma yiluphi uhlelo lokusebenza lweselula kufanele luqalise ngokushesha futhi luphendule. Kodwa akukhona nje mayelana nohlelo lokusebenza lweselula. Okuhlangenwe nakho komsebenzisi kokusebenzelana nesevisi kanye nenkampani kuyinto eyinkimbinkimbi. Isibonelo, esimweni sethu, isivinini sokulethwa singenye yezinkomba ezibalulekile zesevisi ye-pizza. Uma ukulethwa kushesha, i-pizza izoshisa, futhi ikhasimende elifuna ukudla manje ngeke kudingeke lilinde isikhathi eside. Ngohlelo lokusebenza, kubalulekile ukudala umuzwa wenkonzo esheshayo, ngoba uma uhlelo lokusebenza luthatha imizuzwana engu-20 kuphela ukuqalisa, kuzomele ulinde isikhathi esingakanani i-pizza?

Ekuqaleni, thina ngokwethu sasibhekene neqiniso lokuthi ngezinye izikhathi isicelo sasithatha imizuzwana embalwa ukwethulwa, bese siqala ukuzwa izikhalo ezivela kwabanye ozakwethu mayelana nokuthi kuthatha isikhathi esingakanani. Kodwa asikwazanga ukuphindaphinda lesi simo.

Yisikhathi esingakanani? Ngokuvumelana ne Amadokhumenti e-Google, uma ukuqala okubandayo kwesicelo kuthatha imizuzwana engaphansi kwe-5, khona-ke lokhu kubhekwa "njengokungathi kujwayelekile". Uhlelo lokusebenza lwe-Android lwe-Dodo Pizza luqalisiwe (ngokuya ngamamethrikhi e-Firebase _app_start) kwe isiqalo esibandayo ngokwesilinganiso ngemizuzwana emi-3 - “Akukuhle, akubi kabi,” njengoba besho.

Kodwa-ke izikhalazo zaqala ukuvela ukuthi isicelo sithathe isikhathi eside kakhulu ukwethula! Okokuqala, sinqume ukukala ukuthi kuyini "kakhulu, kakhulu, isikhathi eside kakhulu". Futhi sisebenzise umkhondo we-Firebase kulokhu Ukulandelela kokuqala kohlelo lokusebenza.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Lokhu kulandelelwa okujwayelekile kukala isikhathi phakathi kwesikhathi umsebenzisi avula ngaso uhlelo lokusebenza kanye nesikhathi lapho i-onResume() yomsebenzi wokuqala isetshenziswa. Ku-Firebase Console le metric ibizwa ngokuthi _app_start. Kwavela ukuthi:

  • Izikhathi zokuqalisa zabasebenzisi abangaphezu kwamaphesenti angama-95 cishe cishe amasekhondi angu-20 (ezinye zide kakhulu), ngaphandle kokuthi isikhathi sokuqalisa esibandayo esimaphakathi singaphansi kwamasekhondi angu-5.
  • Isikhathi sokuqalisa asilona inani eliqhubekayo, kodwa liyakhula ngokuhamba kwesikhathi. Kodwa ngezinye izikhathi kukhona amaconsi. Sithole le phethini lapho sikhulisa isikali sokuhlaziya sibe izinsuku ezingama-90.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Kwafika imicabango emibili:

  1. Kukhona okuvuzayo.
  2. Le “nto” isethwa kabusha ngemva kokukhululwa bese iyavuza futhi.

“Mhlawumbe okuthile nge-database,” sacabanga, futhi sasiqinisile. Okokuqala, sisebenzisa isizindalwazi njengenqolobane; ngesikhathi sokufuduka siyayisula. Okwesibili, i-database ilayishwa lapho uhlelo luqala. Konke kufanelana.

Yini engalungile ngesizindalwazi se-Realm

Siqale ukubheka ukuthi okuqukethwe kusizindalwazi kushintsha kanjani empilweni yohlelo lokusebenza, kusukela ekufakweni kokuqala naphakathi nokusetshenziswa okusebenzayo. Ungabuka okuqukethwe kusizindalwazi se-Realm nge stetho noma ngokuningiliziwe nangokucacile ngokuvula ifayela nge I-Realm Studio. Ukuze ubuke okuqukethwe kusizindalwazi nge-ADB, kopisha ifayela lesizindalwazi se-Realm:

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

Ngemva kokubheka okuqukethwe ku-database ngezikhathi ezahlukene, sithole ukuthi inani lezinto zohlobo oluthile likhula njalo.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani
Isithombe sibonisa isiqeshana se-Realm Studio samafayela amabili: kwesokunxele - isisekelo sohlelo lokusebenza isikhathi esithile ngemva kokufakwa, kwesokudla - ngemva kokusetshenziswa okusebenzayo. Kuyabonakala ukuthi inani lezinto ImageEntity и MoneyType ikhule kakhulu (isithombe-skrini sibonisa inani lezinto zohlobo ngalunye).

Ubudlelwano phakathi kokukhula kwesizindalwazi kanye nesikhathi sokuqalisa

Ukukhula kwesizindalwazi okungalawulwa kubi kakhulu. Kodwa lokhu kusithinta kanjani isikhathi sokuqalisa isicelo? Kulula kakhulu ukukala lokhu nge-ActivityManager. Kusukela ku-Android 4.4, i-logcat ibonisa ilogu enochungechunge Olubonisiwe kanye nesikhathi. Lesi sikhathi silingana nesikhawu kusukela ngesikhathi uhlelo luqaliswa kuze kube sekupheleni komsebenzi wokunikeza. Ngalesi sikhathi izenzakalo ezilandelayo zenzeka:

  • Qala inqubo.
  • Ukuqaliswa kwezinto.
  • Ukudala kanye nokuqaliswa kwemisebenzi.
  • Ukudala isakhiwo.
  • Ukunikezwa kohlelo.

Kuyasifanela. Uma usebenzisa i-ADB ngamafulegi -S kanye -W, ungathola ukuphuma okunwetshiwe ngesikhathi sokuqalisa:

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

Uma uyibamba kusuka lapho grep -i WaitTime isikhathi, ungenza ngokuzenzakalelayo iqoqo lale metric futhi ubuke imiphumela. Igrafu engezansi ibonisa ukuncika kwesikhathi sokuqalisa isicelo enanini lokuqala okubandayo kohlelo lokusebenza.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Ngesikhathi esifanayo, kwakukhona uhlobo olufanayo lobudlelwane phakathi kobukhulu nokukhula kwedathabhesi, eyakhula isuka ku-4 MB yaya ku-15 MB. Sekukonke, kuvela ukuthi ngokuhamba kwesikhathi (ngokukhula kokubandayo kuqala), kokubili isikhathi sokuqalisa isicelo kanye nobukhulu bedathabheki banda. Sine-hypothesis ezandleni zethu. Manje osekusele kwakuwukuqinisekisa ukuncika. Ngakho-ke, sinqume ukususa "ukuvuza" futhi sibone ukuthi lokhu kuzosheshisa ukuqaliswa.

Izizathu zokukhula okungapheli kwesizindalwazi

Ngaphambi kokususa "ukuvuza", kufanelekile ukuqonda ukuthi kungani kuvele kwasekuqaleni. Ukwenza lokhu, masikhumbule ukuthi iyini i-Realm.

I-Realm iyisizindalwazi esingahlobene. Ikuvumela ukuthi uchaze ubudlelwano phakathi kwezinto ngendlela efanayo nokuthi zingaki izizindalwazi ezihlobene ze-ORM ku-Android ezichazwe. Ngasikhathi sinye, i-Realm igcina izinto ngqo enkumbulweni ngenani elincane lezinguquko namamephu. Lokhu kukuvumela ukuthi ufunde idatha esuka kudiski ngokushesha okukhulu, okungamandla e-Realm nokuthi kungani ithandwa.

(Ngezinjongo zalesi sihloko, le ncazelo izosanela. Ungafunda kabanzi mayelana noMbuso endaweni epholile imibhalo noma phakathi kwabo esikoleni).

Onjiniyela abaningi bajwayele ukusebenza kakhulu ngezizindalwazi zobudlelwano (isibonelo, imininingwane yolwazi ye-ORM ene-SQL ngaphansi kwehod). Futhi izinto ezifana nokususwa kwedatha ngokuvamile kubonakala njengokunikeziwe. Kodwa hhayi eMbusweni.

Ngendlela, isici sokususa i-cascade siceliwe isikhathi eside. Lokhu ukubuyekeza и omunye, ehlobene nayo, kwaxoxwa ngayo ngenkuthalo. Kwakunomuzwa wokuthi kuzokwenziwa ngokushesha. Kodwa-ke yonke into ihunyushwe ekusungulweni kwezixhumanisi eziqinile nezibuthakathaka, ezizoxazulula ngokuzenzakalelayo le nkinga. Wayenomdlandla futhi ekhuthele kulo msebenzi isicelo sokudonsa, osekumisiwe okwesikhashana ngenxa yobunzima bangaphakathi.

Ukuvuza kwedatha ngaphandle kokususwa kwe-cascading

Ivuza kangakanani idatha uma uthembele ekususweni kwe-cascading okungekho? Uma ubeke izinto ze-Realm, kuzomele zisuswe.
Ake sibheke (cishe) isibonelo sangempela. 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()

Umkhiqizo osekalishini unezinkambu ezihlukene, okuhlanganisa nesithombe ImageEntity, izithako ezenziwe ngezifiso CustomizationEntity. Futhi, umkhiqizo osekalishini ungaba inhlanganisela enesethi yayo yemikhiqizo RealmList (CartProductEntity). Zonke izinkambu ezisohlwini ziyizinto ze-Realm. Uma sifaka into entsha (copyToRealm() / copyToRealmOrUpdate()) nge-id efanayo, le nto izobe ibhalwe phezu ngokuphelele. Kodwa zonke izinto zangaphakathi (isithombe, customizationEntity kanye ne-cartComboProducts) zizolahlekelwa ukuxhumana nomzali futhi zihlale kusizindalwazi.

Njengoba kulahlekile ukuxhumana nazo, asisazifunda noma sizisuse (ngaphandle uma sifinyelela kuzo ngokucacile noma sisula lonke “ithebula”). Lokhu sikubize ngokuthi “ukuvuza kwenkumbulo”.

Uma sisebenza ne-Realm, kufanele sihlole zonke izici futhi sisuse ngokusobala yonke into ngaphambi kokusebenza okunjalo. Lokhu kungenziwa, ngokwesibonelo, kanje:

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()
}
// и потом уже сохраняем

Uma wenza lokhu, khona-ke konke kuzosebenza njengoba kufanele. Kulesi sibonelo, sicabanga ukuthi azikho ezinye izinto ezifakwe esidlekeni ze-Realm ngaphakathi kwesithombe, customizationEntity, kanye ne-cartComboProducts, ngakho-ke awekho amanye amaluphu afakwe esidlekeni kanye nokususa.

Isixazululo "Esisheshayo".

Into yokuqala esinqume ukuyenza ukuhlanza izinto ezikhula ngokushesha futhi sihlole imiphumela ukuze sibone ukuthi lokhu kuzoyixazulula yini inkinga yethu yasekuqaleni. Okokuqala, isisombululo esilula futhi esinembile kakhulu senziwe, okungukuthi: into ngayinye kufanele ibe nesibopho sokususa izingane zayo. Ukwenza lokhu, sethule isixhumi esibonakalayo esibuyise uhlu lwezinto ezibekwe esidlekeni ze-Realm:

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

Futhi sikusebenzise ezintweni zethu ze-Realm:

@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 zonke izingane njengohlu oluyisicaba. Futhi into ngayinye yengane ingase isebenzise isixhumi esibonakalayo se-NestedEntityAware, okubonisa ukuthi inezinto zangaphakathi ze-Realm okufanele zisuswe, isibonelo. 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
   )
 }
}

Ngokunjalo, ukuzalela kwezinto kungaphindwa.

Bese sibhala indlela esusa ngokuphindaphindiwe zonke izinto ezibekwe esidlekeni. Indlela (yenziwe njengesandiso) deleteAllNestedEntities ithola zonke izinto ezisezingeni eliphezulu nendlela deleteNestedRecursively Isusa ngokuphindiwe zonke izinto ezibekwe esidlekeni kusetshenziswa isixhumi esibonakalayo se-NestEntityAware:

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()
   }
 }
}

Lokhu sikwenze ngezinto ezikhula ngokushesha futhi sabheka ukuthi kwenzekeni.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Ngenxa yalokho, lezo zinto esizihlanganise nalesi sixazululo zayeka ukukhula. Futhi ukukhula jikelele kwesisekelo kwehla, kodwa akuzange kume.

Isixazululo "esivamile".

Nakuba isisekelo saqala ukukhula kancane kancane, sisakhula. Ngakho saqala ukubheka phambili. Iphrojekthi yethu isebenzisa kakhulu ukugcinwa kwedatha ku-Realm. Ngakho-ke, ukubhala zonke izinto ezifakwe esidlekeni zento ngayinye kuwumsebenzi onzima, futhi ingozi yamaphutha iyanda, ngoba ungakhohlwa ukucacisa izinto lapho ushintsha ikhodi.

Bengifuna ukwenza isiqiniseko sokuthi angisebenzisi i-interfaces, kodwa ukuthi yonke into ibisebenza yodwa.

Uma sifuna ukuthi into izisebenzele yodwa, kufanele sisebenzise ukucabanga. Ukuze senze lokhu, singadlula inkambu yekilasi ngalinye futhi sihlole ukuthi ingabe i-Realm object noma uhlu lwezinto:

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

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

Uma inkambu iyi-RealmModel noma i-RealmList, bese wengeza into yale nkambu kuhlu lwezinto ezifakwe esidlekeni. Konke kufana ncamashi nalokhu esikwenzile ngenhla, kuphela lapha kuzokwenziwa ngokwako. Indlela yokususa i-cascade ngokwayo ilula kakhulu futhi ibukeka kanje:

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()
         }
       }
 }
}

Isandiso filterRealmObject ihlunga futhi idlulise izinto ze-Realm kuphela. Indlela getNestedRealmObjects ngokuzindla, ithola zonke izinto ezibekwe esidlekeni ze-Realm bese izifaka ohlwini lomugqa. Bese senza into efanayo ngokuphindaphindiwe. Lapho ususa, udinga ukuhlola into ukuthi iyasebenza yini isValid, ngoba kungenzeka ukuthi izinto ezihlukene zomzali zingaba nezidleke ezifanayo. Kungcono ukugwema lokhu futhi usebenzise isizukulwane esizenzakalelayo se-id lapho udala izinto ezintsha.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Ukusebenzisa ngokugcwele indlela 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 yalokho, kukhodi yethu yeklayenti sisebenzisa okuthi “cascading delete” kumsebenzi ngamunye wokushintsha idatha. Isibonelo, ekusebenzeni kokufaka kubukeka kanjena:

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 ithola zonke izinto ezingeziwe, bese kuba indlela cascadeDelete Isusa ngokuphindiwe zonke izinto eziqoqiwe ngaphambi kokubhala ezintsha. Sigcina sisebenzisa le ndlela kulo lonke uhlelo lokusebenza. Ukuvuza kwenkumbulo ku-Realm kuphele nya. Ngemva kokwenza isilinganiso esifanayo sokuncika kwesikhathi sokuqalisa enanini lokuqala okubandayo kwesicelo, siyawubona umphumela.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Ulayini oluhlaza ubonisa ukuncika kwesikhathi sokuqalisa sohlelo lokusebenza enanini yokubanda eqalayo phakathi nokususwa okuzenzakalelayo kwe-cascade yezinto ezibekwe esidlekeni.

Imiphumela neziphetho

Isizindalwazi esikhula njalo se-Realm besibangela ukuthi uhlelo lokusebenza luqalise kancane kakhulu. Sikhiphe isibuyekezo "nge-cascade delete" yethu yezinto esidleke. Futhi manje sengamela futhi sihlole ukuthi isinqumo sethu sisithinte kanjani isikhathi sokuqalisa isicelo nge-_app_start metric.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Ukuze sihlaziywe, sithatha isikhathi esiyizinsuku ezingu-90 futhi sibone: isikhathi sokuqalisa uhlelo lokusebenza, kokubili i-median naleyo ewela kumaphesenti angama-95 abasebenzisi, siqale ukwehla futhi asisakhuphuka.

Indaba yokuthi ukususwa kwe-cascading ekuqalisweni okude kwe-Realm kuwine kanjani

Uma ubheka ishadi lezinsuku eziyisikhombisa, _app_start metric ibonakala yanele ngokuphelele futhi ingaphansi kwesekhondi elingu-1.

Kuyafaneleka futhi ukungeza ukuthi ngokuzenzakalela, i-Firebase ithumela izaziso uma inani elimaphakathi elithi _app_start lidlula imizuzwana emi-5. Nokho, njengoba singabona, akufanele uthembele kulokhu, kodwa kunalokho ngena futhi ukuhlole ngokucacile.

Into ekhethekile ngesizindalwazi seRealm ukuthi iyisizindalwazi esingahlobene. Naphezu kokusebenziseka kwayo kalula, ukufana nezixazululo ze-ORM nokuxhumanisa into, ayinakho ukususwa kwe-cascade.

Uma lokhu kungacatshangwa, khona-ke izinto ezifakwe esidlekeni zizonqwabelana futhi "zivuze". I-database izokhula njalo, okuzothinta ukwehla noma ukuqaliswa kohlelo lokusebenza.

Ngabelane ngolwazi lwethu ngendlela yokwenza ngokushesha ukususwa kwezinto eziku-Realm, okungakaphumi ebhokisini, kodwa osekukhulunywe ngakho isikhathi eside. bathi и bathi. Esimweni sethu, lokhu kusheshise kakhulu isikhathi sokuqalisa isicelo.

Ngaphandle kwengxoxo mayelana nokubukeka okuseduze kwalesi sici, ukungabikho kokususwa kwe-cascade ku-Realm kwenziwa ngedizayini. Uma uklama uhlelo olusha, cabangela lokhu. Futhi uma usuvele usebenzisa i-Realm, hlola ukuthi unazo yini izinkinga ezinjalo.

Source: www.habr.com

Engeza amazwana