Wydaje się, że dane zadanie nie może być rozwiązane przy danych ograniczeniach. Jeśli dobrze zrozumiałem, liczba baz danych i schemat wierszy są stałymi.
Zatem zmienne, które pozostały:
- Dodatkowe „wstrzyknięcia” do bazy danych
- Sztuczki czasowe
- Sztuczki wyzwalające
- "Późne wiązanie" zmian, które nie zostały zreplikowane na czas
Obecnie znalazłem tylko jeden pomysł, który wydaje się działać:
- Dodaj wyzwalacz do tabeli „Linie”, aby zmodyfikować znacznik czasu rekordu „Zamówienie” (last_line_time)
- W replice poczekaj, aż pojawi się Linia z czasem równym last_line_time.
- Jeśli max(lines.line_time)> order.last_line_time to zamówienie jest przestarzałe
- Jeśli max(lines.line_time)
- Jeśli max(lines.line_time) ==order.last_line_time to na razie wszystko jest w porządku :)
Ale ten przypadek może zakończyć się niepowodzeniem w nieskończonej pętli, jeśli linie są stale modyfikowane, a replika tabeli linii zawsze pozostaje w tyle.