2009-01-15 12 views
11

Próbuję określić sposób przechowywania historycznych danych transakcyjnych.Jak najlepiej radzić sobie z przechowywaniem danych historycznych?

Czy powinienem przechowywać go w jednym stole, za każdym razem, gdy rekord zostanie ponownie wstawiony z nowym znacznikiem czasu?

Czy powinienem podzielić dane historyczne na osobną tabelę "historii" i przechowywać tylko bieżące dane w tabeli "aktywnej".

Jeśli tak, jak najlepiej to zrobić? Z wyzwalaczem, który automatycznie kopiuje dane do tabeli historii? Lub z logiką w mojej aplikacji?

Aktualizacja na komentarz Welbog za:

Nie będzie dużych ilości danych historycznych (setki tysięcy wierszy - ostatecznie potencjalnie miliony)

Głównie wyszukiwania i operacje sprawozdawczości będą prowadzone na danych historycznych .

Wyniki są problemem. Wyszukiwanie nie powinno trwać całą noc, aby uzyskać wyniki.

+0

To naprawdę zależy od ilości danych, o których mówisz. Jakie transakcje? Jakie operacje będą wykonywane najczęściej na danych historycznych? Jak ważna jest wydajność? – Welbog

Odpowiedz

8

Jeśli wymóg dotyczy wyłącznie raportowania, należy rozważyć utworzenie oddzielnej hurtowni danych. Umożliwia to korzystanie z struktur danych, takich jak wolno zmieniające się wymiary, które są znacznie lepsze w przypadku raportowania historycznego, ale nie działają dobrze w systemie transakcyjnym. Powstała kombinacja przenosi również historyczne raporty z bazy danych produkcji, co stanowi wygraną wydajności i utrzymania.

Jeśli chcesz, aby ta historia była dostępna w aplikacji, powinieneś zaimplementować jakąś funkcję wersjonowania lub logicznego usuwania, lub dokonać pełnego contra i ponownej konfiguracji (tzn. Transakcje nigdy nie zostaną usunięte, tylko wycofane i przekształcone). Zastanów się bardzo, czy naprawdę potrzebujesz tego, ponieważ spowoduje to wiele komplikacji. Tworzenie aplikacji transakcyjnej, która może poprawnie zrekonstruować historyczny stan, jest znacznie trudniejsze, niż się wydaje. Oprogramowanie finansowe (np. Systemy ubezpieczeniowe) nie robi tego o wiele więcej, niż mogłoby się wydawać.

Jeśli potrzebujesz historii wyłącznie do rejestrowania kontroli, utwórz tabele cieni i wyzwalacze rejestrowania inspekcji. Jest to znacznie prostsze i bardziej niezawodne niż próba poprawnego i kompleksowego wdrożenia rejestrowania audytu w aplikacji. Wyzwalacze będą także pobierać zmiany do bazy danych ze źródeł spoza aplikacji.

2

To pytanie jest zgodne z logiką biznesową. Najpierw poznaj wymagania biznesowe, a następnie zacznij od tego. Data Warehouse to dobre rozwiązanie dla tego rodzaju sytuacji. ETL da ci wiele opcji w radzeniu sobie z przepływem danych. Twoja podstawowa koncepcja "Historii" a "Aktywnej" jest całkiem poprawna. Twoje dane historyczne będą bardziej wydajne i elastyczne, jeśli będą przechowywane w hurtowni danych ze wszystkimi tabelami wymiarów i faktów.

Powiązane problemy