15k rejestruje co 3 minuty, brzmi trochę jak co Widywałem z aplikacji do monitorowania sieci w centrach danych (SNMP może być bardzo głośno w tego rodzaju środowisku). To, co zrobimy, to określenie, ile potrzebnych danych, na jak długo, na jakim poziomie szczegółowości, i jakie informacje zostaną wykorzystane do określenia, jakiego rodzaju strategii należy użyć - także, ile przestrzeni dyskowej chcieliśmy rzucić na problem. Dzięki strategii zwijania, w której możesz łączyć się w szeregi czasowe, łącząc ich kolumny, możesz upewnić się, że istnieje ograniczony limit rozmiaru bazy danych.
Są prawdopodobnie nowsze narzędzia tam obecnie, ale użyłem na przykład RRD (http://oss.oetiker.ch/rrdtool/) i BerkeleyDB dla tego rodzaju problemów z monitorowaniem. Możesz także skorzystać z funkcji deduplikacji oprogramowania, która polega na tym, że po prostu zaktualizujesz liczbę, jeśli wiersz okaże się podobny do poprzedniego wiersza, ze względu na zawartość jego kolumn. Kiedyś robiliśmy to, aby zapobiec burzom z powodu zalania ekranów NOC i spowodowaniu, że technicy przegapią ważne wydarzenia. Nawiasem mówiąc, zostawiłbym to jako komentarz, ale stackoverflow robi to, co mi przeszkadza, i właśnie zacząłem odpowiadać na pytania tutaj wczoraj.
więc być bardziej kompletne, używając swoich danych jako przykład:
Req Success OrderFunction 5 60ms WebServer2
Req Failed OrderFunction 2 176ms WebServer5
Resp Success SuggestFunction 8 45ms WebServer2
Zakładam Req/Resp są tylko dwie wartości - odpowiadającej żądania i odpowiedzi? W takim przypadku ustaw kolumnę binarną, 1 bit - niezależnie od tego, czy była to prośba, czy nie. Druga kolumna, Sukces/Niepowodzenie - brzmi jak 1-bitowe lub w najgorszym trójskładnikowym polu 2-bitowym. Funkcje (OrderFunction, SuggestFunction, itp.) Mogą być prawdopodobnie wyliczone - lub jeśli robisz deduplikację, możesz ustawić ją jako maskę bitową. Można również użyć klucza obcego do tego w tabeli sprzężenia. W wyliczonej opcji, powiedzmy, że masz mniej niż 256, ale więcej niż 128, użyj bajtu.Jeśli możesz je zwinąć w rozwiązaniu deduplikacji zdarzeń w celu zapisania wierszy, szczególnie jeśli są one szybkie, i masz 256 opcji, potrzebujesz dokładnie tyle bitów dla swojej maski bitowej, chyba że jest to możliwe. przypadek, w którym nie każda permutacja musi być reprezentowana, w takim przypadku, ustal maksymalną liczbę permutacji, a to jest liczba bitów w masce bitowej, aby deduplikacja została poprawnie zwinięta. W następnej kolumnie z 5,2 i 8 w niej nie jestem pewien, co to oznacza, liczbą całkowitą jakiegoś, a może po prostu bajtem? Milisekundy mogą być reprezentowane, w zależności od twojego dialektu SQL i maksymalnych milisekund, które powinieneś reprezentować, z int, a może z unsigned short, lub może tylko z krótkim (który byłby w zasadzie około 32,7 sekundy). Jeśli używasz krótkiego lub niepodpisanego skrótu, po prostu upewnij się, że wartość przekraczająca wartość maksymalną jest reprezentowana w logice aplikacji jako maksimum, a nie zero. Ostatnia kolumna wygląda jak ciąg reprezentujący twoje serwery, więc prawdopodobnie jest to kolumna, której użyjesz, aby pomóc w usuwaniu duplikatów lub roll-upach. Możesz więc uczynić to obcym kluczem.
W każdym razie RRD był kiedyś bardzo dobry, ale nie używałem go od kilkunastu lat - przyjmuję go, nie używałem RRD od kilkunastu lat :). Jestem pewien, że BerkeleyDB jest nadal dobrą bazą danych dla tego rodzaju rzeczy - więc sprawdź te narzędzia i narzędzia, jak te i jestem pewien, że z tego wyjdzie dobre rozwiązanie.
Nadzieję, że pomaga!
Wygląda mi to jak zwykła krotka w bazie danych. – darijan
Tak, ale trzymanie tego w klasie jest uciążliwe. Istnieje 15 000 rekordów w 3-minutowych odstępach. – Xelom
Następnie pomyśl o utrzymywaniu go w relacyjnej bazie danych i wydobywaniu potrzebnych informacji za pośrednictwem zestawu usług. LUB, możesz to wszystko zrobić z bieżącą strukturą i rzeczywistymi obiektami, ale umożliwiając zachowanie tych obiektów (zwykle automatyczne, po utworzeniu i modyfikacji) w bazie danych obiektów (patrz na przykład Versant). – darijan