2010-10-21 8 views

Odpowiedz

0

Z Wikipedii:

„Bitemporal danych to pojęcie używane w bazie danych skroniowej To oznacza zarówno poprawny czas i czas transakcji danych w tabeli bazy danych bitemporal dane są często reprezentowane przez cztery dodatkowe tabeli.. -Kolumny StartVT i EndVT, StartTT i EndTT Każdy interwał czasowy jest zamykany dolną granicą i otwiera się przy górnej granicy. "

Więc nie możesz umieścić tych czterech wartości na swoich danych?

+1

Dodanie tych metadanych jest tylko częściowym rozwiązaniem. Konieczne jest automatyczne zarządzanie tymi metadanymi. Rozważ aktualizację obiektu logicznego tylko na określony czas (rok 2015). Następnie bitemporalna baza danych zapewniłaby, że przed 2015 r. I po 2015 r. Oryginalne wartości pozostaną nietknięte. Pozwoli to również na zapytanie z kontekstem bitemporalnym: jaka była moja wiedza w 2013 roku o stanie obiektu o logicznym id 777 w roku 2015? – user152468

2

Nie znam żadnego magazynu danych NoSQL, który został specjalnie zaprojektowany do obsługi danych tymczasowych. Aby umieścić ważne i transakcyjnych okresów na danych w Riak trzeba by albo:

  1. Wrap dokumenty/wartości ze struktury, która może pomieścić metadane jak:

    { meta: { ważna: ["2001-11-08", "2001-11-09"], Transakcja: ["2011-01-29 10:27:00", "2011-01-29 10:28:00 "] } ładunek:" To jest rzeczywisty dokument/wartość, którą chcę przechowywać! " }

  2. Utwórz "meta dokument" dla każdego dokumentu i użyj Riak Links, aby je połączyć.
    Myślę, że jest to trochę czystsze, ale jeśli trzeba często pobierać te czasy, to ta metoda może być zbyt wolna.

Jeśli chcesz odzyskać dokumenty po raz potem nie sądzę Riak (lub jakichkolwiek innych magazynów danych klucz/wartość, które znam) będzie odpowiedni magazyn danych do wykorzystania. SQL lub ewentualnie jakiś system BigTable może być twoją jedyną dobrą opcją.

1

Napisałem mały bitemporal, warstwy bazy danych open source oparty na MongoDB:

https://github.com/1123/bitemporaldb

Podczas przechowywania Scala lub Java obiektów, obiekt jest owinięty w ogólnej bitemporal obiektu z bitemporal meta-informacji (prawidłowy czas, czas transakcji). Następnie jest serializowany do json i zapisywany jako BSON w MongoDB.

Obsługuje tymczasowe i czasowe aktualizacje obiektów w sposób przezroczysty. Wyszukiwanie według kontekstu bitemporalnego jest możliwe.

Serwery zorientowane na dokumenty dla danych bitemporalnych są korzystne, ponieważ pamięć zorientowana na dokumenty zmniejsza liczbę sprzężeń do pobierania danych. Połączenia w kontekście bitemporalnym mogą być nieskuteczne i trudne do ręcznego kodowania.

Opinie, uwagi i propozycje funkcji są bardzo mile widziane.

0

Aby obsługiwać bitemporalny (lub tymczasowy model db), potrzebne są transakcje kwasowe w celu wykonania odpowiedniego DML w celu zaktualizowania i wstawienia rekordów w dwóch wymiarach czasowych (ważny/faktyczny czas i transakcja/godzina systemowa). See for details o modelowaniu czasowym.

Popularna baza danych NoSQL, na przykład Cassandra, MongoDB, Couchbase, nie ma na przykład obsługi ACID, aby wykonać niezbędne operacje aktualizacji/wstawiania rekordów potrzebne do obsługi manipulacji bitemporalnymi. W przypadku tymczasowych i bitemporalnych rekordów baz danych rekordy nie mogą się nigdy nakładać, a rekordy muszą być poprawnie usuwane po zastąpieniu przez kolejne ważne rekordy czasu transakcji.

Baza danych MarkLogic NoSQL twierdzi, że obsługuje bitemporal, ale nigdy nie próbowała go i nie jest open source. Ale możesz przetasować własne rozwiązanie, używając bazy danych ACID, która skutecznie funkcjonuje jako ważny dziennik śledzenia transakcji/transakcji, a następnie użyć NoSQL dla rzeczywistej składnicy danych. Zobacz opis wysokiego poziomu tego approach here.

Powiązane problemy