W pracy robimy co noc zrzut naszych baz danych mysql. Z dnia na dzień przywitałbym, że prawie 90–95% danych jest zduplikowanych, z czasem rośnie. (Heck w tym momencie niektóre są prawdopodobnie 99%)
Te zrzuty są tam, gdzie jedna linia to pojedyncza instrukcja INSERT mysql, więc jedynymi różnicami są całe linie i kolejność, w jakiej znajdują się w pliku. Gdybym je posortował, rzeczywista różnica między plikami byłaby bardzo mała.
Szukałem i nie znalazłem żadnego sposobu na posortowanie danych wyjściowych podczas zrzutu. Mógłbym jednak przepuścić to przez sort
polecenie. Wtedy byłyby długie, długie bloki identycznych linii.
Więc próbuję wymyślić sposób na przechowywanie tylko różnic. Mógłbym zacząć od zrzutu głównego i różnicować się z tym każdej nocy. Ale różnice byłyby większe każdej nocy. Albo mógłbym tworzyć toczące się różnice, które pojedynczo byłyby bardzo małe, ale wydaje się, że obliczenie zajęłoby coraz więcej, gdybym musiał zestawiać główny diff całej serii każdej nocy.
Czy to jest wykonalne? Z jakich narzędzi?
Edytuj Nie pytam, jak wykonać kopie zapasowe mysql. Na razie zapomnij o mysql. To czerwony śledź. Chcę wiedzieć, jak zrobić serię toczących się różnic z serii plików. Każdej nocy otrzymujemy plik (który akurat jest plikiem mysqldump ), który jest w 99% podobny do poprzedniego. Tak, zgrywamy je wszystkie. Ale przede wszystkim nadmiarowość jest nadmiarowa. Wszystko, czego naprawdę potrzebuję, to różnice z poprzedniej nocy ... która różni się tylko o 1% od poprzedniej nocy ... i tak dalej. Więc szukam tego, jak zrobić serię różnic, więc muszę przechowywać tylko 1% każdej nocy.