Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika Ragnarokk w Hydepark

GURU

w Hydepark

16piorunów

Techbrosy wymyśliły na nowo CSV xD

Komentarze (7)

Twórca0piorunów

przecież się z tego już rok temu wszyscy nabijali, teraz dopieor na hejto dosżło xD

GURU1piorunów

@Eruanno No to najwyraźniej nie wszyscy

Fanatyk2piorunów

Wydaje mi się że znajdzie zastosowanie w bardzo wąskim zakresie jak systemy w których z jakiegoś powodu muszą latać jsony, mają mnóstwo powtarzających się kluczy, i te jsony sięgają rozmiaru gigabajtów lub nawet terabajtów.

A jeszcze się okaże że w takich powtarzalnych jsonach będą latać klucze "toon_file":"\<tutaj zawartość pliku room>" xD

GURU4piorunów

@Ragnarokk Niby śmieszne ale w sumie ile się kB zaoszczędza pozbywaǰąc powtarzajacych się kluczy. Tylko bym ulepszyła jednak, żeby header zawierał deklarację typów oraz całej struktury (żeby nie była dopuszczona tylko jednowymiarowa jak csv) i zostawiła jak w json klamry i delimitery w danych pozwalające na rozróżnienie w danych czy są numeryczne, boolowskie czy stringi, czy są strukturą.

Tytan0piorunów
Przecież oba formaty możesz dodatkowo tak samo skompresować, co to za argument.

@GazelkaFarelka Przepraszam najmocniej, ale dalej nie rozumiesz. Toon próbuje oszczędzać wielkość pliku, poprzez skomplikowanie składni (wymaga parsowania semantyki! prostej bo prostej, ale wciąż! Wprowadza prosty system typów!), podczas gdy można skompresować JSONa i osiągnąć nawet lepsze wyniki niż Toon. Po kompresji, oba powinny mieć marginalnie podobne wielkości. Więc pytanie: po co Ci to?

> Różnica jest taka, że jak masz format możliwy do odczytywania porcjami, na przykład linia po linii, to na np. trzy miliony rekordów błąd parsowania w jednej linii nie rozwali ci całego odczytu pliku.

To jest akurat bzdura: JSONa da się recoverować, brak `}` albo `"` jest do naprawienia przy tak samo prostej strukturze jaką obsługuje Toon więc jaki problem tak naprawdę rozwiązuje?

GURU0piorunów

@Ragnarokk Tzn zgadzam się z tym, że ten toon jest to dosłownie CSV - niczym się w ogóle od niego nie różni. Ale rozumiem zamysł za tym stojący. Dlatego zaproponowałam moje rozwiązanie, które zmniejsza rozmiar pliku w podobny sposób, a jednocześnie jest nieco lepsze niż toon i CSV, bo eliminuje jego pewne wady.

Miałbyś header w tym stylu - gdzie deklarujesz typy, strukturę wiersza, pozwalającą też na zagnieżdżone struktury:

{"firstname": string, "lastname": string, "birthday": date, "father": {"firstname": string, "lastname": string}, "mother": {"firstname": string, "lastname": string}, children: {"firstname": string, "lastname": string}}

Oraz dane (każdy w osobnej linii)

{"Jan","Kowalski","1967-05-12",{"Wacław","Kowalski"},{"Janina","Kowalska"},[{"Zofia","Kowalska"}, {"Antoni","Kowalski"}]}

Dostajesz ten sam zysk to w toon i csv (oszczędzony rozmiar pliku na kluczach - no, nie dokładnie ten sam, u mnie jest odrobinę więcej bo są klamry i delimitery), a jednocześnie możliwość zapisywania bardziej złożonej struktury danych niż flat oddzielony przecinkami, a w przypadku danych w relacji jeden do wielu, konieczności zrzucania tego do dwóch osobnych plików (na moim przykładzie jakby to był csv, to musiałbyś zrobić dwa pliki - people.csv i children.csv i nie miałbyś dostępu do wiedzy o childrenach przetwarzając people.csv)

GURU0piorunów

@baklazan Przecież oba formaty możesz dodatkowo tak samo skompresować, co to za argument.

Różnica jest taka, że jak masz format możliwy do odczytywania porcjami, na przykład linia po linii, to na np. trzy miliony rekordów błąd parsowania w jednej linii nie rozwali ci całego odczytu pliku. Przetworzysz sobie poprawnie 2 999 999 wierszy danych, a ten jeden wadliwy rekord zaraportujesz jako błąd.

Tytan0piorunów

@GazelkaFarelka OMG, słownik... "Żołnierz" - miało być zipujesz.

Chodzi mi o to że celem tego formatu jest ograniczenie powtórzeń kluczy w celu zmniejszenia pliku. Tyle że tym się zajmują algorytmy kompresji, z automatu, bez ludzkiej ingerencji.

Dlaczego zrzucać sprawdzanie błędów semantycznych na parser? Siłą JSONa jest to że jest taki jak go zinterpretujesz, parser ma minimalne wymagania co do pliku, tak, możesz zgubić cudzysłów, ale równie dobrze w Twoim możesz zgubić przecinek, albo może Ci wpaść jeden ekstra, masz ten sam problem.

GURU2piorunów

@megawonsz9 Co? Json jest po to, żeby zakodować wielowymiarowe dane o dowolnej strukturze. Owszem, lepiej się to czyta i jest idealne do wymiany relatywnie niewielkich porcji danych. Jeżeli jednak masz dane, które są monstrualne, gdzie struktura każdego rekordu jest identyczna, to można pominąć deklarowanie jej w de facto każdym elemencie. Z tym, że wadą CSV jest płaski wymiar i brak możliwości określenia typów danych.

Ogólnie wymiana danych polegająca na przetwarzaniu plików to kupa :stuck_out_tongue_closed_eyes:

GURU0piorunów

@dzek kompresję masz tak czy siak, tu i tu, a realnie ile oszczędzisz zależy od wielkości danych w wierszu, to czysty tekst więc bardzo łatwo policzyć dla konkretnego zestawu danych

Mocarz5piorunów

@GazelkaFarelka Przeca jsona nie używa się po to żeby zaoszczędzić miejsce tylko po to żeby dobrze się go czytało oczami. Ten TOON nawet w przykładzie to padaka bo trzeba co chwila zerkać do headera, przy większej ilości tekstu równie dobrze można trzymać te dane w jakimś binarnym formacie który pewnie i tak byłby bardziej czytelny niż to xd

Tytan2piorunów

@GazelkaFarelka pytanie ile realnie na realnych danych to oszczędza, uwzględniając kompresję, jakiegoś bieda gzipa, nie mówiąc o brotli

Do tego jak wygląda zagnieżdżanie? Gdzie typy? Czy to działa tylko dla płaskiej "struktury" w której wszystko jest stringiem?

GURU0piorunów

@baklazan Nie rozumiem zarzutów, w każdym formacie można zrobić błędy. W mojej propozycji jest o tyle lepiej, że jeżeli odczytany wiersz nie pasuje do podanej w headerze struktury to go odrzucasz w przetwarzaniu - nie wywala ci po zaciagnięciu i załadowaniu do pamięci całego 3 GB pliku "json parse error", bo gdzieś tam ktoś nie escapował delimitera.

Tytan0piorunów

@GazelkaFarelka bullshit. Żołnierz jak potrzebujesz miejsca i tyle. To gówno wymaga deklaracji, więc wymaga w cholerę zmian w których łatwo o błędy, przedwczesna optymalizacja to źródło wszelkiego zla

GURU1piorunów

@Czokowoko Tu jest porównanie z json więc wymyśliłam jak dołożyć do tego po prawej zalety jsona a jednocześnie utrzymać większą kompaktowość danych, którą daje format po prawej. Oczywiście zakładaǰac, że przekazujemy dużą ilość danych (wtedy te zyski na kB mają znaczenie), a wszystkie elementy mają tą samą strukturę. Można każdy element dawać nawet w nowej linii, dzieki czemu można by odczytywać i przetwarzać linia po linii, zamiast wczytywania najpierw całości do pamięci, co ma znaczenie przy bardzo dużych plikach.

Gruba ryba1piorunów

@GazelkaFarelka Wszystko zależy co chcesz wysyłać, w jaki sposób i ile. No i czy ktoś nie będzie musiał tego czytać potem przy debugowaniu XD

Kosmonauta17piorunów

Powodzenia z eskejpowaniem przecinków w stringach

Lider1piorunów

@dziad_saksonski no to ok, ale te stringi to troche imo przesada

Kosmonauta1piorunów

@bartek555 nie no co ty, kazdy szanujący się zdalny pracownik siedzi w szlafroku z piwerkiem

Gruba ryba15piorunów

O tak byczku, brakowało mi kolejnego formatu wymiany danych...

https://noyaml.com

Edit: @vrkr no chyba nie xD

🚨🚨 That's a lot of YAML 🚨🚨No body wants to write YAML. A lovingly curated list of YAML pain.Noyaml
Tytan4piorunów

@ZohanTSW zróbmy dla beki format który zatem połączy wady wszystkich standardów, ale z jakiegoś dziwnego powodu się przyjmie, bo ci którzy z niego korzystali, dla beki będą go polecać innym.

Fanatyk2piorunów

@serel jest tyle standardów, że głowa boli... Zróbmy zatem kolejny, ale taki, który połączy zalety wszystkich standardów, i będzie standardem ostatecznym!

Gruba ryba3piorunów

Wszystko tylko nie CSV, to już nawet YAML lepszy xD

GURU2piorunów

@vrkr Ma swoje plusy - jest to format Excelowy, a klienci nietechniczni lubią Excele. Można lubić albo nie lubić, dane będziesz dostawal w tabelkach :grinning: