큰 JSON 데이터 세트에서 PostgreSQL과 MongoDB 중 어느 것이 더 빠릅니까?


10

나는 ~ 300 바이트의 9m JSON 객체로 큰 데이터 세트를 가지고 있습니다. 기본적으로 링크 (URL, 제목 및 작성자 ID) 및 설명 (텍스트 및 작성자 ID) + 메타 데이터 인 링크 애그리 게이터의 게시물입니다.

하위 레코드를 가리키는 ID를 가진 하나의 배열 필드가 있다는 사실을 제외하고는 테이블에서 관계형 레코드 일 수 있습니다.

어떤 구현이 더 견고합니까?

  1. PostgreSQL 데이터베이스의 JSON 객체 (하나의 열이있는 하나의 큰 테이블, 즉 JSON 객체)
  2. MongoDB의 JSON 객체
  3. JSON 객체를 열로 분해하고 PostgreSQL에서 배열을 사용하십시오.

조인의 성능을 극대화하고 싶기 때문에 흥미로운 분석을 찾을 때까지 데이터를 마사지하고 탐색 할 수 있습니다.이 시점에서 데이터를 각 분석에 적합한 형식으로 변환하는 것이 더 좋습니다.


눈송이를 확인하고 싶을 수도 있습니다. 구조화 된 데이터와 반 구조화 된 데이터를 함께 처리 할 수 ​​있습니다. www.snowflake.net

"조인 성능 극대화"가 의미하는 바를 확장해야한다고 생각합니다. 무엇에 합류?
Spacedman

답변:


10

데이터로드의 경우 Postgre가 MongoDB를 능가합니다. 쿼리 카운트를 반환 할 때 MongoDB는 거의 항상 빠릅니다. PostgreSQL은 인덱스를 사용하는 쿼리에 대해 거의 항상 빠릅니다.

이 확인 웹 사이트 추가 정보를 원하시면도 하나. 그들은 매우 자세한 설명이 있습니다.


매우 좋은 링크, 특히 첫 번째 링크는 더 상세하고 철저하게 보입니다. 연도 (문자열)를 검색하고 레코드 ID (int)를 반환 할 때 potgresql은 약 4 배 빠르지 만 작성자를 반환 할 때 크기의 순서는 같습니다. MongoDB는 작성자를 반환 할 때 약 20 % 느려집니다. int 반환과 이것을 설명 할 수있는 문자열 반환 사이에 근본적인 차이점이 있습니까? 즉, recid가 문자열이면 postgresql의 장점이 사라지고 저자의 경우와 거의 동일합니까?
MASL

1

Mongodb의 스키마없는 디자인에서 더 많은 이점을 얻을 수 있습니다. 즉석에서 데이터 구조를 매우 쉽게 수정할 수 있습니다.

Mongodb에 가입하는 것은 없습니다. 따라서 데이터에 대한 생각과 사용 방법은 문서 기반 및 스키마없는 DB 환경을 고려하여 수정해야합니다.

관점과 우선 순위가 변함에 따라 속도가 덜 중요해질 수 있습니다.

도움이 되길 바랍니다.

토드


가장 최근 벤치 마크에서, PostgreSQL은 완전히 MongoDB를가 ... 소유
QUIT했습니다 - Anony - 무스

@ Anony-Mousse : 흥미 롭습니다. 당신은 어떤 소스를 알고 있습니까?
Isaac

예를 들어 tiborsimko.org/postgresql-mongodb-json-select-speed.htmlenterprisedb.com/postgres-plus-edb-blog/marc-linster/... 다른 대답에서. 중요한 이유는 Postgres에 좋은 인덱스가 있고 MongoDB의 인덱스는 그만한 가치가 없다는 것입니다. 또한 Postgres는 BSON 지원 및 JSON 처리를위한 기타 추가 기능을 제공하여 성능이 크게 향상되었습니다. 그렇기 때문에 첫 번째 버전보다 훨씬 빨라졌습니다.
종료 : 익명-무스

0

언급 한 숫자에 대해서는 모든 대안이 효과가 있다고 생각합니다 (읽기 : 합리적인 시간에 분석을 완료 할 수 있음). 결과가 훨씬 빨라질 수있는 디자인을 권장합니다.

이전에 대답했듯이 일반적으로 postgresql은 mongo보다 빠르며 몇 배는 4 배 이상 빠릅니다. 예를 들어보십시오 : http://www.enterprisedb.com/postgres-plus-edb-blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer-reality

조인의 성능 향상에 관심이 있다고 말했습니다. 필자는 엔티티 (예 : 게시물, 저자) 간의 유사성을 계산하는 데 관심이 있다고 가정하므로 주로 테이블을 자체 (예 : 게시물 또는 저자)와 결합하고 집계합니다.

또한 초기로드 후 데이터베이스가 읽기 전용이므로 문제를 인덱스 사용에 매우 적합하게 만듭니다. 인덱스 업데이트가 없으므로 인덱스 업데이트 비용을 지불하지 않으며 인덱스를위한 추가 스토리지가 있다고 생각합니다.

postgres를 사용하고 두 테이블에 데이터를 저장했을 것입니다.

테이블 포스트 생성 (post_id integer, url varchar (255), author_id integer);

-데이터를로드 한 다음 인덱스를 만듭니다. -이는 더 빠른로드와 더 나은 인덱스로 이어질 것입니다 테이블 변경 포스트 추가 제약 조건 post_pk primary key (post_id); 게시물에 post_author 인덱스를 만듭니다 (author_id);

테이블 주석 작성 (comment_id 정수, post_id 정수, author_id 정수, 주석 varchar (255)); 테이블 주석 변경 제약 조건 comment_pk 기본 키 (comment_id); 주석에 index_author 색인을 작성하십시오 (author_id); 주석에 대한 comment_post 색인을 작성하십시오 (post_id);

그런 다음 select m과 같은 쿼리의 주석을 기반으로 저자 유사성을 계산할 수 있습니다. m_author_id와 같은 author_id, a. m_author_id로 author_id, m으로 주석의 게시물로 count (distinct m.post_id)를 m.author_id에 의해 (post_id) 그룹으로 사용하여 주석에 참여합니다. author_id

nlp에 대한 주석에서 단어를 토큰 화하는 데 관심이있는 경우 다른 테이블을 추가하지만 데이터의 양을 크게 늘리는 것을 기억하십시오. 일반적으로 데이터베이스의 전체 토큰 화를 나타내지 않는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.