할 때 저장할 수 있습니 JSON or XML 데이터에서는 SQL 테이블

사용하는 경우에는 SQL또는MySQL(또는 어떤 관계에 대한 DB 그 문제)-제가 이해하는 데이터 저장에서는 정기적으로 열을 위해 더 나은 인덱싱 술과 다른 목적으로...

는 것은 로딩 및 저장JSON데이터가 때로는 많이 더 간단합니다. 과 개발을 위한 더 쉽습니다.

이 있"황금 규칙"저장을위한 원JSON데이터가 DB?

그것은 절대 잘못된 관행을까?

요약

매우 좋은 답을 주었지만,의심의 여지가 가장 잘 조직이 대답해 주@Shnugo 가치가합니다.

또한 지적에 의해 주어진 응답@Gordon Linoff 및@Amresh 들을 설명한 다른 특별한 사용 사례를 보여주고 있습니다.

하나님께 감사하고 좋은 일을 모두!

질문에 대한 의견 (1)
해결책

주요 질문 -당신은 무엇을 할 것이 데이터가? 고 -당신은 어떻게 필터링 정렬/입/이 데이터를 조작? JSON(XML)한 데이터 교환은 저장고 일반적으로 정의된 구조물,하지만 그것에 참여할 수 없으며 전형적인 조치를 실행 내에서 RDBMS. 대부분의 경우는 것이 나을 것입니다송 JSON 으로 데이터일반 테이블그리고 다시 만들 JSON 때 당신은 그것을 필요합니다.

XML/JSON1.NF

첫번째 규칙이 정규화하고,지시지 않을 저장하는 하나 이상의 비트의 정보를 하나의 열입니다. 당신이 볼 열"PersonName"와 같은 값"Mickey Mouse"? 당신은 당신이 울:변경된다. 에 대해 무엇 XML 또는 JSON? 은 이러한 유형을 깨 1.NF? 론,예고없...  그것은 완벽하게 괜찮을 저장하는 전체 구조물중 하나로 비트의 정보****는 경우하나의 정보****습니다. 당신은 비누 응답을 저장하고 싶기 때문에 그것이 필요할 수 있습이 나중에 참조(그러나 당신은지를 위해 이 데이터를 사용하의 프로세스)? 저장! 지금 상상복잡한 구조(또는 XML JSON)을 대표하는 사람(그것의 주소,더 상세히...). 지금 당신은 당신을 넣어 이것으로 하나의 열로PersonInCharge. 이것이 잘못입니까? 안't 이 오히려에 살고 적절하게 설계는 관련 테이블을 가진 외국 키를 참조 대신 XML/JSON? 는 경우에 특히 동일한 사람에서 발생할 수 있는 많은 서로 다른 행 그것은 확실히 잘못 사용하는 XML/JSON 접근 방식이다. 하지만 지금은 상상을 저장할 필요가 역사적인 데이터입니다. 당신하고 싶는 사람이's 에 대한 데이터 주어진 순간에 시간입니다. 어떤 일이 나중에 사람을 알려줍니다 새로운 주소? 아무 문제 없습니다! 이전 주소 생활에서는 XML/JSON 해야 하는 경우에 그것은... 결론:는 경우에 당신은 데이터를 저장을 계속,그것's 괜찮습니다. 이 데이터고유부분을,그's okay... 그러나 당신이 필요로 하는 경우에는내장 부속정기적으로는 경우 또는 뜻이 중복되는 중복 저장 it's 좋아하지 않습니...

물리적 스토리지

다음은 SQL 서버와 다를 수 있습니다 다른 RDBMs. XML 로 저장되지 않고 텍스트를 참조하지만,계층으로 나무입니다. 쿼리를 이것은 놀라 울 정도로 잘 수행! 이는 구조 해석되지 않습에서 문자열 수준! JSON 에서 SQL 서버(2016+)생활에서 문자열이고 해석됩니다. 진짜 원 JSON 타입(다음과 같이 네이티브 XML 타입)으로 구성되어 있습니다. 이 올 수도 있습니다 나중에,하지만 지금은 나'd 리,JSON 지 않을 것으로 성능이 뛰어로 XML 에 SQL 서버(섹션 참조 업데이트2). 모든 필요를 읽은 값을 가 JSON 이 필요한 지옥의 많은 숨겨진된 문자열은 메소드를 호출...

이 무엇을 의미합니까?

당신의 사랑스러운 DB 아티스트:-D,알고있는 저장JSON,이에 대한 일반적인 원칙의 RDBMs. 그는 알고, -는 JSON 은 매우 아마 깨 1.NF -는 JSON 에서 변경될 수 있습니다 시간(동일한 열,서로 다른 내용). -는 JSON 는 것은 쉽지 않을 읽고,그것은 매우 어려운 필터/검색/에 가입하거나 정렬합니다. -같은 작업이 변화 꽤 몇 가지 여분의 부하에 불쌍한 DB 서버 방법을 사용하여 해결할 수 있습니다(에 따라 RDBMS 당신이 사용하는)하지만 그들의 대부분 don't 하는 방식으로 작업할 수'd 요...

귀하의 질문에 대답에서 짧은

-만약 당신를 사용하지 않으려는 데이터가 저장되어 내JSON비용 작업(필터/join/일종). 저장할 수 있습니다 이것만으로 다른 모든만 존재내용입니다. 우리는 저장 많은 사진으로 Blob,그러나 우리는 것을 시도하는 필터는 모든 이미지에 대한 꽃과 함께... -하지 않는 경우 귀찮게 모든 것's 부(단지 그것을 저장하고 그것을 읽으로 한 정보의 비트) -는 경우 구조 변수는 그것이 어렵게 만들 물리적 테이블은 다음 작업 JSON data. -는 경우 구조를 깊이 중첩된 저장소에 물리적 테이블을 많이 오버헤드 없음** -사용하려는 경우 내부과 같은 데이터를'd 사용하여 관계형 테이블's 의 데이터(filter,인덱스,조인...) -당신은 당신의 것이 중복 저장(중복성) -일반:는 경우 얼굴 성능 문제는(위한 확신 것입니다 얼굴에서 그들은 일반적인 시나리오!) 로 시작할 수 있습니다 JSON 문자열 내에서 열 또는 BLOB 하고 이를 변경하는 물리적 테이블을 때 당신은 그것을 필요합니다. 내 마법 크리스탈 볼 말이 될 수 있는 내:-D

업데이트

을 찾을 몇 가지 아이디어에 대한 성능과 디스크 공간에 여기:https://stackoverflow.com/a/47408528/5089204

업데이트 2:에 대해 더 성과...

다음 주소 JSON 및 XML 지원 SQL-Server2016 사용자@mike123 지적하면문서에 공식 microsoft blog인 증거에는 실험,그쿼리 JSON10 배 빠르게를 쿼리 XMLSQL-Server. 일부에 대한 생각을 하는: 일부 크로스 검사와"실험": -다"실험"측정,많은 아니지만 성과 XML 의 대 JSON. 같은 조치의 점수가 급증 보낼 보석 빛나는 수집 동(변화)문자열을 반복되지 않는 현실적인 시나리오 -테스트된 예까지 간단한 일반적인 문! -값을 읽는 항상 동일하고도 사용됩니다. 최적화 프로그램이 표시됩니다... -지 않는 한 단어에 대해 강력한XQuery원! 제품 찾기 주어진 ID 를 가진 내에서 배열? JSON 요구를 읽고 사용하여 나중에 필터를 사용하는 동안XML도록 할 수 있는 내부XQuery 조건자. 지에 대해 말하는FLWOR... -면"실험"코드내에서 시스템을 제공합:JSON 것 같다 3 배 더 빨리(하지만 10 배). -추가/(텍스트)XPath을 줄이기보다 2 배. 에 관련된 문서는 사용자"미스터 Magoo"지적이는 이미지만,클릭미끼제목은 여전히 변경되지 않은... -와 같은 쉬운 JSON 에 주어진"실험"가장 빠른 순수한 T-SQL 접근 방식의 조합이었다그리고반환:-D 다음 코드를 보여줄 것이 더 현실적인 실험

-사용하여 JSON 과 동일한 XML 하나 이상의제품(JSON 배열 형제 대의 노드) -JSON 및 XML 은 약간 변경(10000 실행하는 번호)를 삽입 테이블이 있습니다. -가 초기화 모두의 점수가 급증 보낼 보석 빛나는 수집 테이블을 방지첫 번째 호출에-바이어스 -모든 10000 항목을 읽기 및 검색된 값은 삽을 또 다른 표입니다. -사용하여 이동10를 통해 실행됩니다 이것을 차단 열 시간을 방지첫 번째 호출에-바이어스 최종 결과는 분명히 보여줍니다,즉,JSON 보다 느리 XML(지 않는 많은,약 1.5x 에서 여전히 매우 간단합니다.) 최종 보고서: -지나치게 간단한 예제에서는 부당한 상황 JSON 보다 빠르게 수행할 수 있습니다 XML -다루는 내용은순수한 문자열에 액션하는 동안,XML 구문 분석하고 변화합니다. 이것은 오히려 비싼에서 첫 번째 작업을,하지만 속도 모든 것을 이 번이 수행됩니다. -JSON 더 있을 수도 있습에one-time작업(방지를 만들기 위한 오버헤드 내부 계층적 표현의 XML) -으로 여전히 매우 간단하지만 더 현실적인 예 XML 빠를 것이에 간단한 읽기 -있을 때마다 읽을 필요가 특정 요소의 배열을,모든 항목을 필터링는 제품 id 는 포함되는 배열에,또는 이동 경로를 아래로,JSON 수 없습니다. 그것이 구문 분석해야의 문자열이 완전히 각 시간을 잡아 그것으로... 테스트 코드

USE master;
GO
--create a clean database
CREATE DATABASE TestJsonXml;
GO
USE TestJsonXml;
GO
--create tables
CREATE TABLE TestTbl1(ID INT IDENTITY,SomeXml XML);
CREATE TABLE TestTbl2(ID INT IDENTITY,SomeJson NVARCHAR(MAX));
CREATE TABLE Target1(SomeString NVARCHAR(MAX));
CREATE TABLE Target2(SomeString NVARCHAR(MAX));
CREATE TABLE Times(Test VARCHAR(10),Diff INT)
GO
--insert 10000 XMLs into TestTbl1
WITH Tally AS(SELECT TOP 10000 ROW_NUMBER() OVER(ORDER BY (SELECT NULL))*2 AS Nmbr FROM master..spt_values AS v1 CROSS APPLY master..spt_values AS v2)
INSERT INTO TestTbl1(SomeXml)
SELECT 
N'



            ' + CAST(Nmbr AS NVARCHAR(10)) + ' year parts and labor extended maintenance is available
            1 year parts and labor

        ' + CAST(Nmbr AS NVARCHAR(10)) + '
        Road Bike



            ' + CAST(Nmbr + 1 AS NVARCHAR(10)) + ' blah
            1 year parts and labor

        ' + CAST(Nmbr + 1 AS NVARCHAR(10)) + '
        Cross Bike


'
FROM Tally;

--insert 10000 JSONs into TestTbl2
WITH Tally AS(SELECT TOP 10000 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Nmbr FROM master..spt_values AS v1 CROSS APPLY master..spt_values AS v2)
INSERT INTO TestTbl2(SomeJson)
SELECT 
N'{
    "Root": {
        "Products": {
            "ProductDescription": [
                {
                    "Features": {
                        "Maintenance": "' + CAST(Nmbr AS NVARCHAR(10)) + ' year parts and labor extended maintenance is available",
                        "Warranty": "1 year parts and labor"
                    },
                    "ProductID": "' + CAST(Nmbr AS NVARCHAR(10)) + '",
                    "ProductName": "Road Bike"
                },
                {
                    "Features": {
                        "Maintenance": "' + CAST(Nmbr + 1 AS NVARCHAR(10)) + ' blah",
                        "Warranty": "1 year parts and labor"
                    },
                    "ProductID": "' + CAST(Nmbr + 1 AS NVARCHAR(10)) + '",
                    "ProductName": "Cross Bike"
                }
            ]
        }
    }
}'
FROM Tally;
GO

--Do some initial action to avoid first-call-bias
INSERT INTO Target1(SomeString)
SELECT SomeXml.value('(/Root/Products/ProductDescription/Features/Maintenance/text())[1]', 'nvarchar(4000)')
FROM TestTbl1;
INSERT INTO Target2(SomeString)
SELECT JSON_VALUE(SomeJson, N'$.Root.Products.ProductDescription[0].Features.Maintenance')
FROM TestTbl2;
GO

--Start the test
DECLARE @StartDt DATETIME2(7), @EndXml DATETIME2(7), @EndJson DATETIME2(7);

--Read all ProductNames of the second product and insert them to Target1
SET @StartDt = SYSDATETIME();
INSERT INTO Target1(SomeString)
SELECT SomeXml.value('(/Root/Products/ProductDescription/ProductName/text())[2]', 'nvarchar(4000)')
FROM TestTbl1
ORDER BY NEWID();
--remember the time spent
INSERT INTO Times(Test,Diff)
SELECT 'xml',DATEDIFF(millisecond,@StartDt,SYSDATETIME());

--Same with JSON into Target2
SET @StartDt = SYSDATETIME();
INSERT INTO Target2(SomeString)
SELECT JSON_VALUE(SomeJson, N'$.Root.Products.ProductDescription[1].ProductName')
FROM TestTbl2
ORDER BY NEWID();
--remember the time spent
INSERT INTO Times(Test,Diff)
SELECT 'json',DATEDIFF(millisecond,@StartDt,SYSDATETIME());

GO 10 --do the block above 10 times

--Show the result
SELECT Test,SUM(Diff) AS SumTime, COUNT(Diff) AS CountTime
FROM Times
GROUP BY Test;
GO
--clean up
USE master;
GO
DROP DATABASE TestJsonXml;
GO

그 결과(SQL Server2016 익스프레스에이 서 Aspire v17 니트로 Intel i7,8GB Ram)

Test    SumTime 
------------------
json    2706    
xml     1604    
해설 (6)

이것은 너무 오래에 대한 설명입니다.

면"절대적으로 잘못",대부분의 데이터베이스는 것이 지원하지 않습니다. Okay,대부분의 데이터베이스 지원에 쉼표에서절을 보는 것 같"절대적으로 잘못". 그러나 지원을 위한 JSON 이 새로운 개발지 이전 버전과 호환되"특징".

중 하나는 명백한 경우 JSON 구조는 단순히 BLOB 다시 전달되는 응용 프로그램입니다. 다음은 논쟁--기타 다음의 오버헤드 저장 JSON 는 불필요하게 자세하에 대한 구조화된 데이터와 일반적인 분야에서 모든 기록입니다.

또 다른 경우는"sparse"열을 경우입니다. 당신은 행과 함께 많은 가능한 컬럼이지만,이에 따라 행하는 행이 있습니다.

다른 케이스를 저장할 때"중첩"레코드에서 레코드입니다. JSON 은 능력이 있습니다.

는 경우 JSON 는 일반적인 분야에 기록하려는 쿼리에서,당신은 일반적으로 더 넣고 이에 적절한 데이터베이스를 열이 있습니다. 그러나,데이터는 복잡하고있을위한 장소와 같은 형식으로 JSON.

해설 (0)

나는'll 파 내 마술 지팡이입니다. 휙! 황금에 대한 규칙을 사용하의 JSON:

*는 경우 MySQL 이 필요하지 않습을 보 _inside_JSON 고,응용 프로그램은 단순히 필요 컬렉션은 물건의 후,JSON 는 정밀한 가능성은 더 나은입니다.

*할 경우에서 검색하는 데이터 내부에 and 있 MariaDB10.0.1 또는 MySQL5.7(JSON 데이터와 함수)다음,JSONmight 다 실용적이다. MariaDB5.3's"Dynamic"열을 변형이다.

*를 하면"Entity-속성-가치"물건,다음 JSON 이 좋지 않다,하지만 그는 적어도 여러 악을. http://mysql.rjweb.org/doc.php/eav

*검색하여 인덱스 열을 가지고 있지 가치 내부에 묻혀 JSON 있습니다.

*색에 대한 의 범위에 인덱스 열 또는전체 텍스트 검색또는공간,JSON 이 가능하지 않습니다.

*을 위한디=1b=2"합성"index 지수(a,b)`은 아마 수 있't 에 가까이 오 JSON.

*JSON 잘"sparse"데이터를 인덱싱하지만,뿐만 아니라,습니다. (나는 값'missing'또는 NULL 을 위해 많은 행이 있습니다.)

*JSON 을 줄 수 있"배열"와"나무"에 의존하지 않고 추가 테이블(s). 하지만으로 발굴하고 이러한 배열/트 only,응용 프로그램에서 발견에서 SQL.

*JSON 이 세계보다 더 나 XML 등이 있습니다. (내 의견)

*원하지 않는 경우를 얻으로 JSON 문자열을 제외하고,응용 프로그램에서 다음 권축(에서 클라이언트)에 있는 저장하기로BLOB입니다. 과 대화하는 것이라 생각하십시오.jpg-아's 에서 물건을 거기에 있지만,SQL 상관하지 않습니다.

국가하면 응용 프로그램을 어쩌면 우리는 더 할 수 있습니다 특정한다.

해설 (7)

새로운 SQL 서버 기능을 제공을 위해 처리 JSON 텍스트입니다. 한 정보를 포맷 JSON 으로 저장할 수 있는 텍스트로에서는 표준 SQL Server 열과 SQL 서버에서 제공하는 함수를 검색할 수 있는 값에서 이러한 JSON 개체입니다.

    DROP TABLE IF EXISTS Person

 CREATE TABLE Person 
 ( _id int identity constraint PK_JSON_ID primary key,
 value nvarchar(max)
 CONSTRAINT [Content should be formatted as JSON]
 CHECK ( ISJSON(value)>0 )
 )

이 간단한 구조물은 유사한 표준 NoSQL 컬렉션을 만들 수 있는 NoSQL 에 데이터베이스(예:Azure DocumentDB 또는 MongoDB)는 당신이 키를 나타내는 ID 값을 나타내는 JSON.

참고로 이며 단지 일반 텍스트입니다. SQL 서버가 내장된 텍스트를 압박하는 메커니즘을 수 있는 투명한 방식으로 압축 데이터를 디스크에 저장됩니다. 압축에 의존한 언어 갈 수 있는 50%까지 데이터에 따라(유니코드를 참조하십시오 압축).

중요한 차이는 SQL 서버와 다른 일반 NoSQL 에 데이터베이스는 SQL 서버가 사용할 수 있도록 하이브리드 데이터 모델을 저장할 수 있는 여러 가지 JSON 체에서 같은"컬렉션에"그들을 결합과 함께 정기적인 관계형 열이 있습니다.

예를 들어,상상을 우리가 알고 있는 모든 사람에서 당신의 컬렉션이 있는 이름 및 성,그리고 저장할 수 있는 일반적인 내용에 대한 사람 중 하나로 JSON,및 전화번호/이메일 주소로 별도체. SQL Server2016 우리는 쉽게 만들 수 있습니다 이 구조 없이 추가 syntax:

DROP TABLE IF EXISTS Person

CREATE TABLE Person (

 PersonID int IDENTITY PRIMARY KEY,

 FirstName nvarchar(100) NOT NULL,

 LastName nvarchar(100) NOT NULL,

 AdditionalInfo nvarchar(max) NULL,

 PhoneNumbers nvarchar(max) NULL,

 EmailAddresses nvarchar(max) NULL
 CONSTRAINT [Email addresses must be formatted as JSON array]
 CHECK ( ISJSON(EmailAddresses)>0 )

 )

대신 하나의 JSON 객체를 구성할 수 있습니다 당신의 데이터에서"모음"입니다. 당신이 원하지 않는 경우 명시적으로 확인 구조의 각 JSON 열을 추가할 필요가 없 JSON check 에 모든 항목(이 예제에서 추가 확인 제약 조건에서만 EmailAddresses column).

비교할 경우 이 구조는 표준 NoSQL 수집되는 것을 확인할 수 있습할 것입니다에 빠르게 액세스 할 수 있는 강력한 형식의 데이터(이름 및 성). 따라서,이 솔루션은 좋은 선택한 하이브리드 모델을 식별할 수 있습니다 몇 가지 정보를 반복되는 모든 개체 및 기타 변수에 정보를 저장할 수 있으로 JSON. 이 방법으로 결합할 수 있는 유연성과 성능.

비교할 경우 이 구조는 스키마와 함께 사람의 테이블 AdventureWorks 데이터베이스에,당신은 알 수 있습니다 우리는 제거 관련된 여러 테이블이 있습니다.

단순 옆의 스키마 데이터 액세스 작업이 될 것입니다 간단한 비교하고 복잡한 관계형 구조입니다. 지금 읽을 수 있는 하나의 테이블에 합류하는 대신 여러 테이블이 있습니다. 면을 삽입해야 새 사람으로 관련 정보(이메일 주소,전화번호)삽입할 수 있습니다 단일 레코드에서 하나 테이블을 삽입하는 대신 하나의 레코드에서 AdventureWorks 사람 테이블,복 id 열을 찾는 외국인 핵심이 될 것을 저장하는 데 사용되는 휴대폰,이메일,주소 등입니다. 또한,이 모델에서 쉽게 삭제할 수 있습니다 한 사람이지 않고 행위 삭제를 사용하여 외국인 핵심 관계입니다.

NoSQL 에 데이터베이스의 최적화를 위한 간단하,읽기,삽입,삭제 작업–SQL Server2016 에 적용할 수 있도록 동일한 논리에 관계형 데이터베이스입니다.

JSON 제약 조건 이전 예제에서,우리가 볼 수 있는 방법을 추가하는 간단하 제약 조건이 유효성을 검사하는 열에 저장된 텍스트가 제대로 포맷되어 있습니다. 지만 JSON 없는 강력한 스키마에,당신은 또한 추가 할 수 있습니다 복잡한 제약 조건을 결합하여 읽을 함수에서 값 JSON 및 표준 T-SQL functions:

ALTER TABLE Person
 ADD CONSTRAINT [Age should be number]
 CHECK ( ISNUMERIC(JSON_VALUE(value, '$.age'))>0 )

 ALTER TABLE Person
 ADD CONSTRAINT [Person should have skills]
 CHECK ( JSON_QUERY(value, '$.skills') IS NOT NULL)
First constraint will take the value of $.age property and check is this numeric value. Second constraint will try to find JSON object in $.skills property and verify that it exists. The following INSERT statements will fail due to the violation of constraints:

INSERT INTO Person(value)
 VALUES ('{"age": "not a number", "skills":[]}')

 INSERT INTO Person(value)
 VALUES ('{"age": 35}')

체크인 제약 조건 속도가 느려질 수 있습 삽입 업데이트/프로세스 수도 있습니다 그래서 그들을 피하기 위해 필요하신 경우 더 빠르게 쓰는 성능이다.

압축 JSON 스토리지 이 있는 경우 큰 JSON 텍스트할 수 있는 명시적으로 압축 JSON 를 사용하여 텍스트 내에서 압축 기능이다. 다음 예제에서는 압축 JSON 내용은 이진 데이터로 저장되며,우리가 계산 열 압축을 해제 JSON 으로 원본 텍스트를 사용하여 압축을 해제 기능:

CREATE TABLE Person

 ( _id int identity constraint PK_JSON_ID primary key,

 data varbinary(max),

 value AS CAST(DECOMPRESS(data) AS nvarchar(max))

 )

 INSERT INTO Person(data)

 VALUES (COMPRESS(@json))

압축 및 압축 해제 기능을 사용하여 표준 GZip 으로 압축된다. 의 경우 클라이언트를 처리할 수 있 GZip 으로 압축(e.g 브라우저를 이해하는 gzip 콘텐츠)에 직접 반품 압축된 내용입니다. 참고로 이것은 성능/저장이 떨어질 수도 있습니다. 자주 사용하는 경우 쿼리에 압축된 데이터를 mig 가 느리기 때문에 성능 텍스트의 압축을 해제됩니다.

참고:JSON 함수에서만 사용할 수 있는 SQL Server2016+고 Azure SQL 데이터베이스가 있습니다.

더 읽을 수 있는 소스에서의 이 문서

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/

해설 (0)

질문이 있을 요청은:

나이 있음을 사용하여만 이 데이터베이스?

  1. 는 경우 사용할 수 있는 다른 데이터베이스를 저장하 JSON 사용하여 문서 저장 솔루션 같은 CouchDB,DynamoDB 또는 MongoDB.
  2. 이러한 문서를 저장 DB's 능력을 인덱싱하고 검색 계층적 데이터입니다.
  3. 관계형 데이터베이스를 사용하여 관계형 데이터입니다.
  4. 관계형 데이터베이스를 사용하여 보고를 위한 데이터 웨어하우징과 데이터 마이닝.

DON'T

  1. 저장소 JSON 으로 문자열이면 가능합니다.
  2. 도 가지고 올의 최대 길이 JSON data.
  3. 사용 varchar 저장 JSON(텍스트를 사용/blob 해야 하는 경우).
  4. 도 검색을 통해 저장 JSON 한 값입니다.
  5. 에 대해 걱정을 탈출 JSON 를 저장할 문자열.
해설 (1)

"황금 규칙"I 에서 사용 가능한 손으로 웨이브 형 종류의 방법으로는 필요한 경우에 JSON 으 its raw format,it's okay 를 저장할 수 있습니다. 가 있는 경우를 만들의 특별한 지점을 분석,그것은's 하지 않습니다.

예를 들면,나는'm 을 만드는 API 를 보내는 원 JSON,그리고 어떤 이유에서 이 가치가 아't 를 변경하려고,다음's괜찮아으로 그것을 저장하는것은 원 JSON. 가 있는 경우를 구문 분석,그것을 변경,업데이트,등등....다음 그렇지 않습니다.

해설 (0)

Json's 지에 relationional db's. 당신이 펼쳐 json 으로 열 및 저장소에서 db,it's 좋지만 저장 json 으로 blob 은 다음에 그것을 사용하여 데이터 기록 보관 시스템입니다.

몇 가지 이유가 있을 수 있습에 대한 전개되지 않 json 및 저장 하에서 단일한 열 결정을 촬영 한 것으로 값에는 json 필드에 사용되지 않 쿼리(또는 값을 이미 전개로 열).

또한,대부분의 json 처리하는 경우에는 모든 분야 쿼리했을 것 밖에서 sql 환경으로 sql 지에 대한 의미 json 처리합니다. 진짜 문제는 다음이되고,어디에 저장 이 json,나는 단지 그것으로 파일은 필요한 경우 쿼리를 통해 다른 시스템(불꽃 hive/etc.).

나는 것에 동의 DB 아티스트,don't 를 사용에 대한 RDBMS 관합니다. 있다 더 싼 옵션이 있습니다. 또한 json blob 과를 얻을 수 있습을 시작할 수 있습 bogging DB 디스크 공간은 시간과 함께.

해설 (0)

PostgreSQL 내장json대화는 두서없이데이터의 유형

-json -json 대 대화는 두서없

이들은 몇 가지 예:

CREATE TABLE orders (
 ID serial NOT NULL PRIMARY KEY,
 info json NOT NULL
);

INSERT INTO orders (info)
VALUES
 (
 '{ "customer": "Lily Bush", "items": {"product": "Diaper","qty": 24}}'
 ),
 (
 '{ "customer": "Josh William", "items": {"product": "Toy Car","qty": 1}}'
 ),
 (
 '{ "customer": "Mary Clark", "items": {"product": "Toy Train","qty": 2}}'
 );

PostgreSQL 제공하는 두 가지 기본 연산자->->>을 쿼리 JSON data.

운전자->반환 JSON 개체 분야에 의 열쇠이다.

운전자->>반환 JSON 개체 분야에 의한 텍스트입니다.

SELECT
 info -> 'customer' AS customer
FROM
 orders;

SELECT
 info ->> 'customer' AS customer
FROM
 orders
WHERE
 info -> 'items' ->> 'product' = 'Diaper'
해설 (0)