2012-04-18 2 views
28

내 데이터베이스에 json_encoded 문자열을 저장할 계획입니다. 나는 정확하게 그 길이가 될 것이라고 말할 수는 없지만 오래 갈 것이라고 확신한다. 내 관심사는 이것을 위해 사용할 필드 유형은 blob 또는 text입니까?MySQL에서 JSON 용 BLOB 또는 텍스트를 사용해야합니까?

빠른 검색보다 가능한 많은 공간을 절약 할 수있는 곳을 선호합니다. 어떤 경우에는 인덱스를 사용해야하는 다른 열이 있습니다.

답변

24

blob 이미지 같은 것들에 대한 일반적으로, 바이너리 등 text 귀하의 경우 충분해야한다, 또는 당신은 정말 문제의 경우 더 큰 공간의 용량을 가지고있는 longtext를 사용할 수 있습니다.

검색 할 때는 json_encode 데이터를 저장하기 때문에 응용 프로그램에서 유용하게 사용하려면 json_decode을 호출해야합니다.이 경우 데이터 유형 선택에 문제가 없다고 생각합니다.

더 좋은 방법은 json의 큰 문자열 하나에 관련 내용을 저장하는 대신 데이터베이스 디자인을 표준화하는 것입니다.

+2

친절한 통찰력에 감사드립니다. –

+1

저는 약 2 년 11 개월 쯤 되겠지만 webhooks의 페이로드에 대해서는 직렬화 된 JSON을 저장하는 동안 기다리는 동안 그것을 저장하는 것이 좋습니다. 누군가가 다르게 생각한다면 나는 피드백을 좋아합니다. – Mave

+2

Pinterest도 JSON을'text'에 저장하고 있습니다. 최근에이 기사에 게시했습니다 (중간에 스크롤 다운). (https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled- 우리 - mysql 함대). – DanFromGermany

21

MySQL의 설명에서와 같이 5.7.8은 기본 JSON 데이터 유형이 지원되므로 JSON 칼럼에 저장된 JSON 문서

  • 자동 검증 :

    JSON 데이터 유형은 문자열 열에 JSON 형식 문자열을 저장하는 동안 다음 이점을 제공한다. 잘못된 문서로 인해 오류가 발생합니다.

  • 최적화 된 저장 형식. JSON 열에 저장된 JSON 문서는 문서 요소에 대한 빠른 읽기 액세스를 허용하는 내부 형식으로 변환됩니다. 서버가 나중에이 바이너리 형식으로 저장된 JSON 값을 읽어야하는 경우 값을 텍스트 표현에서 파싱 할 필요는 없습니다. 바이너리 형식은 서버에서 문서의 앞이나 뒤에있는 모든 값을 읽지 않고 서버가 키 또는 배열 인덱스로 직접 하위 객체 또는 중첩 값을 조회 할 수 있도록 구성되어 있습니다.

MySQL 설명서에서 언급했듯이 텍스트가 아닌 JSON 데이터 형식을 사용해야합니다.

관련 문제