Wpis z mikrobloga

Chciałem sobie zrobić proste API pod gotową bazę danych #postgresql. Zależało mi na wydajności. Najpierw - sprawdzamy szybkość samego języka, czyli

GET /
ma zwrócić "hello, world".

#ruby - sinatra + sinatra-synchrony - ok. 2000 req/s

#nodejs - expressjs - ok. 5000 req/s

#golang - martini - ok. 18000 req/s

No no, pomyślałem, różnica jest ogromna. Miałem jeszcze przetestować scale i haskella, ale pomyślałem że najpierw sprawdzę co będzie jak dodam proste zapytanie do bazy -

SELECT name FROM users WHERE id=$1
(prepared query, $1 to parametr przy

GET /:id
. Oczywiście jest poprawny index itd).

Ruby - ~250 req/s

NodeJS - ~250 req/s

Go - ~250 req/s

No to facepalm i piszę w ruby, a scali, haskella ani erlanga nawet nie sprawdzam :P

Nodejs - jestem dupa i ciągle trafiam w

callback hell
a Go poznałem tylko na tyle by napisać moje helloworldy.

Ps. wszystkie testy za pomocą

ab -n 5000 -c 50
.
  • 9
  • Odpowiedz
@list86: dobrze taką metodę podsumowali na ostatniej konferencji amazonu - Whack-A-Mole Anti-method - czyli pomierz wszystko co przychodzi do głowy w nadziei, że coś znajdziesz..

Ale propsy za sensowne podejscie do tematu - czyli z miarką a nie na oko :)
  • Odpowiedz
@msq: jest cały stack: routing, dekoder http, dostęp do bazy danych, enkoder json itd. IMHO dopóki język nie jest wolniejszy niż umożliwia to baza danych to nie ma problemów.
  • Odpowiedz