Mam taki problem przy pracy na dużych plikach (~1GB).
Załóżmy, że do pliku będą zapisywane mniejsze segmenty (~10 MB). Każdy z tych segmentów powinien mieć swój numer żeby można było zidentyfikować jego kolejność. Nie mogę od razu zapisywać tych segmentów w poprawnej formie (czy ułożyć z nich właściwy plik), bo segmenty mogą być w nieodpowiedniej kolejności lub nie zawsze jest pewność, że dany segment jest prawidłowy. Dodatkowo. Powinna być możliwość szybkiego odczytu danego segmentu, najlepiej bez konieczności przelatywania przez cały plik w poszukiwaniu odpowiedniego nagłówka (danego segmentu - jakoś trzeba go zidentyfikować).
To co ja wymyśliłem...
Pomyślałem, że można by zrobić coś takiego jak indeks segmentów znajdujących się w pliku, taki nagłówek pliku, ze spisem segmentów + pozycja od której segment się zaczyna. Problemem okazała się nieznana wielkość takiego nagłówka (tak na prawdę nie wiadomo ile tych segmentów będzie), czy ten nagłówek w ogóle będzie (może zostać usunięty czy coś, a jakoś trzeba ustalić gdzie się kończy), no i każdorazowa zmiana pozycji każdego segmentu w strumieniu. Dodając nowy segment, dodajemy indeks + pozycję do nagłówka pliku, tym samym przesuwając pozycję wszystkich segmentów. Tak więc uznałem, że nie ma co kombinować i lepiej poprosić o pomoc kogoś bardziej doświadczonego
Główne założenia:
- Możliwość szybkiego znalezienia i "wycięcia" strumienia danego segmentu.
- Sprawdzenia liczby segmentów oraz czy dany segment znajduje się w pliku.
- Dodawanie, usuwanie segmentów, zamienianie (może być potrzeba zamiany uszkodzonego na poprawny) tak by nie trzeba było odczytywać całego strumienia (czyli szukać segmentu).
(Pomyślałem, że można by zrobić nagłówek o stałej wielkości, np 10KB, wypełniając resztę np. kropkami, czy czymś takim. 10 KB przy założeniu wpisu np. "[HEADER]{12}{324543}{D}[/HEADER]" (nr segmenty, pozycja w pliku i jakaś dodatkowa opcja) (który ma maksymalną wielkość 50 bajtów) daje to możliwość wpisania ponad 200 segmentów.(Można powiększyć, np. do 100KB lub zamienić HEADER na np. HDR, by zwiększyć liczbę możliwych segmentów do zapisania).
Co o tym myślicie ?