🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
13 messages
13 total messages Started by M.M. Mon, 29 Jun 2015 14:42
wydajność memcached vs homemade-php
#231064
Author: M.M.
Date: Mon, 29 Jun 2015 14:42
14 lines
1763 bytes
Miałem doraźny problem z wydajnością zapytań SQL. Na szybko
napisałem swój bufor w PHP. W odpowiednim destruktorze 
bufor jest zapisywany na dysku, a w konstruktorze jest
z tegoż dysku wyczytywany. Jeśli coś jest w buforze, to 
nie trzeba pytać bazy - metoda prosta jak imadło.

Po czasie pliki zapisywane na dysku zrobiły się duże.
Myślę sobie, że i tak i tak będę musiał do czegoś innego
używać memcached, więc przerobię doraźną samoróbkę na 
profesjonalne rozwiązanie. Niestety po teście wyszedł zonk, 
samoróbka działa 10 razy szybciej niż profesjonalne 
rozwiązanie.

Czyżby memcached mialo taki ogromny narzut?
Re: wydajność memcached vs homemade-php
#231065
Author: Borys Pogoreło
Date: Wed, 01 Jul 2015 17:48
20 lines
1612 bytes
Dnia Mon, 29 Jun 2015 07:42:30 -0700 (PDT), M.M. napisał(a):

> Po czasie pliki zapisywane na dysku zrobiły się duże.
> Myślę sobie, że i tak i tak będę musiał do czegoś innego
> używać memcached, więc przerobię doraźną samoróbkę na 
> profesjonalne rozwiązanie. Niestety po teście wyszedł zonk, 
> samoróbka działa 10 razy szybciej niż profesjonalne 
> rozwiązanie.
> 
> Czyżby memcached mialo taki ogromny narzut?

Nie powinno mieć przy takim zastosowaniu jak opisujesz. Ale za mało
szczegółów podałeś, by móc powiedzieć coś więcej. "Duże pliki" są jakiej
wielkości? I czy przypadkiem OS Ci ich jakoś nie buforuje?

Samych zapytań nie da się zoptymalizować?

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Re: wydajność memcached vs homemade-php
#231066
Author: M.M.
Date: Wed, 01 Jul 2015 20:36
24 lines
2261 bytes
On Wednesday, July 1, 2015 at 7:47:36 PM UTC+2, Borys Pogoreło wrote:
> > Czyżby memcached mialo taki ogromny narzut?
> 
> Nie powinno mieć przy takim zastosowaniu jak opisujesz. 
Widocznie ma spory narzut. Albo nie umiem czegoś skonfigurować.

> Ale za mało szczegółów podałeś, by móc powiedzieć coś więcej. 
Dużo bym musiał się napisać. Czy można jakoś obliczyć czas
przetwarzania danych w oparciu o memcached? Ile czasu trwa
jedno zapytanie w zależności od warunków?


> "Duże pliki" są jakiej wielkości? I czy przypadkiem OS Ci 
> ich jakoś nie buforuje?
Na pewno buforuje je OS i na pewno są wczytywane sekwencyjnie
przy starcie skryptu. Ale to zawsze operacje dyskowe plus
parsowanie PHP (metoda unserialize). Rozmiar rzędu 30MB.


> Samych zapytań nie da się zoptymalizować?
Dużo małych insertów i selektów do bazy, rzędu 10tys w jednym
update bazy.

Pozdrawiam
Re: wydajność memcached vs homemade-php
#231075
Author: artiun
Date: Wed, 01 Jul 2015 20:53
22 lines
2420 bytes
W dniu 2015-06-29 o 16:42, M.M. pisze:
> Miałem doraźny problem z wydajnością zapytań SQL. Na szybko
> napisałem swój bufor w PHP. W odpowiednim destruktorze
> bufor jest zapisywany na dysku, a w konstruktorze jest
> z tegoż dysku wyczytywany. Jeśli coś jest w buforze, to
> nie trzeba pytać bazy - metoda prosta jak imadło.
>
> Po czasie pliki zapisywane na dysku zrobiły się duże.
> Myślę sobie, że i tak i tak będę musiał do czegoś innego
> używać memcached, więc przerobię doraźną samoróbkę na
> profesjonalne rozwiązanie. Niestety po teście wyszedł zonk,
> samoróbka działa 10 razy szybciej niż profesjonalne
> rozwiązanie.
>
> Czyżby memcached mialo taki ogromny narzut?
>
wygląda to na bloga. masz pretensje do samego siebie. ntg pomijam. nie ma 
podanego silnika bd. nie ma podanych zapytań. zwykłe gadanie - sobie a muzom.


-- 
Artur
Re: wydajność memcached vs homemade-php
#231076
Author: M.M.
Date: Fri, 03 Jul 2015 11:10
21 lines
2546 bytes
On Wednesday, July 1, 2015 at 11:46:32 PM UTC+2, artiun wrote:
> W dniu 2015-06-29 o 16:42, M.M. pisze:
> > Miałem doraźny problem z wydajnością zapytań SQL. Na szybko
> > napisałem swój bufor w PHP. W odpowiednim destruktorze
> > bufor jest zapisywany na dysku, a w konstruktorze jest
> > z tegoż dysku wyczytywany. Jeśli coś jest w buforze, to
> > nie trzeba pytać bazy - metoda prosta jak imadło.
> >
> > Po czasie pliki zapisywane na dysku zrobiły się duże.
> > Myślę sobie, że i tak i tak będę musiał do czegoś innego
> > używać memcached, więc przerobię doraźną samoróbkę na
> > profesjonalne rozwiązanie. Niestety po teście wyszedł zonk,
> > samoróbka działa 10 razy szybciej niż profesjonalne
> > rozwiązanie.
> >
> > Czyżby memcached mialo taki ogromny narzut?
> >
> wygląda to na bloga. masz pretensje do samego siebie. ntg pomijam. nie ma 
> podanego silnika bd. nie ma podanych zapytań. zwykłe gadanie - sobie a muzom.

Ja mam pretensje? 
Re: wydajność memcached vs homemade-php
#231067
Author: Borys Pogoreło
Date: Sun, 05 Jul 2015 22:42
23 lines
1909 bytes
Dnia Wed, 1 Jul 2015 13:36:32 -0700 (PDT), M.M. napisał(a):

>> Ale za mało szczegółów podałeś, by móc powiedzieć coś więcej. 
>
> Dużo bym musiał się napisać. Czy można jakoś obliczyć czas
> przetwarzania danych w oparciu o memcached? Ile czasu trwa
> jedno zapytanie w zależności od warunków?

Napisz prosty skrypt z pseudo-profilerem - microtime(true) + zapis pliku do
memcached + microtime(true) + odczyt pliku z memcached + microtime(true) +
prosta arytmetyka. To samo z metodą plikową, najlepiej po restarcie
procesów serwera. Od razu będzie widać co ile trwa.

> Na pewno buforuje je OS i na pewno są wczytywane sekwencyjnie
> przy starcie skryptu. Ale to zawsze operacje dyskowe plus
> parsowanie PHP (metoda unserialize). Rozmiar rzędu 30MB.

Lekka masakra, naprawdę tego nie da się zoptymalizować? To jest coś, nad
czym warto posiedzieć i zrobić lepiej.

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Re: wydajność memcached vs homemade-php
#231068
Author: M.M.
Date: Mon, 06 Jul 2015 12:41
42 lines
3245 bytes
On Monday, July 6, 2015 at 12:42:06 AM UTC+2, Borys Pogoreło wrote:
> Dnia Wed, 1 Jul 2015 13:36:32 -0700 (PDT), M.M. napisał(a):
> 
> >> Ale za mało szczegółów podałeś, by móc powiedzieć coś więcej. 
> >
> > Dużo bym musiał się napisać. Czy można jakoś obliczyć czas
> > przetwarzania danych w oparciu o memcached? Ile czasu trwa
> > jedno zapytanie w zależności od warunków?
> 
> Napisz prosty skrypt z pseudo-profilerem - microtime(true) + zapis pliku do
> memcached + microtime(true) + odczyt pliku z memcached + microtime(true) +
> prosta arytmetyka. To samo z metodą plikową, najlepiej po restarcie
> procesów serwera. Od razu będzie widać co ile trwa.
Jeśli nie będę miał innego wyjścia, zrobię tak jak powyżej zaproponowałeś.
Zastanawiam się, czy można w miarę dokładnie oszacować ten czas, bez
pisania skryptów. 

Ile czasu powinno trwać pobranie z memcached jednej małej 
porcji danych? Weźmy np. taki scenariusz:
1) Mamy bardzo wydaje środowisko, np. program skompilowany w C++ - odpowiednik
   Twojej arytmetyki.
2) Łączymy się z serwerem.
3) Milion razy pobieramy  np. 1kb danych na podstawie klucza.
  a) serwer jest na tym samym komputerze
  b) serwer jest na innym komputerze w sieci lokalnej.
4) Rozłączamy się z serwerem.

Jakiego czasu należy się spodziewać, na dobrym sprzęcie i na dobrze
skonfigurowanym serwerze?


> > Na pewno buforuje je OS i na pewno są wczytywane sekwencyjnie
> > przy starcie skryptu. Ale to zawsze operacje dyskowe plus
> > parsowanie PHP (metoda unserialize). Rozmiar rzędu 30MB.
> 
> Lekka masakra, naprawdę tego nie da się zoptymalizować? To jest coś, nad
> czym warto posiedzieć i zrobić lepiej.

Czy da się bazę sql dyskową zoptymalizować? Raczej nie, chyba żeby włączyć
buforowanie zapisu w RAM.

Pozdrawiam
Re: wydajność memcached vs homemade-php
#231069
Author: Borys Pogoreło
Date: Mon, 06 Jul 2015 13:33
44 lines
2516 bytes
Dnia Mon, 6 Jul 2015 05:41:46 -0700 (PDT), M.M. napisał(a):

> Jeśli nie będę miał innego wyjścia, zrobię tak jak powyżej zaproponowałeś.
> Zastanawiam się, czy można w miarę dokładnie oszacować ten czas, bez
> pisania skryptów. 

Oczywiście, np. xdebug + kcachegrind, ale ja za nim nie przepadam. Choć do
szukania wąskich gardeł w większym kodzie to jedyny sensowny sposób.

> Jakiego czasu należy się spodziewać, na dobrym sprzęcie i na dobrze
> skonfigurowanym serwerze?

Jakiego dokładnie to Ci nie napiszę, ale przy milionie to zawsze będzie
zauważalne. Milion to nie jest też skala zwykłej aplikacji webowej.

Zrobiłem szybki test takim kodem:

$rand = openssl_random_pseudo_bytes(1024);
$t = microtime(true);

$m = new Memcache();
$m->addServer('localhost', 11211);
$m->set('test', $rand);

for ($i = 0; $i < 1000000; $i++)
{
    $val = $m->get('test');
}

printf('%.2f', microtime(true) - $t);

Wynik u mnie to 25.28 s. (php 5.6.10, windows)

> Czy da się bazę sql dyskową zoptymalizować? Raczej nie, chyba żeby włączyć
> buforowanie zapisu w RAM.

Zoptymalizować same zapytania. Albo przemyśleć architekturę aplikacji czy
na pewno trzeba pobierać tysiąc razy jakiś zasób - może da się pobrać
dziesięć razy dopełnienie zbioru i wyliczyć resztę? Albo zawrzeć to
wszystko w 10 zapytaniach, a resztą zajmie się baza? Itp. itd.

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Re: wydajność memcached vs homemade-php
#231070
Author: ww
Date: Mon, 06 Jul 2015 17:33
15 lines
1776 bytes
On 2015-07-06 15:33, Borys Pogoreło wrote:
>
>> Jakiego czasu należy się spodziewać, na dobrym sprzęcie i na dobrze
>> skonfigurowanym serwerze?
> Jakiego dokładnie to Ci nie napiszę, ale przy milionie to zawsze będzie
> zauważalne. Milion to nie jest też skala zwykłej aplikacji webowej.
>
> Zrobiłem szybki test takim kodem:
>
> $rand = openssl_random_pseudo_bytes(1024);
> $t = microtime(true);
>
> $m = new Memcache();
>
Czy mi się wydaje czy memcache a memcacheD to nie to samo ?
Re: wydajność memcached vs homemade-php
#231071
Author: Borys Pogoreło
Date: Mon, 06 Jul 2015 19:06
17 lines
1667 bytes
Dnia Mon, 06 Jul 2015 19:33:24 +0200, ww napisał(a):

>> $rand = openssl_random_pseudo_bytes(1024);
>> $t = microtime(true);
>>
>> $m = new Memcache();
>>
> Czy mi się wydaje czy memcache a memcacheD to nie to samo ?

Nie to samo w znaczeniu różne rozszerzenia PHP (memcached to wrapper na
libmemcached), ale to ten sam protokół. W omawianej sytuacji praktycznie
bez znaczenia. Róznica jest, jeśli potrzebujesz bardziej zaawansowanych
funkcji, wtedy memcached.

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Re: wydajność memcached vs homemade-php
#231072
Author: ww
Date: Tue, 07 Jul 2015 06:13
25 lines
2153 bytes
W dniu 2015-07-06 o 21:06, Borys Pogoreło pisze:
> Dnia Mon, 06 Jul 2015 19:33:24 +0200, ww napisał(a):
>
>>> $rand = openssl_random_pseudo_bytes(1024);
>>> $t = microtime(true);
>>>
>>> $m = new Memcache();
>>>
>> Czy mi się wydaje czy memcache a memcacheD to nie to samo ?
>
> Nie to samo w znaczeniu różne rozszerzenia PHP (memcached to wrapper na
> libmemcached), ale to ten sam protokół.

Racja.

> W omawianej sytuacji praktycznie
> bez znaczenia.

No może. Chociaż szczerze mówiąc nie wiem czemu ma służyć test z 1 
zapisem i milionem odczytów.

Przetestujcie może REDIS:

http://redis.io/
https://systoilet.files.wordpress.com/2010/08/redis_mc_keylen_mget.jpeg
Re: wydajność memcached vs homemade-php
#231073
Author: Borys Pogoreło
Date: Tue, 07 Jul 2015 16:17
15 lines
1682 bytes
Dnia Tue, 07 Jul 2015 08:13:12 +0200, ww napisał(a):

> No może. Chociaż szczerze mówiąc nie wiem czemu ma służyć test z 1 
> zapisem i milionem odczytów.

Też nie wiem, ale takie było założenie, albo źle zrozumiałem ;)

> Przetestujcie może REDIS:

Nawet Redis przy tej skali może nie pomóc. Ale wydaje mi się, że autor ma
jakiś problem z samą implementacją, a nie wydajnością cache.

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Re: wydajność memcached vs homemade-php
#231074
Author: M.M.
Date: Wed, 08 Jul 2015 06:51
16 lines
2407 bytes
On Tuesday, July 7, 2015 at 6:17:46 PM UTC+2, Borys Pogoreło wrote:
> Dnia Tue, 07 Jul 2015 08:13:12 +0200, ww napisał(a):
> 
> > No może. Chociaż szczerze mówiąc nie wiem czemu ma służyć test z 1 
> > zapisem i milionem odczytów.
> 
> Też nie wiem, ale takie było założenie, albo źle zrozumiałem ;)
Trudno mierzyć pomiar jednego odczytu, lepiej milion i uśrednić.

> 
> > Przetestujcie może REDIS:
> 
> Nawet Redis przy tej skali może nie pomóc. Ale wydaje mi się, że autor ma
> jakiś problem z samą implementacją, a nie wydajnością cache.
Z konfiguracją mam problem. Twój przykład działa na moim systemie wiele 
razy wolniej. Odpisałem na prv.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads