Odczyt tylko nowych wierszy z tabeli podobnej do dziennika w bazie danych

Jesteśmy przekonani, że kilka serwerów wstawia porcje wierszy do tabeli w relacyjnej bazie danych, a jeden serwer raz na jakiś czas odczytuje nowe dane z tabeli. (Tabela jest koncepcyjnie jakimś rodzajem pliku logu - dane są wstawiane, ale nigdy nie modyfikowane, a serwer odczytu pokazuje ogon dziennika). Czy istnieje sposób, aby serwer odczytu czytał tylko nowe dane? Możemy dowolnie kształtować tabelę (y), jak chcemy.

Niektóre pomysły, które przyszły mi do głowy, ale nie działają, to:

Oznaczanie wierszy jako przeczytanych nie pasuje do naszej aplikacji: serwer odczytu nie powinien zmieniać bazy danych. (Pisanie do bazy danych w celu wyświetlania rzeczy nie jest dobrą rzeczą, a może być kilka sesji wyświetlających te rzeczy.)

Możemy wstawić znacznik czasu w każdym wierszu wypełnionym czasem systemowym bazy danych. Problem polega na tym, że nie jest to znacznik czasu zatwierdzenia, ale czas wstawienia. Jeśli zapytasz bazę danych „daj mi wszystkie wartości od teraz do 5 minut, a teraz”, nie możesz polegać na wszystkich obecnych wartościach, ponieważ mogą być transakcje w toku. Będziesz musiał zapytać później o wartości w tym przedziale, czego chciałem uniknąć.

Możemy wstawić liczbę uruchomionych wierszy wypełnioną z sekwencji. Ten sam problem z uruchomieniem transakcji ma miejsce w przypadku używania znaczników czasu.

Czy jest jakieś rozwiązanie tego problemu, czy muszę zastosować pewne heurystyki, takie jak zakładanie maksymalnego czasu transakcji i zawsze pytać o wartości zapisane po „teraz - maksymalny czas transakcji” i dwukrotnie odczytać dane?

W przypadku, gdy ma to znaczenie: używamy do tego Oracle. Ale zakładam, że odpowiedzi, które działają tylko z innymi bazami danych, są również interesujące.

questionAnswers(6)

yourAnswerToTheQuestion