Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Txhua tus neeg siv tau nrawm nrawm thiab teb UI hauv cov ntawv thov mobile tau tso cai. Yog tias daim ntawv thov siv sijhawm ntev los tso tawm, tus neeg siv pib tu siab thiab npau taws. Koj tuaj yeem cuam tshuam cov neeg siv khoom tau yooj yim lossis ploj tag nrho cov neeg siv txawm tias ua ntej nws pib siv daim ntawv thov.

Peb ib zaug pom tias Dodo Pizza app siv sijhawm 3 vib nas this los pib qhov nruab nrab, thiab rau qee qhov "muaj hmoo" nws yuav siv sijhawm 15-20 vib nas this.

Hauv qab no qhov kev txiav yog ib zaj dab neeg nrog kev zoo siab kawg: hais txog kev loj hlob ntawm Realm database, lub cim xeeb xau, yuav ua li cas peb khaws cov khoom zes, thiab tom qab ntawd rub peb tus kheej ua ke thiab kho txhua yam.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching
Tus sau tsab xov xwm: Maxim Kachinkin - Tus tsim tawm Android ntawm Dodo Pizza.

Peb vib nas this los ntawm txhaj rau ntawm daim ntawv thov icon rau onResume() ntawm thawj cov haujlwm yog infinity. Thiab rau qee tus neeg siv, lub sijhawm pib mus txog 15-20 vib nas this. Qhov no txawm ua tau li cas?

Cov ntsiab lus luv luv heev rau cov uas tsis muaj sijhawm nyeem
Peb lub Realm database loj hlob tsis kawg. Qee cov khoom zes tsis tau muab tshem tawm, tab sis tau khaws cia tas li. Daim ntawv thov pib lub sij hawm maj mam nce. Tom qab ntawd peb kho nws, thiab lub sijhawm pib los ntawm lub hom phiaj - nws tau dhau los ua tsawg dua 1 thib ob thiab tsis nce ntxiv lawm. Kab lus muaj kev tshuaj xyuas ntawm qhov xwm txheej thiab ob txoj kev daws teeb meem - ib qho nrawm thiab ib txwm ua.

Tshawb nrhiav thiab tshuaj xyuas qhov teeb meem

Niaj hnub no, txhua daim ntawv thov mobile yuav tsum tau pib sai thiab teb. Tab sis nws tsis yog hais txog mobile app xwb. Cov neeg siv kev paub txog kev cuam tshuam nrog kev pabcuam thiab lub tuam txhab yog qhov nyuaj. Piv txwv li, nyob rau hauv peb cov ntaub ntawv, kev xa khoom ceev yog ib qho ntawm cov cim tseem ceeb rau kev pabcuam pizza. Yog tias kev xa khoom sai, lub pizza yuav kub, thiab cov neeg siv khoom xav noj tam sim no yuav tsis tau tos ntev. Rau daim ntawv thov, nyob rau hauv lem, nws yog ib qho tseem ceeb los tsim kom muaj kev xav ntawm kev pab cuam sai, vim hais tias yog tias daim ntawv thov tsuas siv 20 vib nas this los tso tawm, ces koj yuav tau tos ntev npaum li cas rau pizza?

Thaum xub thawj, peb tus kheej tau ntsib nrog qhov tseeb tias qee zaum daim ntawv thov siv ob peb vib nas this los pib, thiab tom qab ntawd peb pib hnov ​​​​cov lus tsis txaus siab los ntawm lwm cov npoj yaig txog nws siv sijhawm ntev npaum li cas. Tab sis peb tsis tuaj yeem rov ua qhov xwm txheej no tas mus li.

Ntev npaum li cas? Raws li Google cov ntaub ntawv, yog tias qhov pib txias ntawm daim ntawv thov siv sijhawm tsawg dua 5 vib nas this, qhov no suav tias yog "zoo li qub". Dodo Pizza Android app launched (raws li Firebase metrics _app_start) ntawm pib txias qhov nruab nrab hauv 3 vib nas this - "Tsis zoo, tsis txaus ntshai," raws li lawv hais.

Tab sis tom qab ntawd kev tsis txaus siab pib tshwm sim tias daim ntawv thov siv sijhawm ntev heev los tso tawm! Pib nrog, peb txiav txim siab ntsuas qhov "heev, heev, ntev" yog dab tsi. Thiab peb siv Firebase taug qab rau qhov no App pib kab.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Cov qauv kab no ntsuas lub sijhawm nruab nrab ntawm lub sijhawm tus neeg siv qhib daim ntawv thov thiab lub sijhawm onResume() ntawm thawj qhov haujlwm raug tua. Hauv Firebase Console qhov ntsuas no hu ua _app_start. Nws muab tawm tias:

  • Lub sijhawm pib rau cov neeg siv saum toj no 95 feem pua ​​​​yog ze li ntawm 20 vib nas this (qee qhov ntev dua), txawm tias lub sijhawm pib txias nruab nrab yog tsawg dua 5 vib nas this.
  • Lub sijhawm pib tsis yog tus nqi tas li, tab sis loj hlob dhau sijhawm. Tab sis qee zaum muaj te. Peb pom tus qauv no thaum peb nce qhov ntsuas ntsuas rau 90 hnub.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Ob qhov kev xav tuaj rau hauv siab:

  1. Ib yam dab tsi los.
  2. Qhov "ib yam dab tsi" rov pib dua tom qab tso tawm thiab tom qab ntawd xau dua.

"Tej zaum qee yam nrog cov ntaub ntawv," peb xav, thiab peb yog. Ua ntej, peb siv cov ntaub ntawv khaws cia ua lub cache; thaum tsiv teb tsaws peb tshem nws. Qhov thib ob, lub database yog loaded thaum daim ntawv thov pib. Txhua yam haum ua ke.

Dab tsi tsis ncaj ncees lawm nrog Realm database

Peb pib tshawb xyuas seb cov ntsiab lus ntawm cov ntaub ntawv hloov pauv li cas hauv lub neej ntawm daim ntawv thov, los ntawm kev teeb tsa thawj zaug thiab txuas ntxiv thaum lub sijhawm siv. Koj tuaj yeem saib cov ntsiab lus ntawm Realm database ntawm stetho los yog nyob rau hauv ntau yam thiab meej los ntawm qhib cov ntaub ntawv ntawm Realm Studio. Txhawm rau saib cov ntsiab lus ntawm cov ntaub ntawv ntawm ADB, luam cov ntaub ntawv Realm database:

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

Tom qab saib cov ntsiab lus ntawm cov ntaub ntawv nyob rau lub sijhawm sib txawv, peb pom tias cov khoom ntawm ib hom yog nce ntxiv.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching
Daim duab qhia ib feem ntawm Realm Studio rau ob cov ntaub ntawv: sab laug - daim ntawv thov hauv paus qee lub sijhawm tom qab kev teeb tsa, sab xis - tom qab siv nquag. Nws tuaj yeem pom tias muaj pes tsawg tus khoom ImageEntity ΠΈ MoneyType tau loj hlob heev (lub screenshot qhia tau hais tias tus naj npawb ntawm cov khoom ntawm txhua hom).

Kev sib raug zoo ntawm database loj hlob thiab lub sijhawm pib

Uncontrolled database loj hlob yog heev phem. Tab sis qhov no cuam tshuam li cas rau lub sijhawm pib thov? Nws yooj yim heev los ntsuas qhov no los ntawm ActivityManager. Txij li thaum Android 4.4, logcat qhia lub cav nrog cov hlua Tsom iav thiab lub sijhawm. Lub sijhawm no yog sib npaug rau lub sijhawm txij li lub sijhawm daim ntawv thov raug tso tawm mus txog rau thaum kawg ntawm qhov kev ua rendering. Lub sijhawm no, cov xwm txheej hauv qab no tshwm sim:

  • Pib qhov txheej txheem.
  • Initialization ntawm cov khoom.
  • Tsim thiab pib ua haujlwm.
  • Tsim ib tug layout.
  • Daim ntawv thov rendering.

Haum rau peb. Yog tias koj khiav ADB nrog tus chij -S thiab -W, koj tuaj yeem tau txais cov zis txuas ntxiv nrog lub sijhawm pib:

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

Yog tias koj rub nws los ntawm qhov ntawd grep -i WaitTime lub sij hawm, koj tuaj yeem automate qhov sau ntawm no metric thiab visually saib cov txiaj ntsig. Daim duab hauv qab no qhia txog kev vam khom ntawm daim ntawv thov pib lub sijhawm ntawm tus lej ntawm qhov pib txias ntawm daim ntawv thov.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Nyob rau tib lub sijhawm, muaj tib qhov kev sib raug zoo ntawm qhov loj thiab kev loj hlob ntawm cov ntaub ntawv, uas loj hlob los ntawm 4 MB mus rau 15 MB. Nyob rau hauv tag nrho, nws hloov tawm hais tias nyob rau lub sij hawm (nrog rau kev loj hlob ntawm txias pib), ob qho tib si lub sij hawm tso tawm daim ntawv thov thiab qhov loj ntawm cov ntaub ntawv tau nce. Peb muaj ib tug hypothesis ntawm peb txhais tes. Tam sim no txhua yam uas tseem tshuav yog kom paub meej tias kev vam khom. Yog li ntawd, peb tau txiav txim siab tshem tawm cov "tawg" thiab saib seb qhov no puas yuav ua kom lub community launch.

Yog vim li cas rau qhov kawg database loj hlob

Ua ntej tshem tawm "txias", nws tsim nyog nkag siab tias vim li cas lawv tshwm sim thawj zaug. Ua li no, cia peb nco ntsoov tias Realm yog dab tsi.

Realm yog cov ntaub ntawv tsis muaj feem cuam tshuam. Nws tso cai rau koj los piav txog kev sib raug zoo ntawm cov khoom hauv txoj kev zoo sib xws rau pes tsawg ORM cov ntaub ntawv sib txheeb ntawm Android tau piav qhia. Nyob rau tib lub sijhawm, Realm khaws cov khoom ncaj qha hauv lub cim xeeb nrog qhov tsawg kawg ntawm kev hloov pauv thiab daim ntawv qhia. Qhov no tso cai rau koj nyeem cov ntaub ntawv los ntawm disk sai heev, uas yog Realm lub zog thiab vim li cas nws thiaj li nyiam.

(Rau lub hom phiaj ntawm tsab xov xwm no, cov lus piav qhia no yuav txaus rau peb. Koj tuaj yeem nyeem ntxiv txog Realm hauv qhov txias cov ntaub ntawv los yog hauv lawv kev kawm).

Ntau tus neeg tsim khoom tau ua haujlwm ntau dua nrog cov ntaub ntawv sib raug zoo (piv txwv li, ORM databases nrog SQL hauv qab hood). Thiab tej yam xws li cascading cov ntaub ntawv tshem tawm feem ntau zoo li muab. Tab sis tsis nyob hauv Realm.

Los ntawm txoj kev, cascade deletion feature tau nug rau ib lub sij hawm ntev. Qhov no kho dua ΠΈ lwm, txuam nrog nws, tau sib tham sib tham. Muaj kev xav tias tsis ntev nws yuav ua tiav. Tab sis tom qab ntawd txhua yam tau muab txhais rau hauv kev taw qhia ntawm kev sib txuas muaj zog thiab tsis muaj zog, uas tseem yuav daws qhov teeb meem no. Ua tau zoo heev thiab nquag ua haujlwm ntawm txoj haujlwm no rub thov, uas tau raug ncua rau tam sim no vim muaj teeb meem sab hauv.

Cov ntaub ntawv xau yam tsis muaj cascading deletion

Yuav ua li cas raws nraim cov ntaub ntawv xau yog tias koj cia siab rau qhov tsis muaj cascading rho tawm? Yog tias koj muaj nested Realm cov khoom, ces lawv yuav tsum tau muab tshem tawm.
Cia peb saib ib (yuav luag) piv txwv tiag. Peb muaj ib yam khoom 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()

Cov khoom hauv lub laub muaj ntau qhov chaw, nrog rau daim duab ImageEntity, customized cov khoom xyaw CustomizationEntity. Tsis tas li ntawd, cov khoom hauv lub laub tuaj yeem ua ib qho kev sib txuas nrog nws cov khoom tsim RealmList (CartProductEntity). Txhua daim teb uas tau teev tseg yog Realm khoom. Yog tias peb ntxig ib yam khoom tshiab (copyToRealm() / copyToRealmOrUpdate()) nrog tib id, ces cov khoom no yuav raug sau tag nrho. Tab sis tag nrho cov khoom sab hauv (duab, customizationEntity thiab cartComboProducts) yuav poob kev sib txuas nrog niam txiv thiab nyob twj ywm hauv cov ntaub ntawv.

Txij li thaum kev sib txuas nrog lawv ploj lawm, peb tsis nyeem lawv lossis tshem tawm lawm (tshwj tsis yog peb nkag mus rau lawv lossis tshem tag nrho "cov lus"). Peb tau hu qhov no "kev nco qab".

Thaum peb ua hauj lwm nrog Realm, peb yuav tsum qhia meej meej mus txog tag nrho cov ntsiab lus thiab meej meej tshem tawm txhua yam ua ntej ua haujlwm li ntawd. Qhov no tuaj yeem ua tau, piv txwv li, zoo li no:

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()
}
// ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ сохраняСм

Yog tias koj ua li no, ces txhua yam yuav ua haujlwm raws li nws yuav tsum tau ua. Hauv qhov piv txwv no, peb xav tias tsis muaj lwm yam khoom nested Realm hauv cov duab, customizationEntity, thiab cartComboProducts, yog li tsis muaj lwm yam nested loops thiab deletes.

"Quick" tov

Thawj qhov uas peb tau txiav txim siab ua yog ntxuav cov khoom loj tshaj plaws thiab xyuas seb qhov no puas yuav daws tau peb qhov teeb meem qub. Ua ntej, qhov kev daws teeb meem yooj yim tshaj plaws thiab yooj yim tshaj plaws tau tsim, uas yog: txhua yam khoom yuav tsum yog lub luag haujlwm tshem tawm nws cov menyuam. Txhawm rau ua qhov no, peb tau qhia txog lub interface uas tau xa rov qab cov npe ntawm nws cov khoom hauv ntiaj teb nested:

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

Thiab peb tau siv nws hauv peb cov khoom 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 peb xa tag nrho cov me nyuam raws li ib daim ntawv teev. Thiab txhua yam khoom me me tuaj yeem siv tau los ntawm NestedEntityAware interface, qhia tias nws muaj cov khoom hauv Realm kom tshem tawm, piv txwv li. 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
   )
 }
}

Thiab yog li ntawd, qhov zes ntawm cov khoom tuaj yeem rov ua dua.

Tom qab ntawd peb sau ib txoj kev uas recursively deletes tag nrho cov khoom nested. Method (ua raws li kev txuas ntxiv) deleteAllNestedEntities tau tag nrho cov khoom saum toj kawg nkaus thiab txoj kev deleteNestedRecursively Recursively tshem tawm tag nrho cov khoom nested siv NestedEntityAware interface:

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

Peb tau ua qhov no nrog cov khoom loj tshaj plaws thiab tshawb xyuas qhov tshwm sim.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Yog li ntawd, cov khoom uas peb tau npog nrog cov tshuaj no tso tseg tsis loj hlob. Thiab tag nrho txoj kev loj hlob ntawm lub hauv paus qeeb, tab sis tsis nres.

Qhov kev daws teeb meem "normal".

Txawm hais tias lub hauv paus pib loj hlob qeeb, nws tseem loj hlob. Yog li ntawd peb pib saib ntxiv. Peb qhov project ua kom nquag siv cov ntaub ntawv caching hauv Realm. Yog li ntawd, sau tag nrho cov khoom nested rau txhua yam khoom siv zog, ntxiv rau kev pheej hmoo ntawm kev ua yuam kev nce ntxiv, vim tias koj tuaj yeem tsis nco qab qhia cov khoom thaum hloov cov cai.

Kuv xav kom paub tseeb tias kuv tsis siv interfaces, tab sis txhua yam ua haujlwm ntawm nws tus kheej.

Thaum peb xav tau ib yam dab tsi los ua nws tus kheej, peb yuav tsum siv kev xav. Txhawm rau ua qhov no, peb tuaj yeem mus dhau ntawm txhua chav kawm thiab xyuas seb nws puas yog Realm khoom lossis cov npe ntawm cov khoom:

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

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

Yog tias daim teb yog RealmModel lossis RealmList, tom qab ntawd ntxiv cov khoom ntawm daim teb no rau cov npe ntawm cov khoom zes. Txhua yam zoo ib yam li peb tau ua saum toj no, tsuas yog ntawm no nws yuav ua tiav ntawm nws tus kheej. Txoj kev tshem tawm cascade nws tus kheej yog qhov yooj yim heev thiab zoo li qhov no:

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

Txuas ntxiv filterRealmObject lim tawm thiab hla tsuas yog Realm cov khoom. Txoj kev getNestedRealmObjects los ntawm kev xav txog, nws pom tag nrho cov khoom nyob ze ze thiab muab tso rau hauv ib daim ntawv teev npe. Tom qab ntawd peb ua tib yam recursively. Thaum tshem tawm, koj yuav tsum xyuas cov khoom kom siv tau isValid, vim nws yuav yog cov khoom niam txiv sib txawv tuaj yeem muaj cov khoom sib xws. Nws yog qhov zoo dua los zam qhov no thiab tsuas yog siv nws pib-tiam ntawm id thaum tsim cov khoom tshiab.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Kev siv tag nrho ntawm getNestedRealmObjects txoj kev

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

Yog li ntawd, hauv peb cov neeg siv khoom peb siv "cascading rho tawm" rau txhua qhov kev hloov kho cov ntaub ntawv. Piv txwv li, rau kev ua haujlwm ntxig nws zoo li no:

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

Txoj kev ua ntej getManagedEntities tau txais tag nrho cov khoom ntxiv, thiab tom qab ntawd txoj kev cascadeDelete Recursively deletes tag nrho cov khoom sau ua ntej sau cov tshiab. Peb xaus siv txoj hauv kev no thoob plaws hauv daim ntawv thov. Lub cim xeeb xau hauv Realm tau ploj mus tag nrho. Tau ua tiav qhov kev ntsuas tib yam ntawm kev vam khom lub sijhawm pib ntawm tus naj npawb ntawm qhov txias pib ntawm daim ntawv thov, peb pom qhov tshwm sim.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Cov kab ntsuab qhia tau hais tias qhov kev vam khom ntawm daim ntawv thov pib lub sijhawm ntawm tus naj npawb ntawm cov khaub thuas pib thaum tsis siv neeg cascade tshem tawm cov khoom zes.

Cov txiaj ntsig thiab cov lus xaus

Lub Realm database puas tau loj hlob tau ua rau daim ntawv thov tso tawm qeeb heev. Peb tso tawm qhov hloov tshiab nrog peb tus kheej "cascading delete" ntawm cov khoom zes. Thiab tam sim no peb saib xyuas thiab ntsuas seb peb qhov kev txiav txim siab cuam tshuam li cas rau lub sijhawm pib ntawm daim ntawv thov los ntawm _app_start metric.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Rau kev tsom xam, peb siv sijhawm 90 hnub thiab pom: lub sijhawm tso npe thov, ob qho tib si nruab nrab thiab qhov uas poob rau 95 feem pua ​​​​ntawm cov neeg siv, pib txo qis thiab tsis nce ntxiv lawm.

Cov dab neeg ntawm yuav ua li cas cascade deletion nyob rau hauv Realm yeej dhau ib tug ntev launching

Yog tias koj saib ntawm daim duab xya-hnub, _app_start metric zoo nkaus li txaus thiab tsawg dua 1 thib ob.

Nws tseem tsim nyog ntxiv qhov ntawd los ntawm lub neej ntawd, Firebase xa cov ntawv ceeb toom yog tias tus nqi nruab nrab ntawm _app_start tshaj 5 vib nas this. Txawm li cas los xij, raws li peb tuaj yeem pom, koj yuav tsum tsis txhob cia siab rau qhov no, tab sis theej mus rau hauv thiab xyuas kom meej meej.

Qhov tshwj xeeb ntawm Realm database yog tias nws yog cov ntaub ntawv tsis sib xws. Txawm hais tias nws yooj yim siv, zoo sib xws rau ORM cov kev daws teeb meem thiab cov khoom sib txuas, nws tsis muaj kev tshem tawm cascade.

Yog tias qhov no tsis yog coj mus rau hauv tus account, ces cov khoom nested yuav sau thiab "tawm mus." Cov ntaub ntawv yuav loj hlob tas li, uas nyob rau hauv lem yuav cuam tshuam rau qeeb lossis pib ntawm daim ntawv thov.

Kuv tau qhia peb cov kev paub txog yuav ua li cas sai sai ua cascade tshem tawm cov khoom hauv Realm, uas tseem tsis tau tawm ntawm lub thawv, tab sis tau tham txog ntev lawv hais ΠΈ lawv hais. Hauv peb cov ntaub ntawv, qhov no ua rau kom lub sijhawm pib ua haujlwm sai heev.

Txawm hais tias muaj kev sib tham txog qhov tshwm sim ntawm qhov tshwm sim no, qhov tsis muaj cascade deletion hauv Realm yog ua los ntawm kev tsim. Yog tias koj tab tom tsim ib daim ntawv thov tshiab, ces muab qhov no rau hauv tus account. Thiab yog tias koj twb siv Realm lawm, xyuas seb koj puas muaj teeb meem zoo li no.

Tau qhov twg los: www.hab.com

Ntxiv ib saib