2015-11-11 14 views
53

Trong MySQL 5.7, kiểu dữ liệu mới để lưu trữ JSON data in MySQL bảng đã được thêm . Nó rõ ràng sẽ là một thay đổi lớn trong MySQL. Họ liệt kê một số lợi íchHỗ trợ JSON gốc trong MYSQL 5.7: những ưu và khuyết điểm của kiểu dữ liệu JSON trong MYSQL là gì?

Document Validation - Chỉ tài liệu JSON hợp lệ có thể được lưu trữ trong một JSON cột , vì vậy bạn sẽ có được xác nhận tự động các dữ liệu của bạn.

Truy cập hiệu quả - Quan trọng hơn, khi bạn lưu trữ tài liệu JSON trong cột JSON, nó không được lưu trữ dưới dạng giá trị văn bản thuần túy. Thay vào đó, nó được lưu trữ ở định dạng nhị phân được tối ưu hóa cho phép truy cập nhanh hơn vào đối tượng thành viên và phần tử mảng.

Hiệu suất - Cải thiện truy vấn của bạn hiệu suất bằng cách tạo chỉ mục trên các giá trị trong cột JSON. Điều này có thể đạt được với “chỉ số chức năng” trên cột ảo.

Thuận tiện - Cú pháp nội tuyến bổ sung cho cột JSON làm cho nó rất tự nhiên để tích hợp truy vấn tài liệu trong SQL của bạn. Ví dụ: ví dụ (features.feature là cột JSON): SELECT feature->"$.properties.STREET" AS property_street FROM features WHERE id = 121254;

WOW! chúng bao gồm một số tính năng tuyệt vời. Bây giờ nó dễ dàng hơn để thao tác dữ liệu. Bây giờ có thể lưu trữ dữ liệu phức tạp hơn trong cột. Vì vậy, MySQL hiện có hương vị với NoSQL.

Bây giờ tôi có thể tưởng tượng một truy vấn cho dữ liệu JSON cái gì đó như

SELECT * FROM t1 
WHERE JSON_EXTRACT(data,"$.series") IN 
( 
SELECT JSON_EXTRACT(data,"$.inverted") 
FROM t1 | {"series": 3, "inverted": 8} 
WHERE JSON_EXTRACT(data,"$.inverted")<4); 

Vì vậy, tôi không bao giờ nghĩ đến một cấu trúc giản đồ phức tạp và các phím nước ngoài trong MySQL. Tôi lưu trữ các mối quan hệ phức tạp chỉ bằng một vài bảng. Liệu nó có tốt không? Nó có phá vỡ bình thường không. Nếu điều này là có thể thì tôi đoán nó sẽ hoạt động như NoSQL trong cột MySQL. Tôi thực sự muốn biết thêm về tính năng này. Ưu điểm và nhược điểm của kiểu dữ liệu JSON JSON.

+0

oh xin đừng nói những gì tôi nghĩ rằng bạn đang nói. [Ở đây, đọc này] (http://stackoverflow.com/a/32620163).Của bạn là một biến thể khác trên một ý tưởng tồi. – Drew

+0

@Drew Bạn đã đưa ra một câu trả lời lớn. Nhưng nó không phải là câu hỏi của tôi. Tôi chỉ muốn biết rằng nếu chúng ta viết một truy vấn cho dữ liệu json thì chúng ta có thể bỏ qua các quy tắc sql. beacuse chúng tôi không cần nhiều bảng – Imran

+0

bạn nói 'Bây giờ có thể lưu trữ dữ liệu phức tạp hơn trong cột'. Hãy cẩn thận – Drew

Trả lời

35

Sau đây từ MySQL 5.7 brings sexy back with JSON âm thanh tốt với tôi:

Sử dụng JSON Loại dữ liệu trong MySQL đi kèm với hai ưu điểm so với lưu trữ chuỗi JSON trong một lĩnh vực văn bản:

xác nhận dữ liệu. Tài liệu JSON sẽ được xác thực tự động và tài liệu không hợp lệ sẽ tạo ra lỗi. Cải thiện bộ nhớ trong định dạng. Dữ liệu JSON được chuyển đổi thành định dạng cho phép đọc nhanh quyền truy cập vào dữ liệu ở định dạng có cấu trúc. Máy chủ có thể truy cập các phụ đề tra cứu hoặc giá trị lồng nhau theo khóa hoặc chỉ mục, cho phép thêm tính linh hoạt và hiệu suất .

...

hương vị chuyên ngành của NoSQL cửa hàng (Document DBS, cửa hàng khóa-giá trị và Graph DBS) có lẽ tốt hơn tùy chọn đối với trường hợp sử dụng cụ thể của họ, nhưng việc bổ sung các datatype này có thể cho phép bạn giảm độ phức tạp của bạn công nghệ ngăn xếp. Giá là khớp nối với cơ sở dữ liệu MySQL (hoặc tương thích). Nhưng không phải là vấn đề đối với nhiều người dùng.

Lưu ý ngôn ngữ về xác thực tài liệu vì nó là một yếu tố quan trọng. Tôi đoán một thử nghiệm pin cần phải được thực hiện để so sánh hai phương pháp tiếp cận. Hai con người:

  1. Mysql với kiểu dữ liệu JSON
  2. Mysql không

Lưới có nhưng slideshares cạn như bây giờ về chủ đề mysql/json/hiệu suất so với những gì tôi nhìn thấy.

Có lẽ bài đăng của bạn có thể là trung tâm của nó. Hoặc có lẽ hiệu suất là một sau khi suy nghĩ, không chắc chắn, và bạn chỉ vui mừng để không tạo ra một loạt các bảng.

+5

Một con; Kiểu dữ liệu JSON không được bảng Mysql hỗ trợ, như kiểu dữ liệu, TEXT & BLOB. Điều này có nghĩa là nếu bảng tạm thời là bắt buộc, nó sẽ tạo một bảng dựa trên đĩa không phải bộ nhớ. Một số trường hợp khi một bảng tạm thời được sử dụng được nêu ở đây: https://dev.mysql.com/doc/refman/5.7/en/internal-temporary-tables.html –

6

Tôi gặp sự cố này gần đây và tôi tổng hợp các trải nghiệm sau:

1, Không có cách nào giải quyết tất cả câu hỏi. 2, Bạn nên sử dụng JSON đúng cách.

Một trường hợp:

Tôi có một bảng tên là: CustomField, và nó phải hai cột: name, fields. name là một chuỗi cục bộ, nó nội dung nên thích:

{ 
    "en":"this is English name", 
    "zh":"this is Chinese name" 
    ...(other languages) 
} 

fields nên như thế này:

[ 
    { 
    "filed1":"value", 
    "filed2":"value" 
    ... 
    }, 
    { 
    "filed1":"value", 
    "filed2":"value" 
    ... 
    } 
    ... 
] 

Như bạn có thể thấy, cả namefields có thể được lưu lại dưới dạng JSON, Và nó hoạt động!

Tuy nhiên, nếu tôi sử dụng số name để tìm kiếm bảng này rất thường xuyên, tôi nên làm gì? Sử dụng JSON_CONTAINS, JSON_EXTRACT ...? Rõ ràng, không nên lưu nó thành JSON nữa, chúng ta nên lưu nó vào một bảng độc lập: CustomFieldName.

Từ trường hợp trên, tôi nghĩ rằng bạn nên giữ những ý tưởng trong tâm trí:

  1. Tại sao MYSQL hỗ trợ JSON?
  2. Tại sao bạn muốn sử dụng JSON? Logic kinh doanh của bạn có cần điều này không? Hay có cái gì khác?
  3. Không bao giờ được lười biếng

Cảm ơn

+1

Bạn có thể quan tâm trong việc sử dụng một cột VIRTUAL. https://www.percona.com/blog/2016/03/07/json-document-fast-lookup-with-mysql-5-7/ – Bell

Các vấn đề liên quan