How Much Math Do You Need To Know For Javascript 40/sec to 500/sec

You are searching about How Much Math Do You Need To Know For Javascript, today we will share with you article about How Much Math Do You Need To Know For Javascript was compiled and edited by our team from many sources on the internet. Hope this article on the topic How Much Math Do You Need To Know For Javascript is useful to you.

40/sec to 500/sec

Introducció

Sorprès, pel títol? Bé, aquest és un recorregut per com vam trencar el problema de l’escalabilitat de manejar uns escassos 40 registres per segon a 500 registres per segon. Aneu amb compte, la majoria dels problemes als quals vam enfrontar-nos eren senzills, de manera que les persones amb experiència poden trobar-ho superflu.

Continguts

* 1.0 On érem?

1.1 La memòria arriba al cel

1.2 Baixa taxa de processament

1.3 Pèrdua de dades 🙁

1.4 Mysql ens tira cap avall

1.5 Client web lent

* 2.0 Road to Nirvana

2.1 Controlant la memòria!

2.2 Racionalització de la taxa de processament

2.3 Quina pèrdua de dades uh-uh?

2.4 Ajustar les consultes SQL

2.5 Ajustar l’esquema de la base de dades

2.5 Mysql ens ajuda a tirar endavant!

2.6 Client web més ràpid… més ràpid

* 3.0 Línia de fons

On érem?

Inicialment teníem un sistema que només podia escalar fins a 40 registres/s. Fins i tot podia recordar la discussió sobre “quina hauria de ser la taxa ideal de registres?”. Finalment vam decidir que 40/s era la velocitat ideal per a un únic tallafoc. Així, quan hem de sortir, almenys havíem de suportar 3 tallafocs. Per tant, vam decidir que 120/s seria la taxa ideal. A partir de les dades dels nostres competidors, vam arribar a la conclusió que podrien suportar uns 240/s. Vam pensar que estava bé! ja que era el nostre primer llançament. Perquè tots els competidors van parlar del nombre de tallafocs que suportava, però no de la taxa.

La memòria arriba al cel

La nostra memòria sempre estava colpejant el cel fins i tot amb 512 MB! (Excepció OutOfMemory) Vam culpar a cewolf(s) a l’emmagatzematge en memòria cau de les imatges generades. Però no vam poder escapar durant molt de temps! No importava si connectàvem al client o no, solíem colpejar el cel en un parell de dies màxim 3-4 dies plans! Curiosament, això era reproduïble quan vam enviar dades a velocitats molt altes (aleshores), d’uns 50/s. Ho heu endevinat bé, un buffer il·limitat que creix fins que arriba al sostre.

Baixa taxa de processament

Estàvem processant registres a una velocitat de 40/s. Estàvem fent servir l’actualització massiva dels objectes de dades. Però no va donar la velocitat esperada! A causa d’això, vam començar a acumular dades a la memòria, donant lloc a l’acumulació de memòria!

Pèrdua de dades 🙁

A velocitats molt altes ens perdíem molts paquets. Semblava que teníem poca pèrdua de dades, però això va provocar una pèrdua de memòria. En alguns ajustaments per limitar la mida de la memòria intermèdia, vam començar a tenir una pèrdua de dades constant d’un 20% a taxes molt altes.

Mysql ens tira cap avall

Ens enfrontàvem a un moment difícil quan vam importar un fitxer de registre d’uns 140 MB. Mysql va començar a acaparar-se, la màquina va començar a rastrejar i, de vegades, fins i tot va deixar de respondre. Sobretot, vam començar a tenir punts morts i temps d’espera de transaccions. El que finalment va reduir la capacitat de resposta del sistema.

Client web lent

Aquí de nou vam culpar el nombre de gràfics que vam mostrar en una pàgina com el coll d’ampolla, ignorant el fet que hi havia molts altres factors que estaven tirant cap avall el sistema. Les pàgines solien trigar 30 segons a carregar-se per a una pàgina amb 6-8 gràfics i taules després de 4 dies a Internet Data Center.

Camí al Nirvana

Controlant la memòria!

Vam intentar posar un límit a la mida del buffer de 10.000, però no va durar gaire. El principal defecte del disseny va ser que vam suposar que el buffer d’uns 10.000 n’hi hauria prou, és a dir, processaríem els registres abans que arribés el buffer de 10.1000. D’acord amb el principi “Alguna cosa pot sortir malament, sortirà malament!” va sortir malament. Hem començat a perdre dades. Posteriorment vam decidir optar per una memòria cau basada en fitxers plans, on les dades s’abocaven al fitxer pla i es carregarien a la base de dades mitjançant “carregar fitxers de dades”. Això va ser moltes vegades més ràpid que una inserció massiva mitjançant el controlador de base de dades. és possible que també vulgueu comprovar algunes optimitzacions possibles amb el fitxer de dades de càrrega. Això va solucionar el nostre problema d’augmentar la mida del buffer dels registres en brut.

El segon problema que vam enfrontar va ser l’augment de cewolf(s) en el mecanisme de memòria cau. De manera predeterminada, utilitzava “TransientSessionStorage” que emmagatzema els objectes d’imatge a la memòria, semblava que hi havia algun problema en netejar els objectes, fins i tot després que es perdessin les referències! Així que vam escriure una petita implementació “FileStorage” que emmagatzema els objectes d’imatge al fitxer local. A més, també hem implementat un mecanisme de neteja per netejar imatges obsoletes (imatges de més de 10 minuts).

Un altre aspecte interessant que vam trobar aquí va ser que el col·lector d’escombraries tenia la prioritat més baixa, de manera que els objectes creats per a cada registre gairebé no es netejaven. Aquí teniu una mica de matemàtiques per explicar la magnitud del problema. Sempre que rebem un registre de registre, vam crear ~ 20 objectes (mapa hash, cadenes tokenitzades, etc.), de manera que a una velocitat de 500/s durant 1 segon, el nombre d’objectes era de 10.000 (20*500*1). A causa del gran processament, el col·lector d’escombraries mai va tenir l’oportunitat de netejar els objectes. Així que tot el que hem hagut de fer era un petit retoc, només hem assignat “nul” a les referències d’objectes. Voila! el recol·lector d’escombraries mai va ser torturat suposo 😉

Racionalització de la taxa de processament

La velocitat de processament era d’uns minsos 40/s, el que significa que difícilment podríem suportar ni tan sols un petit esclat de registres! El control de memòria ens va donar una mica de consol, però el problema real va ser amb l’aplicació dels filtres d’alerta sobre els registres. Teníem unes 20 propietats per a cada registre, solíem cercar totes les propietats. Hem canviat la implementació perquè coincideixi amb aquelles propietats per les quals teníem criteris! A més, també vam tenir una fuga de memòria en el processament del filtre d’alerta. Vam mantenir una cua que va créixer per sempre. Així doncs, vam haver de mantenir un objecte d’abocament d’arxiu pla per evitar la reanàlisi dels registres per formar objectes! A més, solíem fer l’acció de cercar una coincidència per a cadascuna de les propietats fins i tot quan no teníem criteris d’alerta configurats.

Quina pèrdua de dades eh-uh?

Un cop solucionem els problemes de memòria en rebre dades, és a dir, abocament a un fitxer pla, mai hem perdut les dades! A més d’això, vam haver d’eliminar un parell d’índexs no desitjats a la taula en brut per evitar la sobrecàrrega mentre s’abocaven dades. Teníem índexs per a columnes que podien tenir un màxim de 3 valors possibles. La qual cosa va fer que la inserció fos més lenta i no va ser útil.

Ajust de consultes SQL

Les vostres consultes són les claus del rendiment. Un cop comenceu a resoldre els problemes, veureu que fins i tot potser haureu de desnormalitzar les taules. Ho hem fet! Aquests són alguns dels aprenentatges clau:

* Utilitzeu “Analitzar taula” per identificar com funciona la consulta mysql. Això us donarà una idea de per què la consulta és lenta, és a dir, si utilitza els índexs correctes, si utilitza una exploració a nivell de taula, etc.

* No suprimiu mai files quan tracteu grans dades de l’ordre de 50.000 registres en una sola taula. Intenteu sempre fer una “taula caiguda” tant com sigui possible. Si no és possible, redissenyeu el vostre esquema, aquesta és la vostra única sortida!

* Eviteu les unions no desitjades, no tingueu por de desnormalitzar (és a dir, duplicar els valors de la columna) Eviteu les unions tant com sigui possible, tendeixen a tirar la vostra consulta cap avall. Un avantatge ocult és el fet que imposen simplicitat a les vostres consultes.

* Si esteu tractant amb dades massives, feu servir sempre “carrega el fitxer de dades” aquí hi ha dues opcions, local i remota. Utilitzeu local si el mysql i l’aplicació es troben a la mateixa màquina, en cas contrari, utilitzeu el control remot.

* Intenteu dividir les vostres consultes complexes en dues o tres consultes més senzilles. Els avantatges d’aquest enfocament són que el recurs mysql no s’acumula durant tot el procés. Acostuma a utilitzar taules temporals. En lloc d’utilitzar una sola consulta que s’estén entre 5 i 6 taules.

* Quan tracteu una gran quantitat de dades, és a dir, voleu processar, per exemple, 50.000 registres o més en una sola consulta, proveu d’utilitzar el límit per processar els registres per lots. Això us ajudarà a escalar el sistema a noves altures

* Utilitzeu sempre transaccions més petites en comptes de grans, és a dir, abastant “n” taules. Això bloqueja els recursos mysql, la qual cosa pot provocar lentitud del sistema fins i tot per a consultes senzilles

* Utilitzeu join(s) a columnes amb índexs o claus externes

* Assegureu-vos que les consultes de la interfície d’usuari tinguin criteris o límit.

* Assegureu-vos també que la columna de criteris estigui indexada

* No tingueu el valor numèric dels criteris sql entre cometes, perquè mysql fa una emissió de tipus

* Utilitzeu taules temporals tant com sigui possible i deixeu-les anar…

* La inserció de seleccionar/eliminar és un doble bloqueig de taula… tingueu en compte…

* Tingueu cura de no afectar la base de dades mysql amb la freqüència de les actualitzacions de la base de dades. Teníem un cas típic que acostumem a bolcar a la base de dades després de cada 300 registres. Així, quan vam començar a provar 500/seg, vam començar a veure que el mysql ens arrossegava literalment cap avall. Va ser llavors quan ens vam adonar que el típic a una velocitat de 500/s hi ha una sol·licitud de “càrrega de dades a l’arxiu” cada segon a la base de dades mysql. Així que vam haver de canviar per abocar els registres després de 3 minuts en lloc de 300 registres.

Ajustant l’esquema de la base de dades

Quan tracteu una gran quantitat de dades, assegureu-vos sempre que particioneu les vostres dades. Aquest és el vostre camí cap a l’escalabilitat. Una única taula amb, per exemple, 10 lakhs no pot escalar mai. Quan teniu intenció d’executar consultes per als informes. Tingueu sempre dos nivells de taules, taules en brut, una per a les dades reals i una altra per a les taules d’informes (les taules a les quals consulten les interfícies d’usuari!) Assegureu-vos sempre que les dades de les vostres taules d’informes no superin mai un límit. Si teniu previst utilitzar Oracle, podeu provar la partició segons criteris. Però, malauradament, mysql no és compatible amb això. Així ho haurem de fer. Mantingueu una metataula en la qual tingueu la informació de la capçalera, és a dir, quina taula cal cercar, per a un conjunt de criteris donats normalment el temps.

* Vam haver de recórrer l’esquema de la nostra base de dades i vam afegir per afegir alguns índexs, esborrar-ne algunes i fins i tot columnes duplicades per eliminar les costoses unions.

* A partir d’ara ens vam adonar que tenir les taules en brut com a InnoDB era en realitat una sobrecàrrega per al sistema, així que el vam canviar a MyISAM

* També vam arribar a reduir el nombre de files a les taules estàtiques implicades en les unions

* NULL a les taules de la base de dades sembla causar algun cop de rendiment, així que eviteu-los

* No tenen índexs per a columnes que tinguin valors permesos de 2 a 3

* Comproveu la necessitat de cada índex de la vostra taula, són costosos. Si les taules són d’InnoDB, comproveu-ne la necessitat. Perquè les taules InnoDB semblen tenir entre 10 i 15 vegades la mida de les taules MyISAM.

* Utilitzeu MyISAM sempre que hi hagi una majoria de consultes (seleccioneu o inseriu). Si la inserció i la selecció seran més, és millor tenir-la com a InnoDB

Mysql ens ajuda a tirar endavant!

Ajusteu el vostre servidor mysql NOMÉS després d’ajustar les vostres consultes/esquemes i el vostre codi. Només llavors es pot veure una millora perceptible en el rendiment. Aquests són alguns dels paràmetres que són útils:

* Utilitzeu la mida del grup de memòria intermèdia que permetrà que les vostres consultes s’executin més ràpidament –innodb_buffer_pool_size=64M per a InnoDB i utilitzeu –key-bufer-size=32M per a MyISAM

* Fins i tot les consultes senzilles van començar a trigar més temps del previst. En realitat estàvem desconcertats! Ens vam adonar que mysql sembla carregar l’índex de qualsevol taula on comenci a inserir-se. Per tant, el que passava normalment era que qualsevol consulta senzilla a una taula amb 5-10 files trigava entre 1 i 2 segons. Després d’una anàlisi més detallada, vam trobar que just abans de la simple consulta , es va produir “carregar fitxers de dades”. Això va desaparèixer quan vam canviar les taules en brut al tipus MyISAM, perquè la mida del buffer per a innodb i MyISAM són dues configuracions diferents.

per a més paràmetres configurables, vegeu aquí.

Consell: inicieu el vostre mysql per començar amb l’opció següent –log-error, això habilitarà el registre d’errors

Client web més ràpid… més ràpid

La interfície d’usuari és la clau de qualsevol producte, sobretot la velocitat percebuda de la pàgina és més important! Aquí teniu una llista de solucions i aprenentatges que poden ser útils:

* Si les vostres dades no canviaran durant 3-5 minuts, per exemple, és millor emmagatzemar a la memòria cau les pàgines laterals del client

* Acostumen a utilitzar Iframe(s) per a gràfics interiors, etc., donen una percepció de solidesa a les vostres pàgines. Millor encara utilitzar el mecanisme de càrrega de contingut basat en Javascript. Això és una cosa que potser voldreu fer quan tingueu més de 3 gràfics a la mateixa pàgina.

* Internet Explorer només mostra tota la pàgina quan tot el contingut es rep del servidor. Per tant, és recomanable utilitzar iframes o javascript per carregar contingut.

* No utilitzeu mai entrades múltiples/duplicades del fitxer CSS a la pàgina html. Internet Explorer tendeix a carregar cada fitxer CSS com una entrada independent i s’aplica a la pàgina completa!

Linia inferior

Les vostres consultes i l’esquema fan que el sistema sigui més lent! Arregleu-los primer i després culpeu la base de dades!

Vegeu també

* Mysql d’alt rendiment

* Rendiment de consultes

* Explica la consulta

* Optimització de consultes

* Afinació d’InnoDB

* Ajustant Mysql

Categories: Analitzador de tallafocs | Consells de rendiment

Aquesta pàgina es va modificar per darrera vegada a les 18:00 del 31 d’agost de 2005.

Video about How Much Math Do You Need To Know For Javascript

You can see more content about How Much Math Do You Need To Know For Javascript on our youtube channel: Click Here

Question about How Much Math Do You Need To Know For Javascript

If you have any questions about How Much Math Do You Need To Know For Javascript, please let us know, all your questions or suggestions will help us improve in the following articles!

The article How Much Math Do You Need To Know For Javascript was compiled by me and my team from many sources. If you find the article How Much Math Do You Need To Know For Javascript helpful to you, please support the team Like or Share!

Rate Articles How Much Math Do You Need To Know For Javascript

Rate: 4-5 stars
Ratings: 1612
Views: 51011139

Search keywords How Much Math Do You Need To Know For Javascript

How Much Math Do You Need To Know For Javascript
way How Much Math Do You Need To Know For Javascript
tutorial How Much Math Do You Need To Know For Javascript
How Much Math Do You Need To Know For Javascript free
#40sec #500sec

Source: https://ezinearticles.com/?40/sec-to-500/sec&id=65578

Related Posts

How Many School Allow Students Use Calculators In Math Class http://webcache.googleusercontent.com/search?q=cache:https%3A%2F%2Fezinearticles.com%2F%3FReport-Card-Comments%26id%3D3524667

You are searching about How Many School Allow Students Use Calculators In Math Class, today we will share with you article about How Many School Allow Students…

How To Ask Students To Draw A Picture For Math Three Ways to Improve Learning Readiness Through Play

You are searching about How To Ask Students To Draw A Picture For Math, today we will share with you article about How To Ask Students To…

How Much You Charge For Taking An Online Math Class Making Money Online – The New Way to Get Rich Quick

You are searching about How Much You Charge For Taking An Online Math Class, today we will share with you article about How Much You Charge For…

How Many Hours Do You Get In A Crative Math Turning a Band Into Songwriters – 10 Songs In One Hour

You are searching about How Many Hours Do You Get In A Crative Math, today we will share with you article about How Many Hours Do You…

How To Get A Better Math Score On The Act 7 Trouble-Free Tips About How To Study For The ACT

You are searching about How To Get A Better Math Score On The Act, today we will share with you article about How To Get A Better…

How Many Got A Perfect Math Act Score This Year Expect with Confidence

You are searching about How Many Got A Perfect Math Act Score This Year, today we will share with you article about How Many Got A Perfect…