Właśnie napisałem pulę połączeń JDBC, używając Akka.Kiedy firma Akka osiągnie lepszą wydajność?
Używa aktora do przechowywania kolekcji "maxPoolSize" rzeczywistych połączeń z bazą danych. Osoba dzwoniąca pyta aktora puli o połączenie i odbiera numer Future[Connection]
, a status połączenia staje się "zajęty", dopóki rozmówca nie zwróci go do puli pod numerem connection.close
. Jeśli wszystkie połączenia są zajęte, nowe przychodzące żądanie połączenia zostanie umieszczone w kolejce oczekujących (również przez aktora puli). Później, gdy połączenie zostanie zwrócone, żądanie oczekiwania zostanie spełnione.
Implementacja tej logiki jest bardzo prosta w akka, zaledwie kilkudziesięciu liniach kodu. Jednak podczas korzystania z BoneCP Multithread Test do testowania wydajności (tj rozmówca close
połączenie natychmiast, gdy Future[Connection]
zwrócony przez getConnection
jest spełniony. Benchmark traversed
wszystkie żądania close
i Await
dla wyniku Future
), uważam, że wersja Akka jest wolniejszy niż wiele innych implementacji pul połączeń, takich jak tomcat-jdbc, BoneCP czy nawet commons DBCP.
Co Próbowałem do strojenia:
- rozłupywania aktor basen na wiele z nich posiadają po części wszystkich rzeczywistych połączeń
- szczypanie niektórych parametrów konfiguracyjnych domyślnych-dyspozytor (przepustowość, równoległość)
ale nie zauważyłem żadnej poprawy.
Moje pytanie brzmi:
- Czy to odpowiedni przypadek użycia, że za pomocą Akka dostanie lepszą wydajność?
- Jeśli tak, to w jaki sposób mogę uzyskać podobne lub lepsze dane porównawcze niż implementacje ręcznej puli połączeń?
- Jeśli tak nie jest, dlaczego? Czy istnieją jakieś ustalone kryteria, które mogą mi pomóc zdecydować, kiedy użyć akka?
Nie jestem strasznie zaskoczony. Aby nie wątpić w swoje umiejętności rozwojowe w najmniejszym stopniu, ale te inne biblioteki mają sporo więcej czasu na rozwój, aby rozwiązać ten bardzo specyficzny problem. – joescii
Chciałbym zobaczyć odpowiedzi na punkt # 3! – maasg
Myślę, że # 3 jest dobrze omówione tutaj: http: // stackoverflow.com/questions/4493001/good-use-for-for-akka – Ryan