2009-10-30 20 views
10

Dla Erlanga dostępnych jest wiele bibliotek JSON i nie jest dla mnie jasne, które mają najlepsze cechy wydajności (i, z drugiej strony, łatwość użycia), szczególnie w przypadku serializacji erlang-json.Biblioteki Erlanga JSON: wydajność serializacji?

Mój przypadek użycia wymaga zarówno parsowania JSON, jak i serializacji, ale kod Erlang będzie prawdopodobnie generował więcej niż dwa rzędy wielkości sygnału wyjściowego JSON (tj. Serializacji) niż otrzyma dane wejściowe.

odsyłającym biblioteki znam obejmują następujące (i nie mogą być inni, ja nie znalazłem):

+0

jest również moduł JSON w YAWS. – jldupont

+1

eep0018 jest teraz przeskalowane przez tę bibliotekę: https://github.com/davisp/jiffy – Dfr

Odpowiedz

9

używam rfc4627.erl (Natknąłem się na niego, a wydajność nie jest problemem)

Jednak należy się spodziewać różnych natywnych bibliotek Erlang wykonać podobnie dobrze. Wymieniają się pomysłami (o czym świadczy code comments). AFAIK mochijson i rfc4627 udostępniają ten sam format źródła erlang.

eep018 to C, a jak to jest dążenie do realizacji ... HRM ... eep-0018, z term_to_json natywną enkoder, które mogą być zawarte w przyszłej wersji Erlang. Nigdy nie próbowałem i nie wydaje się aktywnie utrzymywane.

Moja ostatnia rekomendacja to: mochiweb's mochijson (2). Jest to standard i aktywnie konserwowana, używana m.in. przez CouchDB i Facebook.

Jeśli chodzi o wybór między mochijson i mochijson2, this może ci pomóc.

-2

Mam nadzieję, że ta odpowiedź nie będzie źle przyjęta ed, jednak:

Również zajrzał do JSON parsowania i serializacji dla projektu. Musiałem przetwarzać wiele danych równolegle, więc Erlang brzmiał świetnie! Ale wiele z nich dotyczyło łańcuchów w postaci danych JSON, i tam wszystko poszło kwaśno.

Jak pewnie wiesz, struny w Erlang to pełne listy postaci. W przeciwieństwie do ciągów w większości języków (znak "jest" o bajcie), każda postać w Erlangu jest reprezentowana przez całą 32-bitową liczbę całkowitą! Więc twoje struny są już dość duże.

Ponieważ jest to lista, dostęp do danego elementu ciągu znaków to O (N) zamiast O (1), zgodnie z oczekiwaniami w tablicy znaków. A ponieważ struny są niezmienne w Erlangu, proste połączenie może być bardzo powolnym procesem. W końcu uświadomiłem sobie, że próbuję po prostu użyć niewłaściwego języka.

Prawdopodobnie znasz już wszystkie te rzeczy, ale uważam, że warto byłoby zostawić to jako odpowiedź dla innych, którzy mogą przyjść na twój posterunek w przyszłości.

+6

Powinieneś używać plików binarnych w takich przypadkach, _nie_ ciągach. –

+0

Powinieneś dowiedzieć się czegoś o listach io. –

+0

Powinieneś nauczyć się czegoś o kodowaniu ciągów unicode, na przykład utf-8, kiedy dostęp do znaków natychmiast staje się O (N). – rvirding

2

Ostatnio używałem jsonerl. Oparty jest na mochijson2 i jest znacznie łatwiejszy i intuicyjny w użyciu.

Powiązane problemy