2009-12-26 5 views
2

큰 JSON 파일을 데이터베이스에 저장하는 가장 좋은 방법은 무엇입니까? CouchDB에 대해 알고 있지만, 사용하고있는 크기의 파일을 지원하지 않을 것이라고 확신합니다.큰 JSON 문서 (2MB 이상)를 데이터베이스에 저장하는 가장 좋은 방법은 무엇입니까?

디스크를 읽고 읽는 데 필요한 시간 때문에 디스크에서 읽는 것을 꺼려합니다. 이 파일은 ~ 30,000 개 요소의 배열입니다. 따라서 모든 요소를 ​​기존 데이터베이스에 별도로 저장하면 모든 요소를 ​​선택하려고 할 때 나를 죽일 것입니다.

+0

CouchDB는 크기가 2MB를 초과하는 문서를 처리 할 수 ​​있다고 확신합니다. 첫 번째 Google은 4GB 제한을 참조합니다. 아니면 2MB x 30,000을 처리 할 수 ​​있다고 생각하지 않습니까? –

+1

많은 근거없는 추측이 ... –

+0

therefromhere : 아니요, 2MB는 30,000 개의 항목이 담긴 JSON 배열입니다. 4GB 제한에 대한 확신이 있습니까? 이 사람은 1MB라고 말합니다. http://stackoverflow.com/questions/28975/anyone-using-couchdb/118273#118273 – Paul

답변

2

한 번에 하나 또는 여러 개의 특정 요소에 액세스하려는 경우 큰 JSON을 기존의 DB 행 및 열로 나누는 방법은 없습니다.

한 번에 액세스하려는 경우 XML로 변환하여 DB에 저장할 수 있습니다 (XML 압축은 압축률이 높음). 대부분의 DB 엔진은 XML 객체 저장을 지원합니다. 그런 다음 한 번에 읽을 수 있으며 필요할 경우 SAX와 같은 순방향 읽기 방식이나 기타 효율적인 XML 읽기 기술을 사용하여 JSON으로 다시 변환 할 수 있습니다.

그러나 @therefrom 여기에 주석을 달아서, 항상 하나의 큰 문자열로 저장할 수 있습니다. (다시 압축하면 아무것도 향상시킬 수 있습니다).

1

여기에 다양한 선택 사항이 없으므로 memcached과 같은 것을 사용하여 RAM에 캐시하거나 데이터 봉 (PostgreSQL/MySQL 또는 CouchDB와 같은 RODMS)을 사용하여 디스크를 읽고 쓸 수 있습니다. 이들에 대한 유일한 대안은 memcached에서 가장 자주 액세스하는 문서를 읽기 위해 캐싱하는 하이브리드 시스템입니다.이 시스템은 많은 사이트가 작동하는 방식입니다.

2 + MB는 데이터베이스에 엄청난 거래가 아니며 충분한 RAM을 갖추고 있으면 캐싱과 RAM 사용을 효과적으로 지능적으로 수행 할 수 있습니다. 이 문서에 액세스 할 빈도 및 빈도 패턴과 사용자가 제공해야하는 사용자의 빈도 패턴을 알고 있습니까?

+0

예, 전체 문서를 제공해야하는 경우가 종종 있습니다. 경우에 따라 JSON 문서의 개별 항목을 업데이트해야 할 수도 있습니다. 나는 디스크에 캐싱을하고 RAM에 변화를 가하는 것이 어떻게 든 갈 길이라고 생각합니다. – Paul

3

CouchDB에는 2megs를 초과하는 많은 문서가 있으며 잘 처리합니다. 이러한 한계는 시대에 뒤떨어져 있습니다.

유일한주의 사항은 기본 자바 스크립트 뷰 서버가 상당히 느린 JSON 파서를 가지고 있기 때문에 큰 문서에서보기 생성에 다소 시간이 걸릴 수 있다는 것입니다. 내 Python view server을 C 기반의 JSON 라이브러리 (jsonlib2, simplejson, yajl)와 함께 사용하거나 JSON 직렬화를 수행하지도 않는 내장 된 erlang 뷰를 사용하여 뷰 생성을 충분히 빠르게 수행 할 수 있습니다.