Śmiesznie wolno pisze do Amazon DynamoDB (API PHP)

To pytanie zostało już opublikowane na forach AWS, ale nadal pozostaje bez odpowiedzihttps://forums.aws.amazon.com/thread.jspa?threadID=94589

Próbuję wykonać początkowe przesłanie długiej listy krótkich elementów (około 120 milionów z nich), aby pobrać je później za pomocą unikalnego klucza, i wydaje się, że jest to idealny przypadek dla DynamoDb.

Jednak moja obecna prędkość zapisu jest bardzo niska (około 8-9 sekund na 100 zapisów), co sprawia, że ​​początkowe przesyłanie jest prawie niemożliwe (przy obecnym tempie zajęłoby to około 3 miesięcy).

Przeczytałem fora AWS szukające odpowiedzi i już wypróbowałem następujące rzeczy:

Przełączyłem się z pojedynczych wywołań „put_item” na zapisy wsadowe składające się z 25 pozycji (zalecany maksymalny rozmiar zapisu wsadowego), a każdy z moich przedmiotów jest mniejszy niż 1 KB (co również jest zalecane). Jest to bardzo typowe nawet dla 25 moich przedmiotów, które mają mniej niż 1 KB, ale nie jest to gwarantowane (i nie powinno to mieć znaczenia, jak rozumiem, ponieważ dla DynamoDB ważny jest tylko rozmiar pojedynczego przedmiotu).

Korzystam z niedawno wprowadzonego regionu UE (jestem w Wielkiej Brytanii), określając swój punkt wejścia bezpośrednio, wywołując set_region ('dynamodb.eu-west-1.amazonaws.com'), ponieważ najwyraźniej nie ma innego sposobu, aby to zrobić w PHP API. Konsola AWS pokazuje, że tabela jest w odpowiednim regionie, więc to działa.

Wyłączyłem protokół SSL, wywołując disable_ssl () (uzyskując 1 sekundę na 100 rekordów).

Mimo to zestaw testowy składający się ze 100 pozycji (4 wywołania zapisu dla 25 pozycji) nigdy nie zajmuje mniej niż 8 sekund do indeksowania. Każde żądanie zapisu wsadowego trwa około 2 sekund, więc nie jest to pierwsze żądanie natychmiastowe, a kolejne żądania są wtedy powolne.

Przepustowość obsługiwana przez tabelę to 100 zapisów i 100 jednostek odczytu, co powinno być wystarczające do tej pory (wypróbowano wyższe limity, tak samo na wszelki wypadek, bez efektu).

Wiem też, że na serializację żądań są pewne wydatki, więc prawdopodobnie mogę użyć kolejki do „gromadzenia” moich żądań, ale czy to naprawdę ma tak duże znaczenie dla zapisów wsadowych? I nie sądzę, żeby to był problem, ponieważ nawet pojedyncze żądanie trwa zbyt długo.

Odkryłem, że niektórzy ludzie modyfikują nagłówki cURL (szczególnie „Oczekuj:”) w interfejsie API, aby przyspieszyć żądania, ale nie sądzę, że jest to właściwy sposób, a także że interfejs API został zaktualizowany od czasu opublikowania tej porady.

Serwer, na którym działa moja aplikacja, jest również w porządku - czytałem, że czasami obciążenie procesora przechodzi przez dach, ale w moim przypadku wszystko jest w porządku, to tylko żądanie sieciowe, które trwa zbyt długo.

Utknąłem teraz - czy mogę coś jeszcze spróbować? Proszę o więcej informacji, jeśli nie podałem wystarczająco dużo.

Istnieją inne najnowsze wątki, najwyraźniej dotyczące tego samego problemu,tutaj (dotychczas brak odpowiedzi).

Ta usługa ma być bardzo szybka, więc jestem naprawdę zaskoczony tym problemem na samym początku.

questionAnswers(3)

yourAnswerToTheQuestion