Labarin goge bayanan mutum miliyan 300 a zahiri a cikin MySQL

Gabatarwar

Sannu. Ni ningenMe, mai haɓaka gidan yanar gizo.

Kamar yadda taken ya ce, labarina shine labarin share bayanan miliyan 300 a zahiri a cikin MySQL.

Na yi sha'awar wannan, don haka na yanke shawarar yin tunatarwa (umarni).

Gida - Fadakarwa

Sabar sabar da nake amfani da ita da kulawa tana da tsari na yau da kullun wanda ke tattara bayanan watan da ya gabata daga MySQL sau ɗaya a rana.

Yawanci ana kammala wannan tsari a cikin kimanin awa 1, amma a wannan karon ba a kammala ba har tsawon awanni 7 ko 8, kuma faɗakarwar ba ta daina fitowa ba.

Neman dalili

Na yi ƙoƙari na sake farawa tsarin kuma in duba rajistan ayyukan, amma ban ga wani abu ba daidai ba.
An yi lissafin tambayar daidai. Amma lokacin da na yi tunani game da abin da ke faruwa ba daidai ba, na gane cewa girman bayanan yana da girma sosai.

hoge_table | 350'000'000 |

350 miliyan records. Fihirisar da alama tana aiki daidai, a hankali sosai.

Tarin bayanan da ake buƙata kowane wata ya kasance kusan bayanan 12. Yana kama da zaɓin umarni ya ɗauki lokaci mai tsawo kuma ba a aiwatar da ciniki na dogon lokaci ba.

DB

Ainihin tebur ne wanda ke girma da kusan shigarwar 400 kowace rana. Ya kamata ma'ajiyar bayanai ta tattara bayanai ne kawai a watan da ya gabata, saboda haka, ana tsammanin za ta iya jure wa daidai wannan adadin bayanai, amma, abin takaici, ba a haɗa aikin juyawa ba.

Ba ni ne ya samar da wannan bayanan ba. Na karɓi shi daga wani mai haɓakawa, don haka har yanzu yana jin kamar bashin fasaha.

Akwai lokacin da adadin bayanan da ake sakawa yau da kullun ya yi girma kuma a ƙarshe ya kai iyakarsa. An ɗauka cewa lokacin aiki tare da irin wannan babban adadin bayanai, zai zama dole a raba su, amma wannan, rashin alheri, ba a yi ba.

Daga nan kuma na fara aiki.

Gyara

Ya fi dacewa don rage girman ma'aunin bayanai da kansa da rage lokacin sarrafa shi fiye da canza ma'anar kanta.

Ya kamata lamarin ya canza sosai idan kun goge bayanan miliyan 300, don haka na yanke shawarar yin hakan ... Eh, Ina tsammanin wannan tabbas zai yi aiki.

Aiki 1

Bayan na shirya amintaccen madadin, a ƙarshe na fara aika buƙatun.

''Aika bukata''

DELETE FROM hoge_table WHERE create_time <= 'YYYY-MM-DD HH:MM:SS';

"..."

"..."

“Hmm...Ba amsa. Wataƙila tsarin ya ɗauki lokaci mai tsawo?” - Na yi tunani, amma kawai idan, na kalli grafana na ga cewa nauyin diski yana girma da sauri.
"Mai haɗari," na sake tunani kuma nan da nan na dakatar da buƙatar.

Aiki 2

Bayan nazarin komai, sai na gane cewa adadin bayanan ya yi girma da yawa don share komai a lokaci guda.

Na yanke shawarar rubuta rubutun da zai iya goge bayanan kusan 1 kuma na ƙaddamar da shi.

"Na aiwatar da rubutun"

"Yanzu wannan tabbas zai yi aiki," na yi tunani.

Aiki 3

Hanya ta biyu ta yi aiki, amma ta zama mai aiki sosai.
Don yin komai a hankali, ba tare da jijiyoyi ba, zai ɗauki kimanin makonni biyu. Amma duk da haka, wannan yanayin bai cika buƙatun sabis ba, don haka dole ne mu ƙaura daga gare ta.

To ga abin da na yanke shawarar yi:

Kwafi teburin kuma sake suna

Daga mataki na baya, na gane cewa share irin wannan babban adadin bayanai yana haifar da babban nauyi daidai. Don haka na yanke shawarar ƙirƙirar sabon tebur daga karce ta amfani da sakawa da matsar da bayanan da zan goge a ciki.

| hoge_table     | 350'000'000|
| tmp_hoge_table |  50'000'000|

Idan kun sanya sabon tebur ɗin girman daidai da na sama, saurin sarrafa bayanai shima yakamata ya zama 1/7 cikin sauri.

Bayan ƙirƙirar tebur kuma na sake sanya shi, na fara amfani da shi azaman tebur mai mahimmanci. Yanzu idan na sauke tebur tare da rikodin miliyan 300 komai ya kamata ya yi kyau.
Na gano cewa yanke ko sauke yana haifar da ƙasa da sama fiye da sharewa kuma na yanke shawarar amfani da wannan hanyar.

Ayyuka

''Aika bukata''

INSERT INTO tmp_hoge_table SELECT FROM hoge_table create_time > 'YYYY-MM-DD HH:MM:SS';

"..."
"..."
"Em...?"

Aiki 4

Ina tsammanin ra'ayin da ya gabata zai yi aiki, amma bayan aika buƙatar sakawa, kurakurai da yawa sun bayyana. MySQL ba ya gafartawa.

Na riga na gaji har na fara tunanin cewa ba na son yin wannan kuma.

Na zauna na yi tunani na gane cewa kila akwai tambayoyin sakawa da yawa na lokaci guda...
Na yi ƙoƙarin aika buƙatun saka don adadin bayanan da ya kamata rumbun adana bayanai ya aiwatar a cikin kwana 1. Ya faru!

To, bayan haka muna ci gaba da aika buƙatun na adadin bayanai iri ɗaya. Tun da muna buƙatar cire bayanan darajar wata ɗaya, muna maimaita wannan aikin kusan sau 35.

Sake suna tebur

Anan sa'a ta kasance a gefena: komai ya tafi daidai.

Faɗakarwa ta ɓace

Gudun sarrafa tsari ya ƙaru.

A baya wannan tsari ya ɗauki kusan awa ɗaya, yanzu yana ɗaukar kusan mintuna 2.

Bayan na tabbata cewa an warware duk matsalolin, na jefar da bayanan miliyan 300. Na share teburin na ji an sake haihuwa.

Takaitawa

Na gane cewa sarrafa juyi ya ɓace a cikin sarrafa batch, kuma wannan ita ce babbar matsalar. Irin wannan kuskuren gine-gine yana haifar da ɓata lokaci.

Kuna tunani game da kaya yayin kwafin bayanai lokacin share bayanai daga ma'ajin bayanai? Kada mu yi lodin MySQL.

Wadanda suka kware a cikin bayanan bayanan ba shakka ba za su fuskanci irin wannan matsala ba. Ga sauran ku, ina fata wannan labarin ya kasance mai amfani.

Na gode da karantawa!

Za mu yi farin ciki sosai idan kun gaya mana ko kuna son wannan labarin, ko fassarar ta bayyana, ko tana da amfani a gare ku?

source: www.habr.com

Add a comment