03 Jan/11
Kategorier: PHP, Exempel, Prestanda
Varför hämta filer parallellt?
I normala fall när du surfar runt på webben så hanterar webbläsaren alla nerladdningar. Alla moderna webbläsare hämtar de filer (CSS, JavaScript, osv) som finns på en webbplats parallellt. Dvs, alla filer hämtas samtidigt istället för att nerladdningarna ska behöva vänta på varandra innan de kan börja.
Låt säga att du hämtar information från andra webbplatser för att lagra och sedan presentera den på din egna webbplats. Ett exempel kan vara affiliatenätverk, som ofta erbjuder information om produkter via XML-filer. Här kan det vara trevligt att hämta all data parallellt för att snabba upp processen.
(läs hela artikeln)
Permalink
Gå till toppen
26 Dec/10
Kategorier: PostgreSQL, Prestanda
Vad är Fulltext sök?
Fulltext sök är en funktion som erbjuder möjligheten att söka i en tabell och hitta de rader som matchar en specifik fråga. Fulltext låter dig även ranka resultatet efter vilket relevans och likhet frågan har till texten man söker i.
Fulltext sök låter dig göra en mer fördjupad sökning än vanliga funktioner så som LIKE, som enbart söker efter ett ord eller en fras i texten. LIKE är dessutom väldigt prestandakrävande eftersom den inte använder något index, utan måste gå igenom alla rader i tabellen vid varje sökning.
(läs hela artikeln)
Permalink
Gå till toppen
23 Dec/10
Kategorier: PHP, MySQL, Prestanda
Använd inte ORDER BY RAND() om du har många rader i tabellen
För att få ut 10 rader i slumpad ordning från en tabell i MySQL så använder man väldigt ofta funktionen ORDER BY RAND() ihop med LIMIT:
SELECT uid, username, passwd FROM users ORDER BY RAND() LIMIT 10;
Detta är ingen fara så länge det handlar om mindre data (~250 rader) men vad händer om du ställer samma fråga till en tabell med 25000 rader? Då kommer MySQL generera 25000 slumpade tal, vilket är ganska så tungt ur prestandasynpunkt. Därefter behöver MySQL sortera dessa 25000 tal för att veta vilket tal som är lägst, vilket också är tungt då MySQL skapar temporära tabeller för detta.
(läs hela artikeln)
Permalink
Gå till toppen
11 Dec/10
Kategorier: Webb, Prestanda, JavaScript
För några dagar sedan läste jag en artikel som Jonas Lejon hade länkat på Twitter. Artikeln handlade om hur JavaScript laddas av olika webbläsare och hur externa JavaScript kan bli en flaskhals för hur din webbplats laddas.
Normalt laddar jag mina JavaScript i <head>-taggen och har inte reflekterat över detta eftersom dagens moderna webbläsare hämtar alla externa filer parallellt. Problemet är dock inte att hämta filerna parallellt utan att webbläsaren väntar helt med att rendrera någon HTML-kod förrens allt i <head>-taggen har laddats klart, oavsett om både HTML och CSS redan laddats klart tidigare.
(läs hela artikeln)
Permalink
Gå till toppen
08 Dec/10
Kategorier: PHP, Webb, Exempel, NoSQL, Prestanda
Vad är memcached?
memcached är en server som enkelt låter dig lagra data i minnet för ökad prestanda. Memcache utvecklades ursprungligen av Brad Fitzpatrick åt LiveJournal 2003, men används idag av flera stora webbplatser så som Facebook, Twitter, YouTube, Reddit och många fler.
Tanken med att lagra data i minnet är att minska belastningen på den databasserver som blir flaskhalsen på en större webbplats. Många webbplatser idag har dynamiskt innehåll som sällan eller kanske till och med aldrig förändras. Ett exempel kan vara en lista med länkar som visas i footern på varje sida över hela webbplatsen. Dessa sparas så klart i en databas så en administratör enkelt kan lägga till och ta bort länkar då det behövs. Även om de ändras väldigt sällan så måste de fortfarande hämtas från databasservern för varenda sidvisning.
(läs hela artikeln)
Permalink
Gå till toppen
05 Dec/10
Kategorier: Server, Exempel, MySQL, Prestanda
Montera dina filsystem med noatime
En av de största flaskhalsarna när det kommer till större databaser är självklart disken. Om din server har mycket aktivitet mot disken kommer självklart även MySQL att drabbas. En sak som kan vara bra då är att montera det filsystem där din MySQL-data lagras med noatime. Faktum är att du egentligen kan montera alla dina filsystem (ext2, ext3, ext4, ufs, ufs2, m.fl) med noatime.
Utan noatime så kommer ditt filsystemet att uppdatera inoder för alla filer som används och uppdatera tiden som anger när filen senast användes. Dvs, utan noatime kommer ditt filsystem skriva till disken varje gång du läser en fil, mapp, osv.
(läs hela artikeln)
Permalink
Gå till toppen
02 Nov/10
Kategorier: PostgreSQL, MySQL, Prestanda
Hexadecimalt
För ett tag sedan bestämde jag mig för att indexera 30 miljoner MD5 och SHA1 hashar i en databas. Syftet var såklart att skapa en databas för att kunna översätta en MD5 eller SHA1 hash till det ursprungliga ordet. Detta kallas för "Space-Time Trade Off"-attack och innebär att man gör alla tyngre beräkningar innan och sparar resultatet på disk. Dvs, man offrar diskutrymme för att kunna spara in tid vid ett senare tillfälle.
Då jag planerade att lagra en större mängd hashar i en sökbar databas, så ville jag självklart spara så mycket diskutrymme som möjligt. Den första och kanske mest självklara ändringen var att inte använda UTF-8, eftersom det tar dubbelt så mycket utrymme. Det andra sättet att spara utrymme var att spara den binära representationen av hashen istället för den hexadecimala. Det är detta som jag förklarar lite närmare nedan.
(läs hela artikeln)
Permalink
Gå till toppen