Dostrajam aplikację uruchamianą na App Engine i jednym z największych kosztów jest odczyt i zapis danych w magazynie danych. Zauważyłem, że jednym z największych przestępców z pism jest, gdy utrzymujemy zamówienie.W jaki sposób można zoptymalizować bazę danych Java/JDO AppEngine put(), aby zużywać mniej zapisów
Podstawowe dane jest Zakon posiada wiele elementów - możemy przechowywać zarówno oddzielnie i odnosić je tak:
@PersistenceCapable
public class Order implements Serializable {
@Persistent(mappedBy="order")
@Element(dependent = "true")
private List<Item> orderItems;
// other fields too obviously
}
@PersistenceCapable
public class Item implements Serializable {
@Persistent(dependent = "true")
@JsonIgnore
private Order order;
// more fields...
}
The appstats pokazuje dwa magazyn danych stawia na celu z jednej pozycji - ale obie są za pomocą masywny liczba zapisów. Chcę poznać najlepszy sposób na optymalizację tego od każdego, kto ma doświadczenie.
AppStats danych:
rzeczywiste = 34ms API = 1695ms koszt = 6400 billed_ops = [DATASTORE_WRITE: 64]
rzeczywistym = 42ms API = 995ms koszt = 3600 billed_ops = [DATASTORE_WRITE: 36]
Niektóre obszary znam, że prawdopodobnie będzie pomóc:
- mniej indeksów - istnieją implicite indeksy na kilku właściwościach zamówienia i towarów, które mogłem powiedzieć, że nie można indeksować, np. Item.quantity nie jest czymś, o co muszę pytać. Ale po to są te wszystkie zapiski?
- Pozbyć się elementu i porządku, tak że po prostu mam pojedynczy element OrderItem, usuwając potrzebę związku w ogóle (ale płacąc za to z dodatkową pamięcią).
- Pod względem wskaźników jasności mam tylko 1 na tabeli zamówień, według daty zamówienia i jednej pozycji zamówienia, według SKU/daty i implikowanej dla relacji.
- Jeśli przedmioty byłyby zbiorem, a nie listą, czyżby to całkowicie wyeliminowało potrzebę indeksowania dzieci _IDX?
Moje pytanie brzmi, czy któryś z powyższych elementów będzie zwiastunem wielkich wygranych, czy też są inne opcje, które przeoczyłem, na czym lepiej byłoby najpierw się skoncentrować?
Dodatkowe punkty: Czy istnieje dobry przewodnik po mniejszej przesyłce danych, który zawiera artykuł ""?
Dzięki Peter, czy są jakieś kroki poza 4 Zauważyłem, że sugerujesz zaglądanie, czy jestem na dobrej drodze z tym, co mam na myśli. –
@Ashley: Zaktualizowałem odpowiedź najważniejszą informacją - liczba indeksów wpływa na koszt zapisu, ale nie na szybkość zapisu. Aby przyspieszyć sprawę, zobacz operacje asynchroniczne. –