Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Ogwiritsa ntchito onse amatenga kukhazikitsidwa mwachangu komanso kuyankha kwa UI pamapulogalamu am'manja mopepuka. Ngati pulogalamuyi itenga nthawi yayitali kuti iyambike, wogwiritsa ntchitoyo amayamba kumva chisoni komanso kukwiya. Mutha kuwononga zomwe kasitomala amakumana nazo kapena kutaya wogwiritsa ntchito ngakhale asanayambe kugwiritsa ntchito pulogalamuyi.

Tidazindikirapo kuti pulogalamu ya Dodo Pizza imatenga masekondi atatu kuti iyambike pafupifupi, ndipo kwa ena "amwayi" zimatenga masekondi 3-15.

Pansi pa odulidwawo pali nkhani yokhala ndi mathero osangalatsa: za kukula kwa nkhokwe ya Realm, kukumbukira kutayikira, momwe tidasonkhanitsira zinthu zachisa, kenako timadzikoka tokha ndikukonza chilichonse.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali
Wolemba nkhani: Maxim Kachinkin - Wopanga Android ku Dodo Pizza.

Masekondi atatu kuchokera pakudina chizindikiro cha pulogalamuyo kuti onResume() ya ntchito yoyamba ndi yopanda malire. Ndipo kwa ogwiritsa ntchito ena, nthawi yoyambira idafika masekondi 15-20. Kodi izi zingatheke bwanji?

Chidule chachifupi kwambiri kwa iwo omwe alibe nthawi yowerenga
Nawonso database yathu ya Realm idakula kosatha. Zinthu zina zomwe zili m'chisa sizinachotsedwe, koma zimangowunjika nthawi zonse. Nthawi yoyambira ntchito idakula pang'onopang'ono. Kenako tidazikonza, ndipo nthawi yoyambira idafika pa chandamale - idakhala yosachepera 1 sekondi ndipo sinawonjezerenso. Nkhaniyi ili ndi kusanthula zochitika ndi njira ziwiri - yofulumira komanso yabwino.

Kufufuza ndi kusanthula vuto

Masiku ano, pulogalamu iliyonse yam'manja iyenera kuyambitsa mwachangu komanso kulabadira. Koma sikuti ndi pulogalamu yam'manja yokha. Zochitika za ogwiritsa ntchito polumikizana ndi ntchito ndi kampani ndizovuta. Mwachitsanzo, kwa ife, liwiro lobweretsa ndi chimodzi mwazizindikiro zazikulu za utumiki wa pizza. Ngati kubereka kuli mofulumira, pitsa idzakhala yotentha, ndipo kasitomala amene akufuna kudya tsopano sadzadikira nthawi yaitali. Pakugwiritsanso ntchito, ndikofunikira kuti mupange kumverera kwachangu, chifukwa ngati pulogalamuyo ingotenga masekondi 20 kuti iyambike, ndiye mudikirira pizza mpaka liti?

Poyamba, ife tokha tinkakumana ndi mfundo yakuti nthawi zina ntchitoyo inkatenga masekondi angapo kuti ikhazikitsidwe, ndiyeno tinayamba kumva madandaulo kuchokera kwa ogwira nawo ntchito kuti atenga nthawi yayitali bwanji. Koma sitinathe kubwereza izi nthawi zonse.

Ndi nthawi yayitali bwanji? Malinga ndi Zolemba za Google, ngati kuyamba kozizira kwa ntchito kumatenga masekondi osachepera 5, ndiye izi zimatengedwa ngati "zachilendo". Pulogalamu ya Android ya Dodo Pizza yakhazikitsidwa (malinga ndi ma metrics a Firebase _app_start) pa chiyambi chozizira pafupifupi 3 masekondi - "Osati zabwino, osati zoipa," monga akunena.

Koma madandaulo adayamba kuwoneka kuti pulogalamuyi idatenga nthawi yayitali kwambiri kuti iyambike! Poyamba, tinaganiza zoyesa zomwe "zambiri, zazitali, zazitali kwambiri". Ndipo tidagwiritsa ntchito Firebase trace pa izi Chiyambi cha App.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Kutsata uku kumayesa nthawi pakati pa nthawi yomwe wogwiritsa ntchito atsegula pulogalamuyo ndi nthawi yomwe onResume() ya ntchito yoyamba ikuchitika. Mu Firebase Console metric iyi imatchedwa _app_start. Zinapezeka kuti:

  • Nthawi zoyambira kwa ogwiritsa ntchito pamwamba pa 95th percentile ndi pafupifupi masekondi 20 (ena ngakhale atatalika), ngakhale nthawi yoyambira yozizira yapakatikati imakhala yosakwana masekondi asanu.
  • Nthawi yoyambira si mtengo wokhazikika, koma imakula pakapita nthawi. Koma nthawi zina pamakhala madontho. Tinapeza chitsanzo ichi pamene tidakulitsa kuchuluka kwa kusanthula mpaka masiku 90.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Maganizo awiri adabwera m'mutu mwake:

  1. Chinachake chikutuluka.
  2. "chinachake" ichi chimakhazikitsidwanso pambuyo pa kumasulidwa ndikutulukanso.

"Mwinamwake chinachake ndi nkhokwe," tinaganiza, ndipo tinali olondola. Choyamba, timagwiritsa ntchito nkhokwe ngati cache; pakusamuka timachotsa. Kachiwiri, database imakwezedwa pomwe ntchito iyamba. Zonse zimagwirizana.

Cholakwika ndi chiyani ndi database ya Realm

Tinayamba kuyang'ana momwe zomwe zili m'dawunilodi zimasinthira pa moyo wa pulogalamuyo, kuyambira pakuyika koyamba komanso kupitilira pakugwiritsa ntchito. Mutha kuwona zomwe zili mu database ya Realm kudzera stetho kapena mwatsatanetsatane komanso momveka bwino potsegula fayilo kudzera Studio ya Realm. Kuti muwone zomwe zili munkhokwe kudzera pa ADB, lembani fayilo ya database ya Realm:

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

Titayang'ana zomwe zili mu database nthawi zosiyanasiyana, tidapeza kuti kuchuluka kwa zinthu zamtundu wina kukuchulukirachulukira.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali
Chithunzichi chikuwonetsa chidutswa cha Realm Studio cha mafayilo awiri: kumanzere - maziko ogwiritsira ntchito pakapita nthawi mutakhazikitsa, kumanja - mutagwiritsa ntchito. Zitha kuwoneka kuti chiwerengero cha zinthu ImageEntity ΠΈ MoneyType chakula kwambiri (chithunzichi chikuwonetsa kuchuluka kwa zinthu zamtundu uliwonse).

Mgwirizano pakati pa kukula kwa database ndi nthawi yoyambira

Kukula kosalamulirika kwa database ndikoyipa kwambiri. Koma izi zimakhudza bwanji nthawi yoyambira pulogalamu? Ndizosavuta kuyeza izi kudzera mu ActivityManager. Popeza Android 4.4, logcat imawonetsa chipikacho ndi chingwe Chowonetsedwa ndi nthawi. Nthawiyi ndi yofanana ndi nthawi kuyambira pomwe pulogalamuyo idakhazikitsidwa mpaka kumapeto kwa ntchitoyo. Panthawi imeneyi, zochitika zotsatirazi zimachitika:

  • Yambani ndondomeko.
  • Kuyamba kwa zinthu.
  • Kupanga ndi kuyambitsa ntchito.
  • Kupanga dongosolo.
  • Kupereka kwa pulogalamu.

Zikuyenera ife. Ngati muthamanga ADB ndi -S ndi -W mbendera, mutha kutulutsa zowonjezera ndi nthawi yoyambira:

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

Ngati mutagwira kuchokera pamenepo grep -i WaitTime nthawi, mutha kusinthiratu kusonkhanitsa kwa metric iyi ndikuwona zotsatira zake. Grafu yomwe ili pansipa ikuwonetsa kudalira kwa nthawi yoyambira ntchito pa kuchuluka kwa kuzizira koyambira kwa pulogalamuyo.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Panthawi imodzimodziyo, panali chikhalidwe chofanana cha ubale pakati pa kukula ndi kukula kwa database, yomwe inakula kuchokera ku 4 MB kufika ku 15 MB. Pazonse, zikuwonekeratu kuti pakapita nthawi (ndi kukula kwa kuzizira kumayamba), nthawi yoyambitsa ntchito komanso kukula kwa database kudakula. Tili ndi malingaliro m'manja mwathu. Tsopano chomwe chinatsala chinali kutsimikizira kudalira. Choncho, tinaganiza zochotsa "kutayikira" ndikuwona ngati izi zingafulumizitse kuyambitsa.

Zifukwa za kukula kosatha kwa database

Musanachotse "kutayikira", ndikofunikira kumvetsetsa chifukwa chake adawonekera poyamba. Kuti tichite izi, tiyeni tikumbukire kuti Realm ndi chiyani.

Realm ndi database yopanda ubale. Zimakulolani kufotokoza maubwenzi pakati pa zinthu mofanana ndi kuchuluka kwa ma data a ORM pa Android omwe akufotokozedwa. Nthawi yomweyo, Realm imasunga zinthu mokumbukira ndikusintha pang'ono komanso kupanga mapu. Izi zimakulolani kuti muwerenge deta kuchokera ku disk mofulumira kwambiri, yomwe ndi mphamvu ya Realm ndi chifukwa chake imakondedwa.

(Zolinga za nkhaniyi, kufotokozeraku kudzakhala kokwanira kwa ife. Mutha kuwerenga zambiri za Realm mu ozizira zolemba kapena mwa iwo akademi).

Madivelopa ambiri azolowera kugwira ntchito kwambiri ndi nkhokwe zaubale (mwachitsanzo, ma database a ORM okhala ndi SQL pansi pa hood). Ndipo zinthu monga cascading deta kufufutidwa nthawi zambiri amawoneka ngati anapatsidwa. Koma osati mu Ufumu.

Mwa njira, mbali yochotsa cascade yafunsidwa kwa nthawi yayitali. Izi kukonzanso ΠΈ wina, yogwirizana nayo, inakambidwa mwamphamvu. Panali kumverera kuti posachedwapa zichitika. Koma ndiye zonse kumasuliridwa kumayambiriro amphamvu ndi ofooka maulalo, amenenso basi kuthetsa vutoli. Anali achangu komanso achangu pantchito iyi kukoka pempho, yomwe yayimitsidwa pano chifukwa cha zovuta zamkati.

Kutaya kwa data popanda kuchotsedwa kwathunthu

Kodi ndendende deta imawukhira bwanji ngati mudalira kuchotsedwa kwapang'onopang'ono komwe kulibe? Ngati mwasungira zinthu za Realm, ndiye kuti ziyenera kuchotsedwa.
Tiyeni tiwone (pafupifupi) chitsanzo chenicheni. Tili ndi chinthu 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()

Zomwe zili m'ngoloyo zimakhala ndi minda yosiyana, kuphatikizapo chithunzi ImageEntity, zosakaniza makonda CustomizationEntity. Komanso, zomwe zili m'ngoloyo zimatha kukhala combo yokhala ndi zida zake RealmList (CartProductEntity). Magawo onse otchulidwa ndi Realm objects. Ngati tiyika chinthu chatsopano (copyToRealm() / copyToRealmOrUpdate()) ndi id yomweyo, ndiye kuti chinthuchi chidzalembedwanso. Koma zinthu zonse zamkati (chithunzi, customizationEntity ndi cartComboProducts) zidzasiya kulumikizana ndi kholo ndikukhalabe munkhokwe.

Popeza kulumikizana nawo kwatayika, sitikuwawerenganso kapena kuwachotsa (pokhapokha titawapeza kapena kuchotsa "tebulo" lonse). Tinatcha izi "kudontha kwa kukumbukira".

Tikamagwira ntchito ndi Realm, tiyenera kudutsa muzinthu zonse ndikuchotsa zonse zisanachitike. Izi zitha kuchitika, mwachitsanzo, motere:

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

Ngati mutachita izi, ndiye kuti zonse zidzayenda momwe ziyenera kukhalira. Muchitsanzo ichi, tikuganiza kuti palibenso zinthu zina zomwe zili m'chisanja cha Realm mkati mwa chithunzi, customizationEntity, ndi cartComboProducts, kotero palibenso malupu ndi zochotsa.

Yankho lofulumira

Chinthu choyamba chimene tinasankha kuchita chinali kuyeretsa zinthu zomwe zikukula mofulumira ndikuyang'ana zotsatira kuti tiwone ngati izi zingathetse vuto lathu loyambirira. Choyamba, yankho losavuta komanso lodziwika bwino linapangidwa, ndilo: chinthu chilichonse chiyenera kukhala ndi udindo wochotsa ana ake. Kuti tichite izi, tidayambitsa mawonekedwe omwe adabweza mndandanda wazinthu zake za Realm:

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

Ndipo tidazikhazikitsa muzinthu zathu za 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 timabwezera ana onse monga mndandanda wathyathyathya. Ndipo chinthu chilichonse cha mwana chimatha kugwiritsanso ntchito mawonekedwe a NestedEntityAware, kuwonetsa kuti ili ndi zinthu zamkati za Realm zochotsa, mwachitsanzo. 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
   )
 }
}

Ndi zina zotero, zisa za zinthu zikhoza kubwerezedwa.

Kenako timalemba njira yomwe imachotsa mobwerezabwereza zinthu zonse zomwe zasungidwa. Njira (yopangidwa ngati chowonjezera) deleteAllNestedEntities amapeza zinthu zonse zapamwamba ndi njira deleteNestedRecursively Kumachotsa mobwerezabwereza zinthu zonse zomwe zasungidwa pogwiritsa ntchito mawonekedwe a 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()
   }
 }
}

Tidachita izi ndi zinthu zomwe zikukula mwachangu ndikuwunika zomwe zidachitika.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Zotsatira zake, zinthu zomwe tidaphimba ndi yankholi zidasiya kukula. Ndipo kukula konse kwa maziko kunachepa, koma sikunayime.

Njira "yachibadwa".

Ngakhale mazikowo adayamba kukula pang'onopang'ono, adakulabe. Kotero ife tinayamba kuyang'ana mopitirira. Pulojekiti yathu imagwiritsa ntchito kwambiri caching data mu Realm. Choncho, kulemba zinthu zonse zisa pa chinthu chilichonse ntchito kwambiri, kuphatikizapo chiopsezo zolakwa kumawonjezeka, chifukwa inu mukhoza kuiwala mwachindunji zinthu pamene kusintha kachidindo.

Ndinkafuna kuwonetsetsa kuti sindigwiritsa ntchito zolumikizirana, koma zonse zimagwira ntchito zokha.

Pamene tikufuna kuti chinachake chizigwira ntchito pachokha, tiyenera kugwiritsa ntchito kulingalira. Kuti tichite izi, titha kudutsa gawo lililonse la kalasi ndikuwunika ngati ndi chinthu cha Realm kapena mndandanda wazinthu:

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

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

Ngati gawolo ndi RealmModel kapena RealmList, onjezerani zomwe zili m'mundawu pamndandanda wazinthu zomwe zasungidwa. Chilichonse chiri chimodzimodzi monga momwe tachitira pamwambapa, kokha apa chidzachitidwa chokha. Njira yochotsera cascade ndiyosavuta ndipo imawoneka motere:

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

Kuwonjezera filterRealmObject amasefa ndikudutsa zinthu za Realm zokha. Njira getNestedRealmObjects Kupyolera mu kusinkhasinkha, imapeza zinthu zonse zomwe zili mu Realm ndikuziyika pamndandanda wa mzere. Kenako timachita zomwezo mobwerezabwereza. Mukachotsa, muyenera kuyang'ana chinthucho kuti chikhale chovomerezeka isValid, chifukwa mwina zinthu za makolo zosiyanasiyana zimatha kukhala ndi zisa zofanana. Ndikwabwino kupewa izi ndikungogwiritsa ntchito auto-generation of id popanga zinthu zatsopano.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Kukhazikitsa kwathunthu njira ya 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)
}

Chotsatira chake, mu code yathu ya kasitomala timagwiritsa ntchito "cascading delete" pa ntchito iliyonse yosintha deta. Mwachitsanzo, pa ntchito yoyikapo, zikuwoneka ngati izi:

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

Njira yoyamba getManagedEntities amalandira zinthu zonse zowonjezeredwa, ndiyeno njira cascadeDelete Amachotsa mobwerezabwereza zinthu zonse zomwe zasonkhanitsidwa musanalembe zatsopano. Timagwiritsa ntchito njira iyi nthawi zonse. Kutayikira kukumbukira mu Realm kwatha. Titachita muyeso womwewo wa kudalira nthawi yoyambira pa kuchuluka kwa kuzizira koyambitsa ntchito, tikuwona zotsatira zake.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Mzere wobiriwira ukuwonetsa kudalira kwa nthawi yoyambira pulogalamu pa kuchuluka kwa kuzizira kumayamba pakuchotsa zinthu zomwe zasungidwa.

Zotsatira ndi zomaliza

Dongosolo lomwe likukulirakulirabe la Realm linali kupangitsa kuti pulogalamuyi iyambike pang'onopang'ono. Tinatulutsa zosintha zathu ndi "cascading delete" yathu ya zinthu zomwe zasungidwa. Ndipo tsopano tikuwunika ndikuwunika momwe lingaliro lathu lakhudzira nthawi yoyambira pulogalamu kudzera mu _app_start metric.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Kuti tiwunike, timatenga nthawi ya masiku 90 ndikuwona: nthawi yotsegulira ntchito, yapakatikati ndi yomwe imagwera pa 95th percentile ya ogwiritsa ntchito, idayamba kuchepa ndipo siyikukweranso.

Nkhani ya momwe kufufutidwira ku Realm kunapambana pakukhazikitsa kwanthawi yayitali

Mukayang'ana tchati chamasiku asanu ndi awiri, _app_start metric imawoneka yokwanira ndipo imakhala yosakwana sekondi imodzi.

Ndikoyeneranso kuwonjezera kuti mwachisawawa, Firebase imatumiza zidziwitso ngati mtengo wapakati wa _app_start uposa masekondi 5. Komabe, monga tikuonera, simuyenera kudalira izi, koma lowetsani ndikuwunika momveka bwino.

Chapadera pa database ya Realm ndikuti ndi database yopanda ubale. Ngakhale ndizosavuta kugwiritsa ntchito, kufanana ndi mayankho a ORM ndi kulumikiza zinthu, ilibe kufufutidwa kwamasewera.

Ngati izi sizikuganiziridwa, ndiye kuti zinthu zomwe zili m'chisa zimawunjikana ndi "kutuluka". Nawonso database idzakula mosalekeza, zomwe zidzakhudza kuchepa kapena kuyambika kwa pulogalamuyo.

Ndidagawana zomwe takumana nazo zamomwe tingachotsere mwachangu zinthu ku Realm, zomwe sizili m'bokosi, koma zakhala zikukambidwa kwa nthawi yayitali. nenani ΠΈ nenani. Kwa ife, izi zidafulumizitsa kwambiri nthawi yoyambira ntchito.

Ngakhale kukambitsirana za kuyandikira kwa gawoli, kusakhalapo kwa kuchotsedwa kwa cascade ku Realm kumachitika ndi mapangidwe. Ngati mukupanga pulogalamu yatsopano, ganizirani izi. Ndipo ngati mukugwiritsa ntchito kale Realm, onani ngati muli ndi zovuta zotere.

Source: www.habr.com

Kuwonjezera ndemanga