2011-09-18 13 views
5

Oracle database change notification feature wysyła wiersze (fizyczne adresy wierszy) w wierszach wstawia, aktualizuje i usuwa. Jak wskazano w dokumentacji Oracle, ta funkcja może być używana przez aplikację do budowania pamięci podręcznej średniego poziomu. Ale wydaje się to sprzeczne, gdy mamy szczegółowe spojrzenie na działanie identyfikatorów rzędów.Powiadomienie o zmianie bazy danych Oracle i ROWID's

ROWID (fizyczne adresy wierszy) mogą się zmieniać, gdy wykonywane są różne operacje na bazach danych, zgodnie ze wskazaniem this stackoverflow thread. Oprócz tego, jak wspomina Tom w tym thread tabel klastrowanych mogą mieć same rowids.

Na podstawie powyższych badań nie wydaje się być bezpieczne korzystanie z rowid wysłany podczas powiadomienia o zmianie bazy danych jako klucz w pamięci podręcznej aplikacji, prawda? Pojawia się również pytanie dotyczące - Czy funkcja powiadamiania o zmianie bazy danych powinna być używana do budowania pamięci podręcznej serwera aplikacji? lub czy zalecane jest zrestartowanie wszystkich klastrów serwerów aplikacji (w celu przeładowania/odświeżenia pamięci podręcznej), gdy tabele obiektów z pamięci podręcznej są poddawane operacjom, które powodują zmianę wiersza? Czy byłoby to dobre założenie dla środowisk produkcyjnych?

+0

Dlaczego nie polegasz na atrybutach podmiotów gospodarczych/domen? – zerkms

+0

Nie do końca zrozumiałem twoją rekomendację. Dzięki powiadomieniu o zmianie bazy danych oracle wysyła tylko rzędy do wstawionych/zaktualizowanych wierszy. Nie można go skonfigurować do podawania jakichkolwiek innych informacji o kolumnach w tej tabeli. –

+0

tak, i dlaczego nie stworzysz warstwy pamięci podręcznej na warstwie dostępu do danych, opierając się na danych biznesowych, a nie na pamięci. Czy myślisz, że możesz buforować dane lepiej, niż robi to wyrocznia? – zerkms

Odpowiedz

5

Wydaje mi się, że żadna z operacji, które mogą potencjalnie zmienić ROWID, to operacja, która byłaby przeprowadzana w produktywnym środowisku podczas działania aplikacji. Ponadto widziałem wiele wydajnych programów, które używają ROWID dla transakcji (zwykle tylko przez kilka sekund lub minut). To oprogramowanie prawdopodobnie zawiedzie przed pamięcią podręczną, jeśli zmieni się ROWID. Dlatego tworzenie pamięci podręcznej bazy danych na podstawie powiadomienia o zmianie wydaje mi się uzasadnione. Po prostu podaj małe zastrzeżenie dotyczące ROWID.

Jedyną nieco problematyczną operacją jest aktualizacja powodująca przejście do innej partycji. Ale to się rzadko zdarza, ponieważ pokonuje cel partycjonowania, przynajmniej jeśli miało to miejsce regularnie. Projektant określonego schematu bazy danych będzie mógł powiedzieć, czy taka operacja może wystąpić i jest istotna dla buforowania. Jeśli żadna z tabel nie ma zestawu ENABLE ROW MOVEMENT, nie musisz nawet pytać projektanta.

Aby powielić numery ROWID: ROWID nie są unikalne globalnie, są unikalne w obrębie tabeli. W powiadomieniu o zmianie podano zarówno nazwę ROWID, jak i nazwę tabeli. Tak więc krotka nazwa ROWID i nazwa tabeli to doskonały unikalny klucz do budowania niezawodnej pamięci podręcznej.

+0

Brzmi nieźle. Podczas badania więcej na ten temat przeszedłem przez zorganizowane indeksowo tabele (IOT). Mają logiczne rzędy, które mogą się zmieniać, ponieważ rzędy są przechowywane w posortowany sposób. Więc używając DCN musimy zawsze upewnić się, że tabela bazy danych nie jest tabelą zorganizowaną według indeksu, prawda? –

Powiązane problemy