Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil

Scríobhann ár n-úsáideoirí teachtaireachtaí dá chéile gan tuirse a fhios acu.
Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil
Sin go leor. Má leagtar amach agat teachtaireachtaí na n-úsáideoirí go léir a léamh, thógfadh sé níos mó ná 150 míle bliain. Ar choinníoll gur léitheoir sách ardfhorbartha thú agus gan níos mó ná soicind a chaitheamh ar gach teachtaireacht.

Le méid sonraí den sórt sin, tá sé ríthábhachtach go dtógfaí an loighic chun iad a stóráil agus a rochtain ar an mbealach is fearr is féidir. Seachas sin, i gceann nóiméad nach bhfuil chomh iontach sin, d'fhéadfadh sé a bheith soiléir go n-imeoidh gach rud mícheart go luath.

Maidir linne, tháinig an nóiméad seo bliain go leith ó shin. Conas a thángamar ar seo agus cad a tharla sa deireadh - inseoimid duit in ord.

Cúlra

Sa chéad chur i bhfeidhm, d'oibrigh teachtaireachtaí VKontakte ar mheascán de inneall PHP agus MySQL. Is gnáthréiteach é seo do shuíomh Gréasáin beag mac léinn. Mar sin féin, d'fhás an suíomh seo go neamhrialaithe agus thosaigh sé ag éileamh leas iomlán a bhaint as struchtúir sonraí dó féin.

Ag deireadh 2009, scríobhadh an chéad stór téacs-inneall, agus in 2010 aistríodh teachtaireachtaí chuige.

San inneall téacs, coinníodh teachtaireachtaí i liostaí - cineál “boscaí poist”. Tá gach liosta den sórt sin socraithe ag uid - an t-úsáideoir ar leis na teachtaireachtaí seo go léir. Tá sraith tréithe ag teachtaireacht: aitheantóir idirghabhálaí, téacs, ceangaltáin, agus mar sin de. Is local_id an t-aitheantóir teachtaireachta taobh istigh den “bhosca”, ní athraíonn sé choíche agus sanntar é go seicheamhach do theachtaireachtaí nua. Tá na “boscaí” neamhspleách agus níl siad sioncronaithe lena chéile laistigh den inneall; tarlaíonn cumarsáid eatarthu ag leibhéal PHP. Is féidir leat breathnú ar struchtúr sonraí agus cumais an téacs-inneall ón taobh istigh anseo.
Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil
Ba leor sin le haghaidh comhfhreagrais idir beirt úsáideoir. Buille faoi thuairim cad a tharla ina dhiaidh sin?

I mí na Bealtaine 2011, thug VKontakte comhráite isteach le roinnt rannpháirtithe - il-chomhrá. Le bheith ag obair leo, d’ardaigh muid dhá bhraisle nua – comhráiteanna agus baill chomhrá. Stórálann an chéad cheann sonraí faoi chomhráite úsáideoirí, stórálann an dara ceann sonraí faoi úsáideoirí trí chomhráite. Chomh maith leis na liostaí féin, folaíonn sé seo, mar shampla, an t-úsáideoir cuireadh agus an t-am ar cuireadh leis an gcomhrá iad.

“PHP, seolfaimid teachtaireacht chuig an gcomhrá,” a deir an t-úsáideoir.
“Come on, {ainm úsáideora},” a deir PHP.
Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil
Tá míbhuntáistí ag baint leis an scéim seo. Tá PHP fós freagrach as sioncrónú. Is scéal contúirteach é comhráite móra agus úsáideoirí a sheolann teachtaireachtaí chucu ag an am céanna. Ós rud é go mbraitheann sampla an innill téacs ar an UID, d'fhéadfadh rannpháirtithe comhrá an teachtaireacht chéanna a fháil ag amanna éagsúla. D’fhéadfadh duine maireachtáil leis seo dá seasfadh an dul chun cinn. Ach ní tharlóidh sin.

Ag deireadh 2015, sheolamar teachtaireachtaí pobail, agus ag tús 2016, sheolamar API dóibh. Le teacht na chatbots móra i bpobail, bhíothas in ann dearmad a dhéanamh ar dháileadh ualaigh fiú.

Gineann bot maith na milliúin teachtaireacht in aghaidh an lae - ní féidir fiú na húsáideoirí is cainte a bheith bródúil as seo. Ciallaíonn sé seo gur thosaigh roinnt cásanna den inneall téacs, ar a raibh cónaí ar róbónna den sórt sin, ag fulaingt go dtí an iomláine.

Is éard atá sna hinnill teachtaireachta in 2016 ná 100 cás de chomhbhaill agus de chomhráití, agus 8000 inneall téacs. Rinneadh iad a óstáil ar mhíle freastalaí, gach ceann acu le 64 GB de chuimhne. Mar chéad bheart éigeandála, mhéadaíomar an chuimhne faoi 32 GB eile. Rinneamar meastachán ar na réamhaisnéisí. Gan athruithe móra, bheadh ​​sé seo go leor ar feadh thart ar bhliain eile. Ní mór duit crua-earraí a fháil nó na bunachair shonraí a bharrfheabhsú iad féin.

Mar gheall ar nádúr na hailtireachta, ní dhéanann sé ciall ach crua-earraí a mhéadú i iolraithe. Is é sin, ar a laghad dúbailt ar líon na ngluaisteán - ar ndóigh, tá sé seo sách costasach cosán. Déanfaimid barrfheabhsú.

Coincheap nua

Is é croílár an chur chuige nua ná comhrá. Tá liosta teachtaireachtaí a bhaineann leis ag comhrá. Tá liosta comhráite ag an úsáideoir.

Is é an t-íosmhéid a theastaíonn ná dhá bhunachar sonraí nua:

  • inneall comhrá. Is stór de veicteoirí comhrá é seo. Tá veicteoir de theachtaireachtaí a bhaineann leis ag gach comhrá. Tá téacs agus aitheantóir uathúil teachtaireachta ag gach teachtaireacht taobh istigh den chomhrá - chat_local_id.
  • úsáideora-inneall. Seo stóráil veicteoirí úsáideoirí - naisc le húsáideoirí. Tá veicteoir de peer_id (idirghabhálaithe - úsáideoirí eile, ilchomhrá nó pobail) agus veicteoir teachtaireachtaí ag gach úsáideoir. Tá veicteoir de theachtaireachtaí a bhaineann leis ag gach piar_id. Tá chat_local_id agus aitheantas uathúil teachtaireachta ag gach teachtaireacht don úsáideoir sin - user_local_id.

Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil
Déanann braislí nua cumarsáid lena chéile ag baint úsáide as TCP - cinntíonn sé seo nach n-athraíonn ord na n-iarratas. Taifeadtar na hiarratais féin agus deimhnithe ar a son ar an tiomántán crua - ionas gur féidir linn staid na scuaine a athbhunú tráth ar bith tar éis teip nó atosú ar an inneall. Ós rud é go bhfuil an t-inneall úsáideora agus an t-inneall comhrá 4 mhíle shard an ceann, déanfar an scuaine iarratais idir na cnuasaigh a dháileadh go cothrom (ach i ndáiríre níl aon cheann ann - agus oibríonn sé go han-tapa).

Bunaítear oibriú le diosca inár mbunachair shonraí i bhformhór na gcásanna ar theaglaim de logáil dhénártha na n-athruithe (binlog), pictiúir statacha agus íomhá páirteach sa chuimhne. Scríobhtar athruithe i rith an lae ar bhosca bruscair, agus cruthaítear pictiúr den staid reatha go tréimhsiúil. Is éard is grianghraf ann ná bailiúchán de struchtúir sonraí atá optamaithe le haghaidh ár gcuspóirí. Is éard atá ann ceanntásc (metaindex na híomhá) agus sraith meiteashonraí. Stóráiltear an ceanntásc go buan i RAM agus cuireann sé in iúl cén áit ar féidir sonraí a chuardach ón ngrianghraf. Áiríonn gach meiteashonraí sonraí ar dócha go mbeidh gá leo ag pointí dúnta ama – mar shampla, a bhaineann le húsáideoir amháin. Nuair a chuireann tú ceist ar an mbunachar sonraí ag baint úsáide as an gceanntásc seat, léitear an meiteashonraí riachtanacha, agus ansin cuirtear san áireamh athruithe sa bhosca bruscair a tharla tar éis an pictiúr a chruthú. Is féidir leat tuilleadh a léamh faoi na buntáistí a bhaineann leis an gcur chuige seo anseo.

Ag an am céanna, ní athraíonn na sonraí ar an tiomáint crua féin ach uair amháin sa lá - go déanach san oíche i Moscó, nuair a bhíonn an t-ualach íosta. A bhuíochas leis seo (a fhios agam go bhfuil an struchtúr ar an diosca seasta i rith an lae), is féidir linn acmhainn a chur in ionad veicteoirí le eagair de mhéid seasta - agus mar gheall ar seo, gnóthachan i gcuimhne.

Breathnaíonn an chuma seo ar theachtaireacht a sheoladh sa scéim nua:

  1. Déanann inneall PHP teagmháil leis an inneall úsáideora le hiarratas chun teachtaireacht a sheoladh.
  2. seachfhreastalaí inneall-úsáideoir an t-iarratas chuig an ásc comhrá-inneall atá ag teastáil, a fhilleann chuig an user-engine chat_local_id - aitheantóir uathúil teachtaireachta nua laistigh den chomhrá seo. Craolann an chat_engine an teachtaireacht ansin chuig gach faighteoir sa chomhrá.
  3. Faigheann user-engine chat_local_id ó chat-engine agus filleann user_local_id go PHP - aitheantóir teachtaireachta uathúil don úsáideoir seo. Úsáidtear an t-aitheantóir seo ansin, mar shampla, chun oibriú le teachtaireachtaí tríd an API.

Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil
Ach chomh maith le teachtaireachtaí a sheoladh, ní mór duit roinnt rudaí níos tábhachtaí a chur i bhfeidhm:

  • Is iad fo-liostaí, mar shampla, na teachtaireachtaí is déanaí a fheiceann tú agus an liosta comhrá á oscailt. Teachtaireachtaí neamhléite, teachtaireachtaí le clibeanna (“Tábhachtach”, “Turscar”, srl.).
  • Teachtaireachtaí a chomhbhrú san inneall comhrá
  • Teachtaireachtaí a thaisceadh san inneall úsáideora
  • Cuardaigh (trí gach dialóg agus laistigh de cheann ar leith).
  • Nuashonrú fíor-ama (Longvolling).
  • Stair a shábháil chun taisceadh a chur i bhfeidhm ar chliaint soghluaiste.

Is struchtúir atá ag athrú go tapa iad na fo-liostaí go léir. Chun oibriú leo úsáidimid Crainn spréite. Mínítear an rogha seo ag an bhfíric go stórálann muid uaireanta ag barr an chrainn deighleog iomlán de theachtaireachtaí ó ghrianghraf - mar shampla, tar éis ath-innéacsú oíche, tá an crann comhdhéanta de bharr amháin, ina bhfuil teachtaireachtaí uile an fho-liosta. Déanann an crann Splay éasca é a chur isteach i lár rinn den sórt sin gan a bheith ag smaoineamh ar chothromaíocht. Ina theannta sin, ní stórálann Splay sonraí gan ghá, rud a shábhálann cuimhne dúinn.

Bíonn cuid mhór faisnéise i gceist le teachtaireachtaí, téacs den chuid is mó, atá úsáideach le bheith in ann comhbhrú. Tá sé tábhachtach gur féidir linn fiú teachtaireacht aonair amháin a dhíchartlannú go cruinn. Úsáidtear é chun teachtaireachtaí a chomhbhrú Huffman algartam lenár heuristics féin - mar shampla, tá a fhios againn i dteachtaireachtaí focail malartach le "neamhfhocail" - spásanna, marcanna poncaíochta - agus cuimhnímid freisin ar roinnt de na gnéithe a bhaineann le húsáid siombailí don teanga Rúisis.

Ós rud é go bhfuil i bhfad níos lú úsáideoirí ná comhráite ann, chun iarratais ar dhiosca rochtana randamacha a shábháil in inneall comhrá, déanaimid teachtaireachtaí a thaisceadh in inneall an úsáideora.

Cuirtear cuardach teachtaireachta i bhfeidhm mar cheist trasnánach ó inneall an úsáideora go dtí gach cás innill chomhrá ina bhfuil comhráite leis an úsáideoir seo. Cuirtear na torthaí le chéile san inneall úsáideora féin.

Bhuel, tá na sonraí go léir curtha san áireamh, níl fágtha ach aistriú go scéim nua - agus b'fhearr gan úsáideoirí a thabhairt faoi deara.

Aistriú sonraí

Mar sin, tá inneall téacs againn a stórálann teachtaireachtaí de réir úsáideora, agus dhá bhraisle de chomhaltaí comhrá agus de chomhráití a stórálann sonraí faoi sheomraí ilchomhrá agus na húsáideoirí iontu. Conas bogadh uaidh seo go dtí an t-inneall nua úsáideora agus comhrá?

Baineadh leas go príomha as comhráite na mball sa tseanscéim chun barrfheabhsú a dhéanamh. D'aistrigh muid na sonraí riachtanacha uaidh go tapa chuig comhaltaí comhrá, agus ansin níor ghlac sé páirt sa phróiseas aistrithe a thuilleadh.

scuaine do chomhaltaí comhrá. Áiríonn sé 100 cás, agus tá 4 mhíle inneall comhrá. Chun na sonraí a aistriú, ní mór duit iad a chomhlíonadh - le haghaidh seo, roinneadh na baill chomhrá i 4 mhíle cóip, agus ansin cumasaíodh binlog na gcomhaltaí comhrá a léamh san inneall comhrá.
Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil
Anois tá a fhios ag chat-engine faoi ilchomhrá ó chomhaltaí comhrá, ach níl a fhios aige fós faoi idirphlé le beirt idirghabhálaí. Tá idirphlé den sórt sin lonnaithe san inneall téacs agus tagairt á déanamh d’úsáideoirí. Anseo ghlacamar na sonraí “ceann ar aghaidh”: d’fhiafraigh gach cás inneall comhrá gach cás inneall téacs an raibh an t-idirphlé a bhí ag teastáil uathu.

Go hiontach - tá a fhios ag inneall comhrá cad iad na comhráite ilchomhrá atá ann agus tá a fhios aige cad iad na comhráite atá ann.
Ní mór duit teachtaireachtaí a chomhcheangal i gcomhráite ilchomhrá ionas go mbeidh liosta teachtaireachtaí agat i ngach comhrá. Ar dtús, aisghabhann an t-inneall comhrá gach teachtaireacht úsáideora ón gcomhrá seo ón inneall téacs. I gcásanna áirithe tá go leor acu (suas go dtí na céadta milliún), ach le heisceachtaí fíor-annamh luíonn an comhrá go hiomlán le RAM. Tá teachtaireachtaí neamhordaithe againn, gach ceann i roinnt cóipeanna - tar éis an tsaoil, tarraingítear iad go léir ó chásanna éagsúla inneall téacs a fhreagraíonn d'úsáideoirí. Is é an sprioc ná teachtaireachtaí a shórtáil agus fáil réidh le cóipeanna a thógann spás gan ghá.

Tá stampa ama ar gach teachtaireacht ina bhfuil an t-am a seoladh é agus an téacs. Bainimid úsáid as am le haghaidh sórtála - cuirimid leideanna chuig na teachtaireachtaí is sine ó rannpháirtithe ilchomhrá agus déanaimid comparáid idir hashes ó théacs na gcóipeanna atá beartaithe, ag bogadh i dtreo an stampa ama a mhéadú. Tá sé loighciúil go mbeidh an hash agus an stampa ama céanna ag na cóipeanna, ach go praiticiúil ní bhíonn sé seo fíor i gcónaí. Mar is cuimhin leat, rinne PHP sioncrónú sa seanscéim - agus i gcásanna neamhchoitianta, bhí difríocht idir an t-am a seoladh an teachtaireacht chéanna i measc úsáideoirí éagsúla. Sna cásanna seo, thugamar cead dúinn féin an stampa ama a chur in eagar - laistigh de soicind de ghnáth. Is í an dara fadhb ord éagsúil na dteachtaireachtaí do fhaighteoirí éagsúla. I gcásanna den sórt sin, cheadaíomar cóip bhreise a chruthú, le roghanna ordaithe éagsúla d’úsáideoirí éagsúla.

Tar éis seo, seoltar sonraí faoi theachtaireachtaí in multichat chuig an inneall úsáideora. Agus a thagann anseo gné unpleasant na teachtaireachtaí allmhairithe. I ngnáthoibriú, ordaítear teachtaireachtaí a thagann chuig an inneall go docht in ord ardaitheach ag user_local_id. Chaill teachtaireachtaí a iompórtáladh ón sean-inneall isteach san inneall úsáideora an t-airí úsáideach seo. Ag an am céanna, ar mhaithe le háisiúlacht na tástála, ní mór duit a bheith in ann rochtain a fháil orthu go tapa, breathnú ar rud éigin iontu agus cinn nua a chur leis.

Bainimid úsáid as struchtúr sonraí speisialta chun teachtaireachtaí iompórtáilte a stóráil.

Léiríonn sé veicteoir méide Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáilcá bhfuil gach duine Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil - atá éagsúil agus in ord íslitheach, le hord speisialta eilimintí. I ngach deighleog le hinnéacsanna Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil déantar eilimintí a shórtáil. Tógann sé am ag cuardach eilimint i struchtúr den sórt sin Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil trí Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil cuardaigh dhénártha. Déantar amúchadh ar eilimint a chur leis Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil.

Mar sin, rinneamar amach conas sonraí a aistriú ó shean-innill go cinn nua. Ach tógann an próiseas seo roinnt laethanta - agus ní dócha go dtabharfaidh ár n-úsáideoirí suas le linn na laethanta seo an nós scríobh chuig a chéile. Ionas nach gcaillfear teachtaireachtaí le linn an ama seo, aistrímid chuig scéim oibre a úsáideann braislí sean agus nua araon.

Scríobhtar sonraí chuig na comhaltaí comhrá agus chuig an inneall úsáideora (agus ní chuig an inneall téacs, mar a dhéantar i ngnáthoibriú de réir na sean-scéim). seachvótálaithe an t-úsáideoir-inneall an iarraidh ar chat-engine - agus anseo braitheann an t-iompar ar cé acu an bhfuil an comhrá seo cumasc cheana féin nó nach bhfuil. Mura bhfuil an comhrá cumasctha fós, ní scríobhann an t-inneall comhrá an teachtaireacht chuige féin, agus ní tharlaíonn a phróiseáil ach san inneall téacs. Má rinneadh an comhrá a chumasc le hinneall comhrá cheana féin, filleann sé chat_local_id chuig an inneall úsáideora agus seolann sé an teachtaireacht chuig gach faighteoir. seachvótálaithe inneall-úsáideoir na sonraí go léir chuig an téacs-inneall - ionas go má tharlaíonn rud éigin, is féidir linn a rolladh siar i gcónaí, a bhfuil na sonraí reatha go léir sa sean-inneall. Filleann text-engine user_local_id, a stórálann an t-inneall-úsáideoir agus a fhilleann ar an inneall.
Athscríobh bunachar sonraí teachtaireachtaí VKontakte ón tús agus maireachtáil
Mar thoradh air sin, tá an chuma ar an bpróiseas aistrithe mar seo: nascaimid braislí inneall úsáideora agus inneall comhrá folamh. léann Chat-engine binlog iomlán na gcomhaltaí comhrá, ansin cuirtear tús le seachfhreastalaí de réir na scéime a bhfuil cur síos déanta uirthi thuas. Aistrímid na sean-shonraí agus faighimid dhá bhraisle shioncrónaithe (sean agus nua). Níl fágtha ach léamh a athrú ó inneall téacs go hinneall úsáideora agus seachfhreastalaí a dhíchumasú.

Torthaí

A bhuí leis an gcur chuige nua, feabhsaíodh méadracht feidhmíochta uile na n-inneall agus réitíodh fadhbanna maidir le comhsheasmhacht sonraí. Anois is féidir linn gnéithe nua a chur i bhfeidhm go tapa i dteachtaireachtaí (agus tá tús curtha le seo a dhéanamh cheana féin - mhéadaíomar an t-uaslíon rannpháirtithe comhrá, chuireamar cuardach ar theachtaireachtaí a cuireadh ar aghaidh, sheolamar teachtaireachtaí pinn agus d'ardaigh muid an teorainn ar líon iomlán na dteachtaireachtaí in aghaidh an úsáideora) .

Tá na hathruithe sa loighic fíor ollmhór. Agus ba mhaith liom a thabhairt faoi deara nach gciallaíonn sé seo i gcónaí blianta iomlána forbartha ag foireann ollmhór agus iliomad línte cód. inneall comhrá agus inneall úsáideora chomh maith leis na scéalta breise go léir cosúil le Huffman maidir le comhbhrú teachtaireachtaí, crainn spréacha agus struchtúr do theachtaireachtaí allmhairithe níos lú ná 20 míle líne de chód. Agus bhí siad scríofa ag 3 forbróirí i díreach 10 mí (áfach, is fiú a choinneáil i gcuimhne go bhfuil go léir trí forbróir - Seaimpíní an domhain i gcláir spóirt).

Ina theannta sin, in ionad líon na bhfreastalaithe a dhúbailt, laghdaigh muid a líon faoi leath - anois tá an t-inneall úsáideora agus an t-inneall comhrá beo ar 500 meaisín fisiceach, agus tá spás cloiginn mór ag an scéim nua le haghaidh ualaigh. Shábháil muid go leor airgid ar threalamh - thart ar $5 milliún + $750 míle in aghaidh na bliana i gcostais oibriúcháin.

Déanaimid ár ndícheall na réitigh is fearr a aimsiú do na fadhbanna is casta agus ar scála mór. Tá neart acu againn - agus sin an fáth go bhfuil forbróirí cumasacha á lorg againn sa roinn bunachar sonraí. Má tá grá agat agus fios agat conas fadhbanna den sórt sin a réiteach, eolas den scoth a bheith agat ar halgartaim agus struchtúir sonraí, tugaimid cuireadh duit a bheith ar an bhfoireann. Déan teagmháil lenár HRle haghaidh sonraí.

Fiú mura bhfuil an scéal seo fútsa, tabhair faoi deara le do thoil go bhfuil meas againn ar mholtaí. Inis do chara faoi folúntais forbróra, agus má chríochnaíonn sé an tréimhse promhaidh go rathúil, gheobhaidh tú bónas de 100 míle rúbal.

Foinse: will.com

Add a comment