Przechowywanie tak gigantyczniej ilości danych w plikach tekstowych to słaby pomysł — marnuje się kupę czasu na konwersję tekstu na dane natywne, do tego nierzadko dochodzi parsowanie zawartości, co jeszcze bardziej zwiększa zapotrzebowanie na zasoby.
Gdyby to była taka prosta prawda z tą konwersją i prasowaniem, to sens zastosowania i istnienia baz NoSQL (np. MongoDB) byłby wątpliwy.
A jest dokładnie odwrotnie.
Ciekawe dlaczego?
Dla wyrywnych; to jest retoryczne pytanie.
Plik amorficzny mógłby być znacznie lepszą alternatywą.
Istotnie mógłby, ale pod warunkiem, że struktur danych jest stałą i nigdy się nie zmieni.
Ja przy programowani zakładam zawsze i to samo - na pewno z czasem będzie konieczna zmiana.
A zmiana struktury danych dla takich plików jest kłopotliwa, ponieważ trzeba wykonać konwersję pliku.
To tak jakby zmiana typu danych w bazie danych zmuszała nas do jej całkowitej przebudowy.
A to wygląda na wyjątkowo paskudny pomysł.
Odpadnie parsowanie, odpadnie konwersja danych, a dorzucenie słownika (à la spisu treści) pozwoli odczytywać dane z dowolnego jego miejsca, natychmiast, bez względu na rozmiar pliku.
Jeżeli potrzeby zostaną zdefiniowane w ten sposób, to lepiej mieć pod spodem bazę danych.
I nie musi to być poważny silnik; jeśli zapisów i aktualizacji będzie sporo, to sugerowałbym SQLite.
Jeśli więcej jest odczytów i nacisk będzie postawiony bardziej na analizę danych, to DuckDB.
Choć słownik nie będzie potrzebny, jeśli plik zawiera dane podzielone na pakiety o stałym rozmiarze — prosta matematyka wystarczy do skakania po pakietach.
Na podstawie innych wątków obstawiam, że OP ma w tym pliku wylistowane wszystkie kombinacje liczb dużego lotka (~13 milionów zestawów) i używa go tylko do odczytu. Jeśli tak faktycznie jest, to plik binarny, obsługiwany za pomocą TFileStream
, będzie idealny. No ale to tylko przypuszczenia.
Miałem kiedyś podobne zadanie na rekrutacji, tylko danych było 10x tyle.
Dane w pliku tekstowym.
Pierwsze co zrobiłem to wrzuciłem to do bazy danych - aby porównać wydajność przetwarzania i dowiedzieć się czy jest o co się bić.
A potem szlifowałem program do parsowania danych z TXT.
W efekcie w miarę dopracowana wersje (współbieżność, keszowanie, itd.) oferował blisko STUKROTNIE większą wydajność niż to samo w oparciu o bazę MSSQL.
I to by było na tyle, że parsowanie TXT jest tak wolne, że nie warto się tym zajmować i z tego powodu lepiej zastosować pliki amorficzne.
Nie, moim zdaniem zdecydowanie nie.