An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Glacann gach úsáideoir comhéadain thapa agus freagrúil i bhfeidhmchláir mhóibíleacha gan dabht. Má thógann an t-iarratas tamall fada le seoladh, tosaíonn an t-úsáideoir ag mothú brónach agus feargach. Is féidir leat taithí an chustaiméara a mhilleadh go héasca nó an t-úsáideoir a chailleadh go hiomlán fiú sula dtosaíonn sé ag baint úsáide as an bhfeidhmchlár.

Fuaireamar amach uair amháin go dtógann sé 3 shoicind ar an meán chun an aip Dodo Pizza a sheoladh, agus go dtógann sé 15-20 soicind i gcás roinnt “t-ádh”.

Faoi bhun an ghearrtha tá scéal le deireadh sona: faoi fhás an bhunachar sonraí Realm, sceitheadh ​​​​cuimhne, conas a charnaigh muid rudaí neadaithe, agus ansin tharraing muid féin le chéile agus gach rud a shocrú.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada
Údar an ailt: Maxim Kachinkin - Forbróir Android ag Dodo Pizza.

Trí shoicind ó chliceáil ar dheilbhín an fheidhmchláir go dtí ar atosú() den chéad ghníomhaíocht, tá sé gan teorainn. Agus do roinnt úsáideoirí, shroich an t-am tosaithe 15-20 soicind. Conas is féidir é seo a dhéanamh fiú?

Achoimre an-ghearr dóibh siúd nach bhfuil am acu léamh
Tháinig fás gan stad ar ár mbunachar sonraí Realm. Níor scriosadh roinnt rudaí neadaithe, ach bhí siad carntha i gcónaí. Tháinig méadú de réir a chéile ar am tosaithe an iarratais. Ansin shocraíomar é, agus tháinig an t-am tosaithe go dtí an sprioc - tháinig sé níos lú ná 1 soicind agus níor mhéadaigh sé a thuilleadh. Tá anailís ar an gcás agus dhá réiteach san alt - ceann gasta agus ceann gnáth.

Cuardach agus anailís ar an bhfadhb

Sa lá atá inniu ann, ní mór aon fheidhmchlár soghluaiste a sheoladh go tapa agus a bheith sofhreagrach. Ach ní faoin app soghluaiste amháin atá sé. Is rud casta é taithí úsáideora ar idirghníomhú le seirbhís agus le cuideachta. Mar shampla, inár gcás, tá luas seachadta ar cheann de na príomhtháscairí do sheirbhís pizza. Má tá an seachadadh tapa, beidh an pizza te, agus ní bheidh ar an gcustaiméir atá ag iarraidh a ithe anois fanacht fada. Maidir leis an iarratas, ar a seal, tá sé tábhachtach mothú seirbhíse tapa a chruthú, mar mura dtógann an t-iarratas ach 20 soicind chun é a sheoladh, ansin cé chomh fada agus a bheidh ort fanacht leis an pizza?

Ar dtús, bhí orainn féin aghaidh a thabhairt ar an bhfíric go dtógann sé cúpla soicind uaireanta chun an t-iarratas a sheoladh, agus ansin thosaigh muid ag éisteacht le gearáin ó chomhghleacaithe eile faoi cé chomh fada agus a thóg sé. Ach ní rabhamar in ann an cás seo a dhéanamh arís go seasta.

Cá fhad atá sé? De réir Doiciméadú Google, má thógann sé níos lú ná 5 shoicind tús fuar a chur le hiarratas, ansin meastar é seo “amhail is gnáth”. Seoladh app Dodo Pizza Android (de réir mhéadracht Firebase _app_tús) ag tús fuar ar an meán i 3 soicind - “Ní iontach, ní uafásach,” mar a deir siad.

Ach ansin tháinig an chuma ar ghearáin gur thóg sé tréimhse an-fhada an-fhada chun an t-iarratas a sheoladh! Ar dtús, shocraigh muid a thomhas cad is “an-, an-, an-fhada”. Agus d’úsáideamar rian Firebase chuige seo Rian tosaithe app.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Tomhaiseann an rian caighdeánach seo an t-am idir an nóiméad a osclaíonn an t-úsáideoir an feidhmchlár agus an nóiméad a dhéantar an chéad ghníomhaíocht a atosú. Sa Chonsól Firebase tugtar _app_start ar an méadrach seo. Iompaigh sé amach go:

  • Tá na hamanna tosaithe d’úsáideoirí os cionn an 95ú peircintíl beagnach 20 soicind (cuid acu níos faide fós), in ainneoin gur lú ná 5 shoicind an t-am tosaithe fuar airmheánach.
  • Ní luach leanúnach é an t-am tosaithe, ach fásann sé le himeacht ama. Ach uaireanta tá titeann ann. Fuaireamar an patrún seo nuair a mhéadaíomar an scála anailíse go 90 lá.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Tháinig dhá smaoineamh chun cuimhne:

  1. Tá rud éigin ag sceitheadh.
  2. Athshocraítear an “rud” seo tar éis é a scaoileadh agus sceitheann sé arís.

“Rud éigin leis an mbunachar sonraí is dócha,” cheapamar, agus bhí an ceart againn. Ar an gcéad dul síos, úsáidimid an bunachar sonraí mar thaisce; le linn imirce glanaimid é. Ar an dara dul síos, tá an bunachar sonraí á luchtú nuair a thosaíonn an t-iarratas. Luíonn gach rud le chéile.

Cad atá cearr le bunachar sonraí Realm

Thosaigh muid ag seiceáil conas a athraíonn ábhar an bhunachair sonraí thar shaolré an fheidhmchláir, ón gcéad suiteáil agus níos faide le linn úsáide gníomhach. Is féidir leat féachaint ar a bhfuil sa bhunachar sonraí Realm trí stetho nó níos mine agus go soiléir tríd an gcomhad a oscailt trí Stiúideo Ríocht. Chun féachaint ar a bhfuil sa bhunachar sonraí trí ADB, cóipeáil comhad bhunachar sonraí Realm:

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

Tar éis féachaint ar ábhar an bhunachair sonraí ag amanna éagsúla, fuair muid amach go bhfuil líon na rudaí de chineál áirithe ag méadú i gcónaí.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada
Taispeánann an pictiúr blúire de Realm Studio ar feadh dhá chomhad: ar an taobh clé - bonn an iarratais roinnt ama tar éis a shuiteáil, ar dheis - tar éis úsáid ghníomhach. Is féidir a fheiceáil go bhfuil líon na rudaí ImageEntity и MoneyType tar éis fás go suntasach (léiríonn an screenshot líon na rudaí de gach cineál).

Gaol idir fás bunachar sonraí agus am tosaithe

Tá fás bunachar sonraí neamhrialaithe an-dona. Ach conas a théann sé seo i bhfeidhm ar an am tosaithe iarratais? Tá sé éasca go leor é seo a thomhas tríd an ActivityManager. Ó Android 4.4, taispeánann logcat an logáil isteach leis an teaghrán Taispeánta agus an t-am. Tá an t-am seo comhionann leis an eatramh ón nóiméad a sheoltar an t-iarratas go dtí deireadh an rindreála gníomhaíochta. Le linn an ama seo tarlaíonn na teagmhais seo a leanas:

  • Cuir tús leis an bpróiseas.
  • Túsú réada.
  • Gníomhaíochtaí a chruthú agus a thúsú.
  • Ag cruthú leagan amach.
  • Rindreáil iarratais.

Oireann dúinn. Má ritheann tú ADB leis na bratacha -S agus -W, is féidir leat aschur leathnaithe a fháil leis an am tosaithe:

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

Má grab tú é as sin grep -i WaitTime am, is féidir leat bailiú an mhéadrach seo a uathoibriú agus breathnú ar na torthaí ó thaobh amhairc de. Taispeánann an graf thíos an spleáchas atá ag am tosaithe an fheidhmchláir ar líon na dtosaithe fuara den fheidhmchlár.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Ag an am céanna, bhí an cineál céanna caidrimh idir méid agus fás an bhunachair shonraí, a d'fhás ó 4 MB go 15 MB. San iomlán, tharlaíonn sé go raibh méadú tagtha le himeacht ama (le fás na dtosaithe fuar), idir am seolta an iarratais agus méid an bhunachair sonraí. Tá hipitéis ar ár lámha. Anois ní raibh fágtha ach an spleáchas a dheimhniú. Mar sin, bheartaíomar na “sceitheadh” a bhaint agus féachaint an gcuirfeadh sé seo dlús leis an seoladh.

Cúiseanna le fás bunachar sonraí gan teorainn

Sula mbaintear "sceitheadh", is fiú a thuiscint cén fáth ar tháinig siad chun solais ar an gcéad dul síos. Chun seo a dhéanamh, déanaimis cuimhneamh ar cad is Ríocht ann.

Is bunachar sonraí neamhghaolmhar é Realm. Ligeann sé duit cur síos a dhéanamh ar chaidrimh idir rudaí ar bhealach cosúil le cé mhéad bunachar sonraí coibhneasta ORM ar Android a ndéantar cur síos orthu. Ag an am céanna, stórálann Realm réada go díreach sa chuimhne leis an méid is lú claochluithe agus mapálacha. Ligeann sé seo duit sonraí ón diosca a léamh go han-tapa, arb é neart Realm é agus cén fáth a bhfuil grá aige.

(Chun críocha an ailt seo, is leor an cur síos seo dúinn. Is féidir leat níos mó a léamh faoi Réimse san fhionnuar doiciméadú nó ina gcuid Acadamh).

Tá go leor forbróirí i dtaithí ar oibriú níos mó le bunachair shonraí choibhneasta (mar shampla, bunachair shonraí ORM le SQL faoin gcochall). Agus is cosúil go minic rudaí cosúil le scriosadh sonraí cascáideacha. Ach ní sa Ríocht.

Dála an scéil, iarradh ar feadh i bhfad an ghné scriosadh cascáide. seo athbhreithniú и eile, a bhaineann leis, a phlé go gníomhach. Bhí mothú ann go ndéanfaí é go luath. Ach ansin aistrigh gach rud isteach i naisc láidre agus lag a thabhairt isteach, rud a réiteodh an fhadhb seo go huathoibríoch freisin. Bhí go leor bríomhar agus gníomhach ar an tasc seo iarraidh tarraingt, atá curtha ar sos le tamall de bharr deacrachtaí inmheánacha.

Sileadh sonraí gan scriosadh cascáideach

Cé chomh díreach agus a sceitheann sonraí má bhíonn tú ag brath ar scriosadh cascáideach nach bhfuil ann? Má tá réada Réimse neadaithe agat, ní mór iad a scriosadh.
Breathnaímid ar shampla (beagnach) fíor. Tá réad 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()

Tá réimsí éagsúla ag an táirge sa chairt, lena n-áirítear pictiúr ImageEntity, comhábhair saincheaptha CustomizationEntity. Chomh maith leis sin, is féidir leis an táirge sa cart a bheith ina teaglama lena shraith táirgí féin RealmList (CartProductEntity). Is réada Réimse iad na réimsí liostaithe go léir. Má chuirimid réad nua isteach (copyToRealm() / copyToRealmOrUpdate()) leis an aitheantas céanna, ansin déanfar an réad seo a fhorscríobh go hiomlán. Ach caillfidh gach réad inmheánach (íomhá, customizationEntity agus cartComboProducts) nasc leis an tuismitheoir agus fanfaidh siad sa bhunachar sonraí.

Ós rud é go bhfuil an nasc leo caillte, ní dhéanaimid iad a léamh ná a scriosadh a thuilleadh (mura bhfuil rochtain againn orthu go sainráite nó má ghlanaimid an “tábla iomlán”). Thugamar “sceitheadh ​​cuimhne” air seo.

Nuair a oibrímid le Realm, ní mór dúinn dul tríd na heilimintí go léir go sainráite agus gach rud a scriosadh go sainráite roimh oibríochtaí den sórt sin. Is féidir é seo a dhéanamh, mar shampla, 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()
}
// и потом уже сохраняем

Má dhéanann tú é seo, ansin oibreoidh gach rud mar ba chóir. Sa sampla seo, glacaimid leis nach bhfuil aon réada Réimse neadaithe eile taobh istigh den íomhá, customizationEntity, agus cartComboProducts, agus mar sin níl aon lúba agus scrios neadaithe eile ann.

Réiteach "tapa".

Ba é an chéad rud a shocraigh muid a dhéanamh ná na rudaí is mó fáis a ghlanadh agus na torthaí a sheiceáil féachaint an réiteodh sé seo ár mbunfhadhb. Ar dtús, rinneadh an réiteach is simplí agus is iomasach, eadhon: ba chóir go mbeadh gach rud freagrach as a leanaí a bhaint. Chun seo a dhéanamh, thugamar isteach comhéadan a chuir liosta ar ais dá réada Neadaithe den Réimse:

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

Agus chuireamar i bhfeidhm é inár gcuspóirí Réimse:

@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 tugaimid ar ais gach leanbh mar liosta comhréidh. Agus is féidir le gach réad linbh an comhéadan NestedEntityAware a chur i bhfeidhm freisin, rud a thugann le fios go bhfuil réada Realm inmheánacha aige le scriosadh, mar shampla 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 de, is féidir neadú rudaí a athdhéanamh.

Ansin scríobhaimid modh a scriosann go hathchúrsach gach réad neadaithe. Modh (déanta mar shíneadh) deleteAllNestedEntities faigheann gach réad barrleibhéil agus modh deleteNestedRecursively Baintear gach réad neadaithe go hathchúrsach trí úsáid a bhaint as comhéadan 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()
   }
 }
}

Rinneamar é seo leis na rudaí is mó fáis agus rinneamar seiceáil ar cad a tharla.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Mar thoradh air sin, stop na rudaí sin a chlúdaigh muid leis an réiteach seo ag fás. Agus mhoilligh fás foriomlán an bonn, ach níor stad sé.

An "gnáth" réiteach

Cé gur thosaigh an bonn ag fás níos moille, d'fhás sé fós. Mar sin thosaigh muid ag breathnú níos faide. Baineann ár dtionscadal úsáid an-ghníomhach as taisceadh sonraí sa Ríocht. Dá bhrí sin, scríobh gach réad neadaithe do gach rud atá dian ar shaothar, móide méaduithe ar an mbaol earráidí, mar is féidir leat dearmad a dhéanamh ar rudaí a shonrú agus an cód á athrú.

Bhí mé ag iarraidh a chinntiú nár úsáid mé comhéadain, ach gur oibrigh gach rud as a stuaim féin.

Nuair a theastaíonn uainn go n-oibreodh rud éigin as a stuaim féin, caithfimid machnamh a úsáid. Chun seo a dhéanamh, is féidir linn dul trí gach réimse ranga agus seiceáil an réad Ríochta é nó liosta rudaí:

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

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

Más RealmModel nó RealmList an réimse, cuir réad an réimse seo le liosta réad neadaithe. Tá gach rud díreach mar a rinne muid thuas, ach anseo a dhéanfar é leis féin. Tá an modh scriosta cascáide féin an-simplí agus is cosúil é 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()
         }
       }
 }
}

Síneadh filterRealmObject scagairí amach agus pas a fháil ach rudaí Réimse. Modh getNestedRealmObjects Trí mhachnamh, aimsíonn sé gach réad Neadaithe den Réimse agus cuireann sé isteach i liosta líneach iad. Ansin déanaimid an rud céanna go hathchúrsach. Agus é á scriosadh, ní mór duit an réad a sheiceáil le haghaidh bailíochta isValid, toisc go bhféadfadh sé gur féidir le tuismitheora éagsúla rudaí comhionanna a neadú. Is fearr é seo a sheachaint agus uathghiniúint aitheantais a úsáid go simplí agus rudaí nua á gcruthú.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Cur i bhfeidhm iomlán an mhodha 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 sin, inár gcód cliant úsáidimid “scrios cascáideach” do gach oibríocht modhnaithe sonraí. Mar shampla, le haghaidh oibríocht ionsáite tá sé 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 }
 ))
}

Modh ar dtús getManagedEntities Faigheann gach réad breise, agus ansin an modh cascadeDelete Scriostar gach réad bailithe go hathchúrsach sula scríobhtar cinn nua. Bainimid úsáid as an gcur chuige seo ar fud an fheidhmchláir. Tá sceitheadh ​​cuimhne sa Ríocht imithe go hiomlán. Tar éis an tomhas céanna a dhéanamh ar spleáchas an ama tosaithe ar líon na dtosaithe fuar san iarratas, feicimid an toradh.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Léiríonn an líne glas spleáchas an ama tosaithe iarratais ar líon na dtosaithe fuar le linn scriosadh cascáideach uathoibríoch rudaí neadaithe.

Torthaí agus conclúidí

Ba chúis le bunachar sonraí Realm a bhí ag dul i méid de shíor ag seoladh an fheidhmchláir go han-mhall. D'eisíomar nuashonrú lenár “scrios cascáideach” féin de réada neadaithe. Agus anois déanaimid monatóireacht agus meastóireacht ar an gcaoi a ndeachaigh ár gcinneadh i bhfeidhm ar am tosaithe an iarratais tríd an méadrach _app_start.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Le haghaidh anailíse, glacaimid tréimhse ama 90 lá agus feicimid: thosaigh an t-am seolta feidhmchlár, idir an t-airmheán agus an t-am a thiteann ar an 95ú peircintíl úsáideoirí, ag laghdú agus ní ardaíonn sé a thuilleadh.

An scéal faoi conas a bhuaigh scriosadh easghluaiseachta sa Ríocht thar seoladh fada

Má fhéachann tú ar an gcairt seacht lá, breathnaíonn an méadrach _app_start go hiomlán leordhóthanach agus tá sé níos lú ná 1 soicind.

Is fiú a chur leis freisin, de réir réamhshocraithe, go seolann Firebase fógraí má sháraíonn luach airmheánach _app_start 5 soicind. Mar sin féin, mar is féidir linn a fheiceáil, níor cheart duit brath ar seo, ach dul isteach agus é a sheiceáil go sainráite.

Is é an rud speisialta faoi bhunachar sonraí Realm ná gur bunachar sonraí neamhghaolmhar é. In ainneoin a éasca le húsáid, cosúlachtaí le réitigh ORM agus nascadh réad, níl aon scriosadh easghluaiseachta aige.

Mura gcuirtear é seo san áireamh, carnóidh rudaí neadaithe agus "sceitheadh." Fásfaidh an bunachar sonraí i gcónaí, rud a chuirfidh isteach ar moilliú nó ar thosú an fheidhmchláir.

Roinn mé ár dtaithí ar conas a dhéanamh go tapa scriosadh cascáideach de rudaí sa Ríocht, nach bhfuil fós as an bhosca, ach a bhfuil caint faoi le fada an lá abair и abair. Inár gcás, chuir sé seo go mór le ham tosaithe an iarratais.

In ainneoin an phlé faoi chuma láithreach an ghné seo, is de réir dearadh a dhéantar an easpa scriosadh cascáide sa Ríocht. Má tá feidhmchlár nua á dhearadh agat, cuir é seo san áireamh. Agus má tá Realm á úsáid agat cheana féin, seiceáil an bhfuil fadhbanna den sórt sin agat.

Foinse: will.com

Add a comment