2012-04-18 8 views
28

Tôi dự định lưu trữ chuỗi json_encoded trên cơ sở dữ liệu của mình. Tôi không thể nói chính xác độ dài của nó, nhưng tôi chắc chắn nó sẽ dài. Mối quan tâm của tôi là loại trường tôi sẽ sử dụng cho điều này, là nó blob hoặc text?Tôi có nên sử dụng blob hoặc văn bản cho JSON trong MySQL không?

Tôi thích nơi tôi có thể tiết kiệm dung lượng càng nhiều càng tốt trong tìm kiếm nhanh, trong mọi trường hợp tôi có cột khác nơi tôi chỉ nên lập chỉ mục.

Trả lời

24

blob thường dành cho những thứ như hình ảnh, tệp nhị phân v.v. text phải đủ tốt cho trường hợp của bạn hoặc bạn có thể sử dụng longtext.

Tìm kiếm khôn ngoan, vì bạn đang lưu trữ json_encode 'công cụ, bạn vẫn cần phải gọi json_decode trên đó để nó hữu ích trong ứng dụng của bạn, tôi không nghĩ lựa chọn các vấn đề về kiểu dữ liệu trong trường hợp này.

Cách tốt hơn là bình thường hóa thiết kế cơ sở dữ liệu của bạn thay vì lưu trữ nội dung có liên quan trong một chuỗi lớn json.

+2

Cảm ơn thông tin chi tiết của bạn. –

+1

Tôi khoảng 2 năm và 11 tháng sau đó, nhưng đối với tải trọng cho webhook, lưu trữ JSON được tuần tự hóa trong khi đợi gửi nó có vẻ như là một trường hợp sử dụng tốt cho nó. Tôi yêu phản hồi nếu ai đó nghĩ khác. – Mave

+2

Pinterest cũng đang lưu trữ JSON trong 'văn bản', chúng [đã xuất bản gần đây trong bài viết này (cuộn xuống một nửa)] (https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled- hạm đội mysql của chúng tôi). – DanFromGermany

21

Như đã nêu trong tài liệu của MySQL, vì 5.7.8 một kiểu dữ liệu JSON gốc được hỗ trợ.

Các kiểu dữ liệu JSON cung cấp những ưu điểm so với lưu trữ JSON định dạng chuỗi trong một cột chuỗi:

  • tự động xác nhận các tài liệu JSON được lưu trữ trong các cột JSON. Tài liệu không hợp lệ tạo ra lỗi.
  • Định dạng bộ nhớ được tối ưu hóa. Các tài liệu JSON được lưu trữ trong các cột JSON được chuyển đổi thành định dạng nội bộ cho phép truy cập nhanh vào các thành phần tài liệu. Khi máy chủ sau đó phải đọc một giá trị JSON được lưu trữ ở định dạng nhị phân này, giá trị không cần phải được phân tích cú pháp từ một biểu diễn văn bản. Định dạng nhị phân được cấu trúc để cho phép máy chủ tìm kiếm các giá trị con hoặc các giá trị lồng nhau trực tiếp bằng chỉ mục khóa hoặc mảng mà không đọc tất cả các giá trị trước hoặc sau chúng trong tài liệu.

Vì vậy, như tài liệu MySQL nêu rõ, loại dữ liệu JSON nên được sử dụng chứ không phải văn bản.