2011-09-14 4 views
2

수백만 개의 Java POJO를 디스크에 쓰고 디스크에서 읽어야하므로 빨리 처리해야합니다.상대적으로 간단한 Java POJO를 직렬화하는 가장 빠른 방법은 무엇입니까?

저는 Thrift 및 Google 프로토콜 버퍼와 함께 필요하다고 생각되는 별도의 템플릿 파일을 정의하지 않아도됩니다. 오히려 Java 클래스 자체가 객체에 대한 권위있는 명세 (Java Serialization, Gson 및 기타 직렬화 프로토콜의 경우)와 같은 것이 더 바람직합니다. 여기에 약간의 성능 저하가있을 수 있지만, ok는 그 정도가 느리지 않습니다.

직렬화 할 클래스는 여러 개의 간단한 long 및 String 필드와 단일 맵 (이 맵의 값은 모두 숫자 또는 문자열)으로 구성됩니다.

누구나 내가 이것을 봐야 할 라이브러리를 제안 할 수 있습니까?

+0

원시 Java 직렬화를 측정하여 충분히 빠르지는 않았습니까? 당신이 가진 시간은 무엇이고 원하는 시간은 언제입니까? –

+0

그 위에는 좋은 것이 아니라 그 아래에있는 나쁜 것이 정말로 있습니다. 더 빠른 것이 좋습니다. 네이티브 직렬화는 문제가되지 않을 수도 있지만, 일반적으로 더 빨리 이해할 수있는 방법이 있는지 궁금합니다. – sanity

+0

Re : "좋을 것 같은데 ..."- .NET과 같은 protobuf를 사용할 수 있습니다 (코드 우선). (나중에 참조하십시오 : protobuf-net) –

답변

4

Java 직렬화로 먼저 테스트하고 충분히 빠르는지 확인하십시오. 그래프가 내장되어있어 그래프 및 여러 버전을 처리 할 수 ​​있습니다.

필요할 때까지 대안을 찾을 이유가 없습니다.

편집 : 이미 쓰여진 개체에 대한 참조가있는 조회 테이블을 채우지 않으려면 ObjectStream을 reset()해야합니다. 상대적으로 독립적 인 객체를 작성하는 경우, "최상위"객체마다 재설정하는 것이 문제가 아니지만 데이터에 복잡한 관계가있는 경우 JPA 또는 다른 것을 사용해 보는 것이 좋습니다.

+0

간단한 개체의 경우. 네이티브 직렬화는 충분합니다. +1 직접 간단한 대답. –

+0

빠른 접근 방식이 많이 있지만 개발자가 더 복잡해지면 빠를수록 빠릅니다. 당신의 시간도 중요합니다. ;) –

+0

그것은 놀랍도록 빠르지 않다 : 나의 노트북은 290005300 초에 100000 개의 데이터 객체를 썼고, 각 객체는 10 개의 문자열과 5 개의 추가 문자열을 가진지도를 포함했다. 완전히 1 500 000 개 정도의 객체. 독서가 더 빠르며 모든 것을 다시 읽는 데 5 초가 걸렸습니다. – KarlP