RESCRIBO VKontakte nuntium database a scabere et superstes

Nostri utentes nuntii inter se scribere sine lassitudine sciendi.
RESCRIBO VKontakte nuntium database a scabere et superstes
Satis multum est. Si omnes epistulas omnium usorum utentium legere proponis, plus quam 150 milia annorum caperet. Dummodo sis lector satis provectus et non plus quam secundus in singulis nunciis habe.

Cum tali notitiarum volumine, criticum est ut logica optima condendi ac accessu aedificetur. Alioquin, in uno non-tanto mirabili momento, pateat omnia cito errare.

Hoc momentum nobis venit ante annum et dimidium. Quomodo venimus ad hoc et quod in fine factum est - ordine vobis dicimus.

casus historia

In prima exsecutione, nuntii VKontakte in coniunctio PHP backend et MySQL operati sunt. Haec solutio omnino normalis pro parva website discipulo. Nihilominus hic situs immoderate crevit et meliorem structuris sibi datarum meliorem postulare coepit.

In fine 2009, repositio prima electronica repositio scripta est et nuntiis 2010 ad eum translati sunt.

In tex-engine, nuntii in tabulis erant - quaedam "mailboxes". Unumquodque horum indicem determinatur per utentis utentis qui has omnes nuntios habet. Mandatum praescriptum attributorum habet: interlocutorem identificatorem, textum, attachiamenta et cetera. Nuntium identifier intra "arcam" localem est, numquam mutat et consequenter pro novis nuntiis assignatur. Arcae sui iuris sunt et inter se intra machinam non conformantur, communicatio inter eos fit in gradu PHP. Inspicere potes structuram et capacitatem electronicarum machinarum ab intus hic.
RESCRIBO VKontakte nuntium database a scabere et superstes
Hoc satis satis fuit ad correspondentiam inter duos utentes. Conice quid deinde?

Mense Maio MMXI, VKontakte colloquia cum pluribus participantibus induxitβ€”multa chat. Ad eos laborandum, duas ligaturas novas, confabulationes et sodalitates, excitavimus. Prima copia notitiarum de chats ab utentibus, secunda thesaurorum notitia de usoribus per confabulationes. Praeter ipsas tabulas, hoc includit, exempli gratia, usoris invitantis et tempus chati additae sunt.

"PHP, nuntium ad chat mittam" usor dicit.
β€œAge, usoris,” inquit PHP.
RESCRIBO VKontakte nuntium database a scabere et superstes
Sunt incommoda harum rerum. Synchronisation adhuc est penes PHP. Magnae confabulationes et utentes qui eodem tempore nuntios ad eos mittunt, fabula periculosa est. Cum instantia scripti instrumenti ad uid penderet, participes chat eadem nuntium diversis temporibus recipere potuerunt. Hoc vivere posset si adhuc progressus stetisset. Sed hoc non erit.

In fine 2015 nuntiis communitatis emissae sumus, et ineunte 2016 API illis egimus. Adveniente magna in communitatibus cataractarum, oblivisci fieri potuit de distributione vel onere.

Botrus bonus plura miliones nuntiis per diem generat - etiam loquaces utentes iactare non possunt. Hoc significat nonnulla exempla electronicae machinae, in qua tales automata vixerunt, plenissimam pati coeperunt.

Epistulae machinae in MMXVI sunt 2016 instantiae chat-membrorum et chatium sodalium et 100 electronicarum machinarum. In mille servientibus erant hosted, singuli cum 8000 GB memoriae. Ut in prima subitis metimur, memoriam ab alio auximus 64 GB. Praenoscere aestimavimus. Sine atrox mutationes, hoc satis esset ad alterum annum circiter. Opus est ut vel ferramenta excipias vel ipsi databases optimize.

Ob architecturae naturam, solum sensum augere ferramenta multiplicia facit. Hoc est, saltem duplicato numero carrorum β€” patet, haec via carior est. Faciemus optimize.

Novus conceptus

Media essentia novae accessionis est chat. Colloquium habet indicem epistularum ad eum pertinentium. Indicem sermonum usorum habet.

Minimum inquisitum est duae novae databases:

  • Curabitur-machina. Hoc est repositio vectoris chat. Quisque chat vector nuntiorum qui ad eum pertinent. Quisque nuntius textum et nuntium singularem identificatorium intra chat - chat_local_id habet.
  • user-machinam. Repositio haec est vector utentium - nexus usorum. Unusquisque usor habet vectorem pari_id (interlocutores - alios utentes, multi- chat seu communitates) et vector nuntiorum. Quisque parem_id habet vectorem epistularum quae ad eam pertinent. Quisque nuntius habet chat_local_id et unicum nuntium ID pro eo usuario - user_local_id.

RESCRIBO VKontakte nuntium database a scabere et superstes
Novae ligaturae inter se communicant utentes TCP - hoc efficit ut ordo petitionum non mutetur. Petitiones ipsae et confirmationes pro eis scriptae sunt in duro impetu - sic statum queue quovis tempore post defectum machinae vel sileo restituere possumus. Cum machina usoris et machinae machinae sint quattuor milia shards singulae, petitio queue inter racemos aequaliter dividetur (re vera vero nulla est - et celerrime operatur).

Operatio cum disco in nostris databases in pluribus casibus fundatur in compositione strophorum binarii mutationum (binlogorum), snapshots statici et partialis imaginis in memoria. Mutationes interdiu binlogo scriptae sunt, et snapshots status hodiernae periodice creatur. A snapshot collectio notitiarum structurarum ad proposita nostra optimized est. Constat titulo capitis (metaindex imaginis) et copia metafilium. Header in RAM in perpetuum conditur et indicat ubi quaeramus notitias e snapshot. Singulae metafiles notitias includunt quae in comminus temporis puncta necessaria esse verisimile est, exempli gratia ad unum usum pertinentia. Cum interrogatione datorum utens caput snapshot, metafile inquisita legitur, et tunc mutationes binlogorum quae factae sunt postquam creatus est snapshot rationem habet. Plura legere potes de beneficiis accessus hic.

Eodem tempore, notitia in se ferreis coegi, semel tantum in die mutat - in nocte Moscuae, cum onus minimum est. Propter hoc (scientes structuram in disco per diem constantem esse), possumus praestare vectores in vestimentis certae magnitudinis reponere - et ob hoc lucrum in memoria habere.

Epistulam mittens in novo schemate sic similis est:

  1. PHP backend contactum machinae usoris cum rogatu ut nuntium mittat.
  2. usoris machinam rogat instantiam chat-engines desideratae, quae redit ad chat_local_id-machinam - singularem identifier novi nuntii intra hoc chat. In chat_engine tunc mittit nuntium omnibus recipientibus in chat.
  3. machina usoris chat_local_id accipit e machinatione chat et redit ad usor_local_id PHP - unicum nuntium identifier huius usoris. Hic identifier tunc adhibetur, exempli gratia, cum nuntiis per API laborare.

RESCRIBO VKontakte nuntium database a scabere et superstes
Sed praeter nuntios actualiter mittens, paucis momentis efficere debes:

  • Sublists sunt, exempli gratia, epistulae recentissimae quae in indice colloquii aperiendo videris. Mandata illecta, nuntios cum tags ("Important", "Spam", etc.
  • Comprimere mandata in chat-machinam
  • Caching nuntii in user-machinam
  • Quaere (per omnes dialogos et intra unum certum).
  • Real-time update (Longpolling).
  • Excepta historia ad efficiendum in clientibus mobilibus.

Omnes copiae structurae celeriter mutantur. Laborare cum illis utimur arbores ludere. Haec optio explicatur ex eo quod in cacumine arboris totum nuntiorum segmentum interdum ex snapshot - condimus, verbi gratia, post nocturnum indicentem, ex uno vertice constare lignum, quod omnes nuntii sublist contineat. Tabula pedunculi facilem facit talem verticem in medium inseri sine consideratione librationis. Praeterea Splay notitias supervacuas non refert, quae nos memoriam servat.

Epistulae magnam copiam notitiarum, maxime textuum, involvunt, quae utiliter comprimere possunt. Magni interest ut accurate inarchive etiam unum nuntium capere possimus. Ad comprimere mandata Huffman algorithmus nostris Heuristicis - exempli gratia scimus in nuntiis verba alternare "non-verba" - spatia, puncta interpunctionis - et meminimus etiam quaedam proprietates utendi symbola pro lingua Russica.

Cum multo pauciores sint usores quam sermones, ut petitiones discri temere-adipiscendi in machinis chat conservarent, epistulas in machinam usoris eliquamus.

Nuntius inquisitionis effectum est ut interrogatione diagonali ab usore machina ad omnes instantias chat-machinas quae huius usoris sermones continent. Eventus in ipsum usoris machinationem coniunguntur.

Bene omnia singularia habita sunt, omnia quae restant ad novum schema mutandum est - et potius sine notatione utentium.

Data migratio

Ita habemus electronicam machinam quae nuntiis ab usuario reponit, et duas ligaturas chat-membras et membra chats quae copia notitiarum de multi- chatis cellis et usoribus in illis sunt. Quomodo ab hac ad novum usoris machinam et machinam chat movere?

socius- chats in vetere schemate principaliter ad optimizationem adhibita est. necessarios notitias ex eo ad sodales chat-tas cito transtulimus, et tunc non iam processu migrationis participavimus.

Curabitur sodales malesuada tincidunt. Continet 100 instantias, dum machinae quattuor milia habet. Notitias transferre, in obsequium reducere debes - hoc enim in quattuor milia exemplarium sodalitates divisae sunt, ac deinde lectio sodalium bilogorum in machinam chat-enstrui permissa est.
RESCRIBO VKontakte nuntium database a scabere et superstes
Nunc chat-machina scit de multi-chat sodalibus colloquiis, sed nondum scit aliquid de dialogis cum duobus interlocutoribus. Tales dialogi ponuntur in machinis electronicis cum usoribus. Hic notitias "caput-on" cepimus: singulae instantiae chat-machinae quaesiverunt omnes instantias text-ingines si dialogum necessarium haberent.

Magna - machina scit quid multi-sermones sunt et scit quid sunt dialogi.
Opus est nuntiis in multi- chatis colloquiis coniungi ut finias cum indice epistularum in unaquaque chat. Primum, chat-machinam reddit ex machina electronica omnia nuntiis usoris ab hoc chat. In quibusdam casibus satis multae sunt (usque ad centena decies centena millia), sed rarissimis exceptionibus in RAM totum convenit. Mandata inordinata habemus, singula in pluribus exemplaribus - tamen omnes trahuntur e diversis instantiis electronicis utenti respondentibus. Propositum est nuntios exponere et exemplaria removere quae spatium non necessarium capiunt.

Quisque nuntius habet indicationem temporis continens tempus et textum missi. Utimur tempus ad genus - indicium ad antiquiores nuntios multichat participantium ponimus et has e textu exemplarium intentorum comparamus, movens ad incrementum indicatione temporis. Consentaneum est quod idem Nullam ac indicationem habebunt exemplaria, sed in usu non semper accidit. Ut meministis, synchronisatio in vetere schemate PHP peracta est - et in rariis casibus, tempus eiusdem nuntii mittendi inter diversos utentes discrepabat. His in casibus, nosmetipsos notare - plerumque intra alterum recensere permisimus. Secunda quaestio est diversi ordinis nuntiorum pro diversis recipientibus. Talibus in casibus, exemplar extraordinarium creari permisimus, cum diversis optionibus ordinandis pro diversis utentibus.

Post haec, notitia de nuntiis in multichat ad machinam usoris mittitur. Et hinc importatae epistulae ingratum notam subit. In operatione normali, nuntii quae ad machinam veniunt, ordinantur stricte ascendendo ab usuario. Mandata ex veteri machina in machinam usoris importata hanc rem utilem amiserunt. Eodem tempore, ad probationis opportunitatem, necesse est ut ad eas cito accedere possis, aliquid in eis quaere et novas addas.

Peculiari notitia structurae utimur ad epistulas importatas congregem.

Significat vector in magnitudine RESCRIBO VKontakte nuntium database a scabere et superstesquis est RESCRIBO VKontakte nuntium database a scabere et superstes - differunt et ordinantur ordine descendendo, cum speciali ordine elementorum. In unaquaque parte cum indices RESCRIBO VKontakte nuntium database a scabere et superstes elementa sunt digesta. Investigatio elementum est in tali structura temporis RESCRIBO VKontakte nuntium database a scabere et superstes per RESCRIBO VKontakte nuntium database a scabere et superstes inquisitiones binariae. Additio elementi super amortizatur RESCRIBO VKontakte nuntium database a scabere et superstes.

Ita figuratum est quomodo notitias ex veteribus tormentis ad novas transferre. Sed hic processus aliquot dies accipit - et est verisimile quod per hos dies utentes nostri consuetudinem scribendi inter se tradent. Ut nuntiis hoc tempore non amittamus, ad rationem operis mutamus quae racemis tam veteribus quam novis utitur.

Data scripta ad chat-membras et usor-engines (non ad tex-engines, sicut in operatione normali secundum rationem veterem). usoris machinam rogationem ad machinam chat-invenit - et hic mores pendent an hic chat iam infusus sit necne. Si chat nondum coaluit, machinae machinae nuntium ad se non scribit, eiusque processus tantum in tex-engine occurrit. Si chat iam in chat-machinam coaluit, chat_local_id ad user-machinam redit et nuntium mittit omnibus recipientibus. machinam usorum proximarum omnium notitiarum ad machinam electronicam pertinentibus, ut, si aliquid acciderit, semper revolvere possumus, omnes notitias hodiernas in veteri machinatione habentes. text-machinam reddit usor_local_id, quod apparatus usorum usorum ad tergum recurrit.
RESCRIBO VKontakte nuntium database a scabere et superstes
Quam ob rem processus transitus hoc modo spectat: inanis usor machinae et machinae machinae inanis coniungimus. chat-engines legit totum chat-membra binlog, deinde incipit procurare secundum schema de quo supra. Vetera notitias transferimus et duas ligaturas synchronistas (vetus et novas accipimus). Reliquum est ut legendi e machinis electronicis ad user-machinam et inactivandi ineundis mutandae sint.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Gratias ad novum accessum, omnes metri machinarum effectus emendati sunt et problemata cum notitia constantiae dissolutae sunt. Nunc novas notas nuntiis cito efficere possumus (et iam hoc facere coepimus - maximum numerum chat participantium augevimus, inquisitionem nuntii transmissam impleverunt, nuntiis confixi immissi et terminum in summa numerorum per usoris levaverunt) .

Mutationes in logica vere immensae sunt. Et notare velim hoc non semper significare totos annos evolutionis per ingentem turmam et myriadas linearum codicis. chat-machina et machina usoris cum omnibus adiectis fabulis sicut Huffman ad nuntium compressionis, tabulae arborum et structura nuntiorum importatis minor est quam XX milia linearum codicis. Earum scriptae sunt a 20 tincidunt in justo 3 mensium (tamen memoria dignum est omnes tribus elit - pugiles mundi in ludis programming).

Praeterea, pro duplicato numero ministrantium, numerum dimidii, iam machinae usoris et machinae machinae in 500 machinis physicis vivunt, nova schema magnum pro onere caput habet. Multam pecuniam in apparatu servavimus circa $5 decies centena millia $750 in anno in expensis operandis.

Studemus optimas solutiones invenire pro problematum multiplicissima et magnarum magnitudine. Earum multa habemus - et ideo quaerentes tincidunt ingeniosos in department database. Si amas et scis dissolvere quaestiones, optimam habent scientiam algorithmarum et structurarum notitiarum, te invitamus ut equos coniungas. Contact our HRfor retineo.

Etiamsi haec fabula de te non est, nota placet nos commendationes aestimare. Dic amico circuitum elit vacationibuset si probationem feliciter compleverit, centuplum ex centum milibus rublorum recipies.

Source: www.habr.com