Postgre가 소개한 JSONB 설명SQL
PostgreSQL은 JSONB를 버전 9.4에서 막 선보였고, 이미 해커 뉴스에서 유행하고 있다.이전에 PostgreSQL에 있던 Hstore나 JSON과는 어떻게 다른가요?
이 제품의 장점과 제한은 무엇이며, 어떤 경우에 사용을 고려해야 합니까?
첫째, 는 키 = > 값 쌍만 저장할 수 있는 기여 모듈입니다.여기서 키와 값만 저장할 수 있습니다.text
, 은 sql s(sql, sql)로 할 수 )NULL
too (s로 하다
다.json
&jsonb
를 사용하면 유효한 JSON 값(스펙에 정의되어 있음)을 저장할 수 있습니다.
한 JSON과 같습니다. F.ex. JSON 표현은 다음과 같습니다.null
,true
,[1,false,"string",{"foo":"bar"}]
,{"foo":"bar","baz":[null]}
-hstore
JSON의 기능에 비하면 극히 작은 서브셋에 불과합니다(단, 이 서브셋만 필요한 경우에는 괜찮습니다).
의 유일한 차이점. "의 유일한 json
&jsonb
★★★★★★★★★★★★★★★★★★:
json
되며, 는 플레인 텍스트 형식으로 됩니다.jsonb
바이너리 되어 있습니다.
여기에는 3가지 주요 결과가 있습니다.
jsonb
에 더 합니다.json
에 따라서는 안 된다)jsonb
데 .json
json
운용에 소요되는 시간은jsonb
(& 해석은 또한 에서 일부 작업을 수행할 때마다 수행해야 합니다.json
value)를 지정합니다.
jsonb
할 수 , 두 . 둘중 할 수 .두 가지 주요 사용 사례가 있습니다.그 중 하나를 쉽게 선택할 수 있습니다.
- 에서 JSON 는 JSON의 Postgre입니다.은 이을 저장됩니다.SQL을 .사용할 필요가 있습니다.
json
. - PostgrePostgre의 JSON 값에 많은 하거나 필드에서 하는 SQL을 사용해야 .
jsonb
.
피유시:
간단한 답변은 다음과 같습니다.
- Postgre에서 JSON 조작을 많이 하는 경우정렬, 슬라이스, 스플라이싱 등의 SQL은 속도를 위해 JSONB를 사용해야 합니다.
- JSON에서 임의의 키 검색을 위해 인덱스된 조회가 필요한 경우 JSONB를 사용해야 합니다.
- 위의 어느쪽도 하지 않는 경우는, JSON 를 사용하는 것이 좋습니다.
- 키 순서, 공백 및 중복 키를 유지해야 하는 경우 JSON을 사용해야 합니다.
더 긴 답변을 원하시면 9.4 릴리즈에 가까운 완전한 "HowTo" 쓰기를 기다리셔야 합니다.
json과 jsonb의 차이에 대한 간단한 설명(Postgres Professional의 원본 이미지):
SELECT '{"c":0, "a":2,"a":1}'::json, '{"c":0, "a":2,"a":1}'::jsonb;
json | jsonb
------------------------+---------------------
{"c":0, "a":2,"a":1} | {"a": 1, "c": 0}
(1 row)
- json: 텍스트스토리지 '있는 그대로'
- jsonb: 공백 없음
- jsonb: 중복된 키가 없습니다.마지막 키가 이깁니다.
- jsonb: 키가 정렬됩니다.
jsonb 개발자의 스피치 비디오 및 슬라이드 쇼 프레젠테이션에 대한 자세한 내용.또한 강력한 jsonb 쿼리 언어를 제공하는 pg.extension인 JsQuery도 도입했습니다.
hstore
'넓은 기둥'입니다.이는 키와 값 쌍의 플랫 딕셔너리이며 항상 합리적으로 효율적인 바이너리 형식(해시 테이블, 따라서 이름)으로 저장됩니다.json
는 JSON 문서를 텍스트로 저장하여 문서가 저장될 때 검증을 수행하고 필요에 따라 출력으로 구문 분석합니다(즉, 개별 필드에 액세스). JSON j j j j j j j j j j j j j j j j j j.JSON j j j j j j j j j j j j j j j j j j j j j j j j j j j j.jsonb
는 퍼포먼스상의 이유로 단축키를 사용합니다.JSON 데이터는 입력 시 해석되어 바이너리 형식으로 저장됩니다.또, 사전의 키 순서는 유지되지 않습니다.또, 중복되는 키도 없습니다.JSONB 필드의 개별 요소에 액세스하는 것은 항상 JSON 텍스트를 해석할 필요가 없기 때문에 빠릅니다.출력 시 JSON 데이터가 재구성되고 초기 포맷이 손실됩니다.
IMO를 사용하지 않는 중요한 이유는 없습니다.jsonb
기계로 변환된 데이터를 사용하는 경우 사용할 수 있는 경우.
JSONB는 JSON의 "더 나은" 버전입니다.
예를 들어 보겠습니다.
SELECT '{"c":0, "a":2,"a":1}'::json, '{"c":0, "a":2,"a":1}'::jsonb;
json | jsonb
------------------------+---------------------
{"c":0, "a":2,"a":1} | {"a": 1, "c": 0}
(1 row)
- JSON은 공백 공간을 저장하기 때문에 키 "a"가 저장되면 공백이 표시되지만 JSONB는 표시되지 않습니다.
- JSON은 키의 모든 값을 저장합니다.이 때문에, 키 「a」에 대해서 복수의 값(2 및 1)이 표시되는 반면, JSONB는 마지막 값만을 「저장」합니다.
- JSON은 요소가 삽입되는 순서를 유지하고 JSONB는 "정렬된" 순서를 유지합니다.
- JSONB 객체는 검색 중에 데이터를 다시 기록할 필요가 없는 JSON의 "원시 데이터"가 아닌 압축 해제된 이진수리로 저장됩니다.
- JSONB는 인덱싱도 지원하므로 상당한 이점이 있을 수 있습니다.
일반적으로 객체 키 순서에 관한 레거시 전제 조건과 같은 특별한 요구가 없는 한 JSONB를 선호해야 합니다.
★★★★★★★★의 차이에 대해서json
★★★★★★★★★★★★★★★★★」jsonb
, 데이터형, 데이터형 데이터형, 이다.
은 JSON 으로 Postgre 두 합니다.SQL JSON의 JSON입니다.
json
★★★★★★★★★★★★★★★★★」jsonb
이러한 데이터 유형의 효율적인 쿼리 메커니즘을 구현하기 위해 PostgreSQL은 섹션 8.14.6에 설명된 jsonpath 데이터 유형도 제공합니다.
json
★★★★★★★★★★★★★★★★★」jsonb
데이터 유형은 입력과 거의 동일한 값 집합을 받아들입니다.실질적인 주요 차이점은 효율성의 한 가지입니다.json
에는 입력각 시 .데이터 타입은 "Data type", "Data type", "Data Type"은 "Data Type"으로 해야 합니다.jsonb
데이터는 분해된 바이너리 형식으로 저장되므로 변환 오버헤드가 추가되어 입력 속도가 다소 느려지지만 재파싱이 필요하지 않으므로 처리 속도가 상당히 빨라집니다.jsonb
는 인덱스를 지원하므로 상당한 이점이 있을 수 있습니다.냐하 because는
json
텍스트의 하지 않은 오브젝트 내의 키 순서를 합니다.type은 입력 텍스트의 한 복사본을 저장합니다.이는 토큰 간의 의미상 중요하지 않은 공백과 JSON 객체 내의 키 순서를 유지합니다.또한 값 내의 JSON 객체에 동일한 키가 여러 개 포함되어 있으면 모든 키/값 쌍이 유지됩니다(처리 함수는 마지막 값을 작동 값으로 간주합니다). by by by by byjsonb
에서는 공백이 유지되지 않고 개체 키의 순서가 유지되지 않으며 중복 개체 키가 유지되지 않습니다.입력에 중복 키가 지정되면 마지막 값만 유지됩니다.대부분의 를 JSON으로 저장하는 것을 합니다.
jsonb
오브젝트 키의 순서에 관한 레거시 전제 조건 등 특별한 요구가 있는 경우는 제외합니다.PostgreSQL에서는 데이터베이스당 1개의 문자 세트 부호화만 허용됩니다.따라서 데이터베이스 인코딩이 UTF8이 아닌 한 JSON 타입은 JSON 사양에 엄밀하게 준거할 수 없습니다.데이터베이스 인코딩으로 나타낼 수 없는 문자를 직접 포함하려고 하면 실패합니다.반대로 데이터베이스 인코딩에서는 나타낼 수 있지만 UTF8에서는 나타낼 수 없는 문자는 허용됩니다.
출처 : https://www.postgresql.org/docs/current/datatype-json.html
오늘 PostgresOpen에 갔는데 벤치마크 속도가 MongoDB보다 훨씬 빠릅니다.선정이 500% 정도 빨랐던 것 같아요.거의 모든 것이 MongoDB와 비교했을 때 200% 이상 빨랐습니다.단, 현재 업데이트에서는 JSON 컬럼 전체를 완전히 고쳐 써야 합니다.MongoDB가 더 잘 처리합니다.
JSONB의 진 인덱스는 정말 대단하네요.
포스트그레도SQL은 내부적으로 JSONB 유형을 유지하며 기본적으로 숫자, 텍스트, 부울 등의 유형과 일치합니다.
JSONB를 사용하여 가입할 수도 있습니다.
스토어드 프로시저용 PLv8을 추가하면 Node.js 개발자에게는 기본적으로 꿈이 실현됩니다.
또한 JSONB는 바이너리로 저장되므로 모든 공백을 제거하고, 속성의 순서를 변경하며, 마지막으로 발생한 속성을 사용하여 중복된 속성을 제거합니다.
JSONB 컬럼과 대조되는 JSONB 컬럼에 대해 쿼리할 때 인덱스 이외에 Postgre 컬럼이 있다.SQL은 실제로 모든 행에서 텍스트를 JSON으로 변환하는 기능을 실행할 필요가 없습니다.따라서 혼자 있는 시간이 크게 절약될 수 있습니다.
위의 어떤 답변에서도 언급되지 않은 또 다른 중요한 차이점은 다음과 같은 방정식 연산자가 없다는 것이다.json
타이핑은 하지만, 를 위한 것이 있습니다.jsonb
.
은 '할 수 없다'는 뜻이죠.DISTINCT
를 합니다.json
및('' / '/' 사용 )DISTINCT ON
대신, 이런 경우 때문에 항상 가능한 것은 아닙니다.)
내가 알기로는
현재 존재하는 hstore(Postgre에서)SQL 9.3)에서는 키/값 쌍의 값으로 다른 개체 및 어레이를 중첩할 수 없습니다.단, 향후 hstore 패치에서는 네스트를 할 수 있습니다.이 패치는 9.4 릴리즈에는 포함되어 있지 않으며 조만간 포함되지 않을 수 있습니다.
현재 존재하는 json은 중첩을 허용하지만 텍스트 기반이므로 인덱싱이 허용되지 않으므로 "느리다"
9.4로 출시되는 jsonb는 현재 json의 네스팅 기능과 hstore의 GIN/GIST 인덱싱을 갖추고 있어 빠릅니다.
Postgre 관련 작업자SQL 9.4에서는 새로운 고속 jsonb 타입이 MongoDB와 같은 NoSQL 데이터 스토어를 사용하는 사용자에게 어필할 것으로 생각되지만, 현재는 관계형 데이터베이스와 쿼리 가능한 비구조화 데이터를 한 지붕 아래 결합할 수 있습니다.
HStore2/jsonb가 9.4에서 가장 중요한 패치인 이유
Postgr의 벤치마크SQL 9.4 jsonb는 MongoDB와 동등하거나 경우에 따라서는 MongoDB보다 빠른 것으로 보입니다.
http://texture.io/alphabetum/postgresql-incl-hstore-vs-mongodb
언급URL : https://stackoverflow.com/questions/22654170/explanation-of-jsonb-introduced-by-postgresql
'programing' 카테고리의 다른 글
바깥쪽 div 크기가 변경되면 스크롤 가능한 div를 바닥에 고정합니다. (0) | 2023.03.23 |
---|---|
잭슨과 열거를 역직렬화하는 중 (0) | 2023.03.23 |
시도된 가져오기 오류: 'Switch'가 'react-router-dom'에서 내보내지지 않았습니다. (0) | 2023.03.23 |
스프링 부트에서 카페인을 사용하여 캐시별로 다른 사양을 설정할 수 있습니까? (0) | 2023.03.18 |
HttpPost에서 매개 변수를 사용하는 방법 (0) | 2023.03.18 |