Czy preferuję serializację binarną w serializacji ascii/tekstu, jeśli wydajność jest problemem?Lepsza wydajność serializacji: tekst w porównaniu do formatu binarnego
Czy ktoś przetestował go na dużej ilości danych?
Czy preferuję serializację binarną w serializacji ascii/tekstu, jeśli wydajność jest problemem?Lepsza wydajność serializacji: tekst w porównaniu do formatu binarnego
Czy ktoś przetestował go na dużej ilości danych?
użyłem boost.serialization do przechowywania matryc i wektory reprezentujących tabele odnośników i niektórych metadanych (ciągi) o wielkości pamięci około 200 MB. IIRC do ładowania z dysku do pamięci trwało 3 minuty dla archiwum tekstowego w porównaniu do 4 sekund przy użyciu archiwum binarnego na WinXP.
3 minuty brzmią ... niewytłumaczalnie wolno. To nie były typy POD :) – sehe
Proponuję zajrzeć do protobuf - Protocol Buffers jeśli wydajność jest problem
Test porównawczy dla problemu związanego z ładowaniem dużej klasy zawierającej partie (tysiące) zagnieżdżonych klas zarchiwizowanych.
Aby zmienić format, archiwum wykorzystanie strumieni
boost::archive::binary_oarchive
boost::archive::binary_iarchive
zamiast
boost::archive::text_oarchive
boost::archive::text_iarchive
Kod do ładowania (binarne) archiwum wygląda następująco:
std::ifstream ifs("filename", std::ios::binary);
boost::archive::binary_iarchive input_archive(ifs);
Class* p_object;
input_archive >> p_object;
plików i walltimes dla zoptymalizowanej wersji gcc powyższego fragmentu kodu to:
Pochodzi z dysku SSD, bez kompresji strumienia.
Zwiększenie prędkości jest większe niż sugerowałby rozmiar pliku, a otrzymasz dodatkowy bonus za pomocą binarnego.
Interesujący temat. Przeczytaj to: http://stackoverflow.com/questions/4558382/boostserialization-high-memory-consumption-during-serialization –