An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Bidh a h-uile neach-cleachdaidh a’ toirt air bhog luath agus UI freagairteach ann an tagraidhean gluasadach gu dòigheil. Ma bheir an tagradh ùine mhòr airson a chuir air bhog, bidh an neach-cleachdaidh a ’tòiseachadh a’ faireachdainn brònach agus feargach. Faodaidh tu eòlas teachdaiche a mhilleadh gu furasta no an neach-cleachdaidh a chall gu tur eadhon mus tòisich e a ’cleachdadh an aplacaid.

Fhuair sinn a-mach aon uair gu bheil an app Dodo Pizza a’ toirt 3 diogan airson a chuir air bhog gu cuibheasach, agus airson cuid de “rudan fortanach” bheir e 15-20 diogan.

Fon gearradh tha sgeulachd le deireadh sona: mu fhàs stòr-dàta Realm, aodion cuimhne, mar a chruinnich sinn stuthan neadachaidh, agus an uairsin tharraing sinn sinn fhìn còmhla agus shuidhich sinn a h-uile càil.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada
Ùghdar an artaigil: Maxim Kachinkin - leasaiche Android aig Dodo Pizza.

Tha trì diogan bho bhith a’ cliogadh air ìomhaigh an tagraidh gu ath-thòiseachadh () den chiad ghnìomhachd neo-chrìochnach. Agus airson cuid de luchd-cleachdaidh, ràinig an ùine tòiseachaidh 15-20 diogan. Ciamar a tha seo eadhon comasach?

Geàrr-chunntas gu math goirid dhaibhsan aig nach eil ùine airson leughadh
Dh’ fhàs an stòr-dàta Realm againn gun chrìoch. Cha deach cuid de stuthan neadachaidh a dhubhadh às, ach bha iad an-còmhnaidh air an cruinneachadh. Mheudaich ùine tòiseachaidh an tagraidh mean air mhean. An uairsin shuidhich sinn e, agus thàinig an ùine tòiseachaidh chun targaid - dh'fhàs e nas lugha na 1 diog agus cha do dh'àrdaich e tuilleadh. Anns an artaigil tha mion-sgrùdadh air an t-suidheachadh agus dà fhuasgladh - fear sgiobalta agus fear àbhaisteach.

Lorg agus mion-sgrùdadh air an duilgheadas

An-diugh, feumaidh tagradh gluasadach sam bith a chuir air bhog gu sgiobalta agus a bhith freagairteach. Ach chan ann dìreach mun app gluasadach a tha e. Tha eòlas neach-cleachdaidh air eadar-obrachadh le seirbheis agus companaidh na rud iom-fhillte. Mar eisimpleir, anns a 'chùis againn, is e astar lìbhrigidh aon de na prìomh chomharran airson seirbheis pizza. Ma tha an lìbhrigeadh luath, bidh am piotsa teth, agus chan fheum an neach-ceannach a tha ag iarraidh ithe a-nis feitheamh fada. Airson an tagradh, an uair sin, tha e cudromach faireachdainn de sheirbheis luath a chruthachadh, oir mura toir an tagradh ach 20 diog airson a chuir air bhog, dè cho fada ‘s a dh’ fheumas tu feitheamh airson a’ phiotsa?

An toiseach, bha sinn fhìn air ar beulaibh leis an fhìrinn gun tug an tagradh diog no dhà airson a chuir air bhog, agus an uairsin thòisich sinn a’ cluinntinn ghearanan bho cho-obraichean eile mu cho fada ‘s a thug e. Ach cha b’ urrainn dhuinn an suidheachadh seo ath-aithris gu cunbhalach.

Dè cho fada 'sa tha e? A rèir Sgrìobhainnean Google, ma bheir tòiseachadh fuar tagradh nas lugha na 5 diogan, thathas den bheachd gu bheil seo “mar gum biodh e àbhaisteach”. Aplacaid Dodo Pizza Android air a chuir air bhog (a rèir metrics Firebase _app_tòiseachadh) aig toiseach fuar gu cuibheasach ann an 3 diogan - "Chan eil e math, chan eil e uamhasach," mar a chanas iad.

Ach an uairsin thòisich gearanan a’ nochdadh gun tug an tagradh ùine mhòr, glè, glè fhada airson a chuir air bhog! An toiseach, chuir sinn romhainn tomhas dè a th’ ann an “glè, glè, glè fhada”. Agus chleachd sinn lorg Firebase airson seo Lorg tòiseachaidh app.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Bidh an lorg àbhaisteach seo a’ tomhas na h-ùine eadar a ’mhòmaid a dh’ fhosglas an neach-cleachdaidh an aplacaid agus a’ mhionaid a thèid ath-thòiseachadh () den chiad ghnìomhachd a chuir gu bàs. Anns an Firebase Console canar _app_start ris a’ mheatrach seo. Thionndaidh e a-mach gun robh:

  • Tha amannan tòiseachaidh airson luchd-cleachdaidh os cionn an 95mh ceudad faisg air 20 diog (cuid eadhon nas fhaide), a dh’ aindeoin gu bheil an ùine tòiseachaidh fuar meadhanach nas lugha na 5 diogan.
  • Chan e luach seasmhach a th 'anns an ùine tòiseachaidh, ach bidh e a' fàs thar ùine. Ach uaireannan tha boinneagan ann. Lorg sinn am pàtran seo nuair a mheudaich sinn sgèile an anailis gu 90 latha.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Thàinig dà bheachd gu inntinn:

  1. Tha rudeigin ag aoidion.
  2. Thèid an “rudeigin” seo ath-shuidheachadh às deidh dha a bhith air a leigeil ma sgaoil agus an uairsin aoidion a-rithist.

“Is dòcha rudeigin leis an stòr-dàta,” smaoinich sinn, agus bha sinn ceart. An toiseach, bidh sinn a’ cleachdadh an stòr-dàta mar thasg; rè imrich bidh sinn ga ghlanadh. San dàrna h-àite, tha an stòr-dàta air a luchdachadh nuair a thòisicheas an tagradh. Bidh a h-uile dad a’ freagairt ri chèile.

Dè tha ceàrr air stòr-dàta Realm

Thòisich sinn a’ sgrùdadh mar a bhios susbaint an stòr-dàta ag atharrachadh thar beatha an tagraidh, bhon chiad stàladh agus nas fhaide air adhart rè cleachdadh gnìomhach. Chì thu susbaint stòr-dàta Realm tro stetho no nas mionaidiche agus gu soilleir le bhith a’ fosgladh am faidhle tro Realm Studio. Gus susbaint an stòr-dàta fhaicinn tro ADB, dèan lethbhreac den fhaidhle stòr-dàta Realm:

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

An dèidh sùil a thoirt air susbaint an stòr-dàta aig diofar amannan, fhuair sinn a-mach gu bheil an àireamh de stuthan de sheòrsa sònraichte a 'sìor fhàs.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada
Tha an dealbh a’ sealltainn criomag de Realm Studio airson dà fhaidhle: air an taobh chlì - bonn an tagraidh beagan ùine às deidh an stàladh, air an taobh cheart - às deidh cleachdadh gnìomhach. Chithear gu bheil an àireamh de nithean ImageEntity и MoneyType air fàs gu mòr (tha an dealbh-sgrìn a’ sealltainn an àireamh de nithean de gach seòrsa).

Dàimh eadar fàs stòr-dàta agus àm tòiseachaidh

Tha fàs stòr-dàta neo-riaghlaidh gu math dona. Ach ciamar a bheir seo buaidh air àm tòiseachaidh an tagraidh? Tha e gu math furasta seo a thomhas tro ActivityManager. Bho Android 4.4, tha logcat a 'taisbeanadh an log leis an t-sreang air a thaisbeanadh agus an ùine. Tha an ùine seo co-ionann ris an eadar-ama bhon mhionaid a thèid an tagradh a chuir air bhog gu deireadh an tairgse gnìomhachd. Aig an àm seo tha na tachartasan a leanas a 'tachairt:

  • Tòisich am pròiseas.
  • Tòiseachadh nithean.
  • Cruthachadh agus tòiseachadh ghnìomhan.
  • A 'cruthachadh dealbhadh.
  • Iarrtas render.

Tha e freagarrach dhuinn. Ma ruitheas tu ADB leis na brataichean -S agus -W, gheibh thu toradh leudaichte leis an ùine tòiseachaidh:

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

Ma gheibh thu grèim air às an sin grep -i WaitTime ùine, faodaidh tu cruinneachadh na meatrach seo a dhèanamh fèin-ghluasadach agus sùil lèirsinneach a thoirt air na toraidhean. Tha an graf gu h-ìosal a’ sealltainn eisimeileachd ùine tòiseachaidh an tagraidh air an àireamh de thòiseachadh fuar an tagraidh.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Aig an aon àm, bha an aon nàdar den dàimh eadar meud agus fàs an stòr-dàta, a dh'fhàs bho 4 MB gu 15 MB. Gu h-iomlan, tha e a 'tionndadh a-mach, thar ùine (le fàs fuachd a' tòiseachadh), an dà chuid ùine cur air bhog an tagraidh agus meud an stòr-dàta àrdachadh. Tha beachd-bharail againn air ar làmhan. A-nis cha robh air fhàgail ach an eisimeileachd a dhearbhadh. Mar sin, chuir sinn romhainn na “aodion” a thoirt air falbh agus faicinn an luathaich seo an cur air bhog.

Adhbharan airson fàs stòr-dàta gun chrìoch

Mus toir thu air falbh "aoidion", is fhiach tuigsinn carson a nochd iad sa chiad àite. Gus seo a dhèanamh, cuimhnicheamaid dè a th’ ann an Realm.

Is e stòr-dàta neo-dàimheach a th’ ann an Realm. Leigidh e leat cunntas a thoirt air dàimhean eadar nithean san aon dòigh ri cia mheud stòr-dàta dàimh ORM air Android air a bheilear a’ toirt cunntas air. Aig an aon àm, bidh Realm a’ stòradh stuthan gu dìreach mar chuimhneachan leis an ìre as lugha de chruth-atharrachaidhean agus mhapaichean. Leigidh seo leat dàta bhon diosc a leughadh gu math luath, a tha na neart aig Realm agus carson a tha e dèidheil air.

(Airson adhbharan an artaigil seo, bidh an tuairisgeul seo gu leòr dhuinn. Faodaidh tu barrachd a leughadh mu dheidhinn Realm anns an fhionnar sgrìobhainnean no annta acadamaidh).

Tha mòran de luchd-leasachaidh cleachdte ri bhith ag obair barrachd le stòran-dàta co-cheangailte (mar eisimpleir, stòran-dàta ORM le SQL fon chochall). Agus gu tric bidh rudan mar cuir às do dhàta a’ nochdadh mar rud a chaidh a thoirt seachad. Ach chan ann san Rìoghachd.

Co-dhiù, chaidh am feart cuir às do chascade iarraidh airson ùine mhòr. Seo ath-sgrùdadh и eile, co-cheangailte ris, air a dheasbad gu gnìomhach. Bha faireachdainn ann gun deidheadh ​​​​a dhèanamh a dh’ aithghearr. Ach an uairsin chaidh a h-uile càil eadar-theangachadh gu bhith a 'toirt a-steach ceanglaichean làidir agus lag, a bhiodh cuideachd gu fèin-obrachail a' fuasgladh na duilgheadas seo. Bha e gu math beothail agus gnìomhach san obair seo tarraing iarrtas, a tha air a bhith air a stad airson a-nis air sgàth duilgheadasan taobh a-staigh.

Aodion dàta gun a bhith air a dhubhadh às

Dè dìreach a tha dàta ag aoidion ma tha thu an urra ri sguab às nach eil ann? Ma tha thu air nithean Realm a neadachadh, feumaidh iad a bhith air an toirt às.
Feuch gun coimhead sinn ri fìor eisimpleir (cha mhòr). Tha nì againn 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()

Tha diofar raointean aig an toradh sa chairt, a’ toirt a-steach dealbh ImageEntity, stuthan gnàthaichte CustomizationEntity. Cuideachd, faodaidh an toradh sa chairt a bhith na chombo leis an t-seata thoraidhean aige fhèin RealmList (CartProductEntity). Tha na raointean clàraichte uile nan nithean Realm. Ma chuireas sinn a-steach rud ùr (copyToRealm () / copyToRealmOrUpdate ()) leis an aon id, thèid an nì seo ath-sgrìobhadh gu tur. Ach caillidh a h-uile nì a-staigh (image, customizationEntity agus cartComboProducts) ceangal ris a’ phàrant agus fuirichidh iad san stòr-dàta.

Leis gu bheil an ceangal riutha air chall, cha bhith sinn gan leughadh no gan sguabadh às tuilleadh (mura faigh sinn cothrom orra gu soilleir no ma ghlanas sinn am “clàr gu lèir”). Thug sinn “aodion cuimhne” air an seo.

Nuair a bhios sinn ag obair le Realm, feumaidh sinn a dhol tro na h-eileamaidean gu lèir agus cuir às gu soilleir a h-uile càil ro obair mar sin. Faodar seo a dhèanamh, mar eisimpleir, mar seo:

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

Ma nì thu seo, obraichidh a h-uile dad mar a bu chòir. San eisimpleir seo, tha sinn a’ gabhail ris nach eil nithean eile san Rìoghachd Aonaichte taobh a-staigh ìomhaigh, customizationEntity, agus cartComboProducts, agus mar sin chan eil lùban neadachaidh is sguabaidh eile ann.

Fuasgladh luath

B’ e a’ chiad rud a chuir sinn romhainn na stuthan as luaithe a bha a’ fàs a ghlanadh agus sùil a thoirt air na co-dhùnaidhean gus faicinn am fuasgladh seo ar duilgheadas tùsail. An toiseach, chaidh am fuasgladh as sìmplidh agus as intuitive a dhèanamh, is e sin: bu chòir uallach a bhith aig gach nì airson a chlann a thoirt air falbh. Gus seo a dhèanamh, thug sinn a-steach eadar-aghaidh a thill liosta de na stuthan neadachaidh Realm aige:

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

Agus chuir sinn an gnìomh e nar n-amasan 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 tillidh sinn a h-uile pàiste mar liosta rèidh. Agus faodaidh gach nì pàiste an eadar-aghaidh NestedEntityAware a chuir an gnìomh cuideachd, a’ nochdadh gu bheil nithean taobh a-staigh Realm aige ri dhubhadh às, mar eisimpleir 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
   )
 }
}

Agus mar sin air adhart, faodar neadachadh stuthan ath-aithris.

An uairsin bidh sinn a 'sgrìobhadh dòigh a bhios a' toirt air falbh gach nì neadachaidh gu cunbhalach. Modh (air a dhèanamh mar leudachadh) deleteAllNestedEntities a’ faighinn a h-uile nì agus modh àrd-ìre deleteNestedRecursively A’ toirt air falbh gach nì neadachaidh gu ath-chuairteach a’ cleachdadh an eadar-aghaidh 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()
   }
 }
}

Rinn sinn seo leis na stuthan as luaithe a bha a’ fàs agus rinn sinn sgrùdadh air na thachair.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Mar thoradh air an sin, stad na stuthan sin a chòmhdaich sinn leis an fhuasgladh seo a 'fàs. Agus dh'fhàs fàs iomlan a 'bhunait nas slaodaiche, ach cha do stad e.

Am fuasgladh "àbhaisteach".

Ged a thòisich am bonn a 'fàs nas slaodaiche, dh'fhàs e fhathast. Mar sin thòisich sinn a’ coimhead nas fhaide. Bidh am pròiseact againn a’ dèanamh feum fìor ghnìomhach de thasgadh dàta san Rìoghachd. Mar sin, tha a bhith a 'sgrìobhadh a h-uile stuth neadachaidh airson gach nì dìcheallach, agus tha an cunnart bho mhearachdan ag àrdachadh, oir faodaidh tu dìochuimhneachadh nithean a shònrachadh nuair a dh'atharraicheas tu an còd.

Bha mi airson dèanamh cinnteach nach do chleachd mi eadar-aghaidh, ach gun robh a h-uile càil ag obair leis fhèin.

Nuair a tha sinn ag iarraidh rudeigin a bhith ag obair leis fhèin, feumaidh sinn meòrachadh a chleachdadh. Gus seo a dhèanamh, is urrainn dhuinn a dhol tro gach raon clas agus dèanamh cinnteach an e rud Realm a th’ ann no liosta de nithean:

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

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

Mas e RealmModel no RealmList a th’ anns an raon, cuir rud an raoin seo ri liosta de nithean neadachaidh. Tha a h-uile dad dìreach mar a rinn sinn gu h-àrd, is ann dìreach an seo a thèid a dhèanamh leis fhèin. Tha an dòigh cuir às do chascade fhèin gu math sìmplidh agus tha e coltach ri seo:

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

Leudachadh filterRealmObject a’ sìoladh a-mach agus a’ dol seachad air dìreach nithean Realm. Dòigh-obrach getNestedRealmObjects tro mheòrachadh, lorgaidh e a h-uile nì san Rìoghachd Aonaichte a tha neadachadh agus gan cur ann an liosta sreathach. An uairsin bidh sinn a 'dèanamh an aon rud gu cunbhalach. Nuair a sguabas tu às, feumaidh tu sgrùdadh a dhèanamh air an nì airson dligheachd isValid, oir is dòcha gum faod diofar rudan pàrant a bhith air an aon rud a neadachadh. Tha e nas fheàrr seo a sheachnadh agus dìreach cleachdadh fèin-ghinealach id nuair a bhios tu a’ cruthachadh nithean ùra.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Buileachadh iomlan air modh getNestedRealmObjects

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

Mar thoradh air an sin, anns a’ chòd teachdaiche againn bidh sinn a’ cleachdadh “cascading delete” airson gach gnìomh atharrachaidh dàta. Mar eisimpleir, airson gnìomhachd cuir a-steach tha e coltach mar seo:

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

Dòigh-obrach an toiseach getManagedEntities a’ faighinn a h-uile nì a bharrachd, agus an uairsin am modh cascadeDelete Cuir às do gach nì cruinnichte gu ath-chuairteach mus sgrìobh thu feadhainn ùra. Bidh sinn gu crìch a’ cleachdadh an dòigh-obrach seo air feadh an tagraidh. Tha aoidion cuimhne san Rìoghachd air falbh gu tur. Às deidh dhuinn an aon tomhas a dhèanamh air eisimeileachd ùine tòiseachaidh air an àireamh de thòiseachadh fuar san tagradh, chì sinn an toradh.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Tha an loidhne uaine a’ sealltainn eisimeileachd ùine tòiseachaidh an tagraidh air an àireamh de thòiseachadh fuachd nuair a thèid cuir às gu fèin-ghluasadach de stuthan neadachaidh.

Toraidhean agus co-dhùnaidhean

Bha stòr-dàta Realm a bha a’ sìor fhàs ag adhbhrachadh gun deach an tagradh a chuir air bhog gu math slaodach. Sgaoil sinn ùrachadh leis an “sguabadh às cascading” againn fhèin de stuthan neadachaidh. Agus a-nis bidh sinn a’ cumail sùil air agus a’ measadh mar a thug ar co-dhùnadh buaidh air ùine tòiseachaidh an tagraidh tron ​​mheatrach _app_start.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Airson mion-sgrùdadh, bheir sinn ùine de 90 latha agus chì sinn: thòisich àm cur air bhog an tagraidh, an dà chuid am meadhan agus an fheadhainn a tha a’ tuiteam air an 95mh sa cheud de luchd-cleachdaidh, a’ dol sìos agus chan eil e ag èirigh tuilleadh.

An sgeulachd mu mar a choisinn cuir às do chascade ann an Realm thairis air cur air bhog fada

Ma choimheadas tu air a’ chairt seachd-latha, tha an _app_start metric a’ coimhead gu tur iomchaidh agus tha e nas lugha na 1 diog.

Is fhiach a chuir ris cuideachd, gu bunaiteach, gum bi Firebase a’ cur fiosan ma tha luach meadhanach _app_start nas àirde na 5 diogan. Ach, mar a chì sinn, cha bu chòir dhut a bhith an urra ri seo, ach a dhol a-steach agus sùil a thoirt air gu soilleir.

Is e an rud sònraichte mu stòr-dàta Realm gur e stòr-dàta neo-dàimheach a th’ ann. A dh’ aindeoin cho furasta ‘s a tha e a chleachdadh, tha e coltach ri fuasglaidhean ORM agus ceangal stuthan, chan eil cuir às do chascade.

Mura tèid seo a thoirt fa-near, cruinnichidh nithean neadachaidh agus “aodion air falbh.” Bidh an stòr-dàta a’ fàs gu cunbhalach, agus bheir sin buaidh air slaodachadh no tòiseachadh an tagraidh.

Cho-roinn mi ar n-eòlas air mar as urrainn dhuinn cuir às gu sgiobalta de stuthan san Rìoghachd, nach eil fhathast a-mach às a ’bhogsa, ach air an deach bruidhinn airson ùine mhòr tha iad ag ràdh и tha iad ag ràdh. Anns a ’chùis againn, chuir seo gu mòr ri ùine tòiseachaidh an tagraidh.

A dh’ aindeoin an deasbaid mu choltas na feart seo a tha ri thighinn, tha dìth cuir às do chascade san Rìoghachd air a dhèanamh le dealbhadh. Ma tha thu a’ dealbhadh tagradh ùr, thoir seo an aire. Agus ma tha thu mu thràth a’ cleachdadh Realm, thoir sùil a bheil na duilgheadasan sin agad.

Source: www.habr.com

Cuir beachd ann