Pierwsze rozwiązanie na pewno nie wchodzi w grę… A z drugiej strony rozwiązanie z transakcjami to baaardzo duży refactor. Podejście z two-phase commit nie będzie konieczne, jeżeli przeskoczymy na wersję beta mongo, która umożliwia transakcje na wielu dokumentów
Generalnie Sealious jest w wielu miejscach nieodporny na problemy związane z atomowością transakcji… Uważam, że najlepiej rozwiązać to w nowym tasku, przy użyciu mongowych transakcji. Wyobrażam sobie to tak, że nowa transakcja jest wywoływana za każdym razem, kiedy tworzymy nowy kontekst, i zamykana po jego zużyciu
A cached field zróbmy wcześniej, bo i tak nie jesteśmy w innych miejscach odporni na atomość
Co do aktualizacji timestampa - uważam, że powinniśmy przechowywać informacje o ostatniej aktualizacji cache’u nie w last_modified_context.timestamp
, ale w samym polu, tzn:
{
body: {
cached_field: {
last_updated: 1522614683670,
value: "cached value"
}
}
}
I oczywiście zwracalibyśmy w body zasobu tylko value
, z pominięciem last_updated
.