Jump to content
php.lv forumi

Par 1 000 000 teksta gabalu glabaashanu


Toms

Recommended Posts

Nu tad kaa tagad dariit? ieksh FS vai DB?

 

Droshi vien, ka DB?

 

 

OK, tjip 100 000 lietotaji, katram ieejoshaas un izejoshaas veestules. Nu tjip kaa draugiem.lv

Kaa labaak glabaat?

 

DB1

Table1 (user table)

id

login

pass

 

Table2 (inbox)

id

user_id

msg

from

when

 

taads pats arii outbox.

 

Shitaa der? ja veestules ir 1 000 000?? Tak baigi lielaa tabula sanaak!! Tjip tai tabulaa veestules sameetaatas un lai sadabutu viena usera visas msg, jaapanjem visi user_id. Kaa savaadak?

 

Veel variants - katram useram atsevishkja tabula ar veestuleem (gan inbox, gan outbox).

 

Bet sanaak DB ar ljoti daudz tabulaam....

 

Kaadi varianti?

Link to comment
Share on other sites

  • Replies 62
  • Created
  • Last Reply

Top Posters In This Topic

Tu laikam neiebrauci jautaajumaa.

 

Man vajag zinaat, kuraa no variantiem datubaaze straadaa aatraak, skaidrs?

 

Ja ir viena tabula ar 10 000 000 ierakstiem (vajadziigaa info tabulaa izmeetaata visur kur - tjip taa infa, ko panjemu ar vinu qveriju.) vai viena DB ar 1000 tabulaam, katraa pa 10k ierakstiem (un qverijs njem taadaa pashaa veidaa infu kaa pirmajaa variantaa).

 

 

off-topic to Klez: Spregaataajs atradies, laikam kaadreiz agraak Tevi taapat lamaaja kaa mani tagad centies salamaat. Da nejau kodu vai ko es te prasu, mazais indiviid! Prasu tieshi to, ko shaada tipa forumos ir jaaprasa.

Un atbilde Tav ljoti izsmeljosha - info ieksh DB. Da johaidii, kur taadi rodas!!!! :angry:

Link to comment
Share on other sites

nesapratu kapec inbox un autbox katru sava tabula gribi glabat, vai nepietiek ar vienu tabulu kura glabaa `from` un `to`, un ja gribi izplust ar veel visadiem folderiem (draugi, nedraugi, sievasmate utt) tad liec taja pasaa msg`inga tabula lauku prieksh foldera id.

 

katram userim (t,i. 1000+cik tur taas nulles bija )pa tabulai sataisis nenormali daudz failus ieks viena foldera (mysql un lidzigu db gadijumaa, kas db viena folderii glabaa) un paradisies vellielaka bremze tiesi uz tabulas nolasisanu no diska neka selektet pa lielu tabulu ar pareiziem indexiem un optimalu selectu.

 

vislabaak imho butu vecos (tos kurus gandriz neviens nelasis) messidzus pardzit uz kadu archiva tabulu.

Link to comment
Share on other sites

Un ja taa viena tabula baaaaigi lielaa ap 10 000 000 ierakstu? Nebuus bremzes? Nu tjip aatraaks variants nava?

 

Un ja man messidzu atlasiishana notiktu peec user_id, tjip savaac visus messigus ar viena usera id no taaas milzoniigaas tabulas, kuraa nav peec kaartas tie visi vajadziigie ID...

Link to comment
Share on other sites

situaacija(reaala). tabula ar ~ 50,000 ieraxtiem (54.000)

lai atlasiitu vienu ierakstu randomaa un pievienotu divus jaunus klaat.

laiks: ~0.8 sekundes (viena query apjoms ~ 300 bytes)

 

serveris:

CPU = AMD 64 bit 2.0 GHz

ram = 512 MB

HDD = SCSI 10.000

Link to comment
Share on other sites

njaa, tad jau tie ljimoni sanaak tereetiski 2,6 minuutes taada veida query...

 

Hmm, man nav skaidriibas par to KEY, tjip ar shito vajadzeetu straadaat aatraak? Indeksaacija keshoshana kaut kaada shtolji..?

 

A kaa tad tie draugiem.lv sataisiijushi? TUr tak jaabuut arii ahuunajiem ljimoniem veestulju! 200 000 * apm 100 = 20 000 000 <- noteikti ka vairaak...

 

 

Vairs nav ideju?

Link to comment
Share on other sites

njaa, tad jau tie ljimoni sanaak tereetiski 2,6 minuutes taada veida query...
Kā tu to izrēķināji? Un vai tad tev tik ļoti nepieciešams būs ierakstus atlasīt randomā, kas noteikti ir daudz lēnāk, nekā pēc indeksēta lauka!
Link to comment
Share on other sites

A kaa tad tie draugiem.lv sataisiijushi? TUr tak jaabuut arii ahuunajiem ljimoniem veestulju! 200 000 * apm 100 = 20 000 000 <- noteikti ka vairaak...

draugiem vairs neizmanto rdbms vēstuļu glabāšanai / apstrādei..

 

Bet kas attiecas uz datiem istenībā dabūt datus tabulā un tos noselectēt ir tikai viena puse, pavisam citas galvas sāpes sākas, kad jāsāk domāt par konkurentiem insertiem / updeitiem. šeit ir viens no iemesliem kapēc dalīšana pa tabulām (katram lietotājam pa vienai protams pa traku, taču kaut kādus apgabalus izveidot var) ir efektīvāka. Jo vismaz MySQL MyISAMi tabulu gadijumā tādējādi netiek nolockota pilnīgi visi dati bet gan tikai daļa. Protams var lietot InnoDB ar row-level lockingu, bet MyISAMi ir ātrāki SELECTos.

 

Piekam izpildot vienreiz vienu kveriju un paskatoties tā izpildes laiku ir kaut kas viens, bet palaižot konkurentus 100, kas pilnīgi cits..

Link to comment
Share on other sites

Njaa.. triis varianti ieshaavaas pieree..

 

1) viena DB un tabulas saliktas peec alfabeeta - tjip use_login, kas saakas ar burtu A ir zem table_a, B ir table_b u.t.t. liidz Z.

 

2) viena DB un tabulaas noteikts daudzums, teiksim 1 000 000 ieraksti. kaa tiek liidz ljimonam, taa jaunu tabulu uztaisa...

 

3) taads pats kaa pirmais variants, tikai: vienaa DB tabulas ar sakuam burtiem A - F, otra DB (mosh uz cita servaka) ar burtiem G - M u.t.t.

 

Nus, kaadas domas? <_<

Link to comment
Share on other sites

Manuprāt pirmais variants ir visprātīgākais, jo tādējādi tu vienmēr zini kurā tabulā glabājas lietotāja dati, kur pretēji otrajā - tev nāksies pārlasīt visas tabulas.

Trešais ir ķēpigāks no tā viedokļa ka tev papildus jāskatās vai piemēram C ir starp A-F vai kur citur.

Link to comment
Share on other sites


×
×
  • Create New...