2009-02-02 28 views
5

Tôi đang lưu trữ một chuỗi JSON trong cơ sở dữ liệu đại diện cho một tập hợp các thuộc tính. Trong đoạn mã phía sau, tôi xuất nó và sử dụng nó cho một số logic tùy chỉnh. Về cơ bản, tôi chỉ sử dụng nó như một cơ chế lưu trữ. Tôi hiểu XML là phù hợp hơn cho điều này, nhưng tôi đọc rằng JSON là nhanh hơn và ưa thích.JSON có được sử dụng chỉ cho JavaScript không?

Thực tiễn tốt là sử dụng JSON nếu ý định không sử dụng chuỗi ở phía máy khách?

Trả lời

8

JSON là một cách hoàn toàn hợp lệ để lưu trữ dữ liệu có cấu trúc và đơn giản hơn và ngắn gọn hơn XML. Tôi không nghĩ rằng đó là một "thực hành xấu" để sử dụng nó cho cùng một lý do ai đó sẽ sử dụng XML miễn là bạn hiểu và được OK với những hạn chế của nó.

2

Vâng tôi nghĩ JSON rất tuyệt. Đó là một chuẩn mở và có thể được sử dụng bởi bất kỳ ngôn ngữ lập trình nào. Hầu hết các ngôn ngữ lập trình đều có thư viện để phân tích cú pháp và mã hóa JSON.

5

Cho dù đó là thực hành tốt tôi không thể nói, nhưng nó đánh tôi như là lẻ. Có các trường XML trong cơ sở dữ liệu SQL của bạn ít nhất có thể truy vấn (SQL Server 2000 trở lên, MySQL và các phần mềm khác) nhưng thường không phải là một phương sách cuối cùng cho siêu dữ liệu. JSON thường là nhà cung cấp dịch vụ giữa JavaScript và mặt sau của bạn, chứ không phải chính bản thân lưu trữ trừ khi bạn có một đầu cuối JSON document orientated database chẳng hạn như CouchDB hoặc SOLR vì JSON tự vay hoàn toàn để lưu trữ tài liệu. Không nói rằng tôi không đồng ý với việc sử dụng JSON như là một bộ nối tiếp dữ liệu đơn giản (có nghĩa là, không phải tuần tự hóa) trên XML, nhưng tôi sẽ không đi vào một JSON vs XML rant chỉ vì lợi ích của nó:).

Nếu bạn không sử dụng JSON cho tính di động giữa 2 ngôn ngữ và bạn tích cực, bạn sẽ không bao giờ truy vấn dữ liệu từ SQL, bạn sẽ tốt hơn với serialization mặc định từ .NET.

0

JSON ngắn hơn, vì vậy nó sẽ sử dụng ít không gian hơn trong cơ sở dữ liệu của bạn. Tôi có thể sử dụng nó thay vì XML hoặc viết định dạng của riêng tôi.

Mặt khác, tìm kiếm các kết quả phù hợp sẽ hút - bạn sẽ phải sử dụng "nơi json như '% somevalue%'" sẽ rất chậm. Đây là cùng một giới hạn với bất kỳ chiến lược lưu trữ văn bản khác (bao gồm xml).

2

JSON chỉ là một ngôn ngữ đánh dấu như XML và do đặc điểm kỹ thuật hạn chế hơn là kích thước nhỏ hơn và nhanh hơn để tạo và phân tích cú pháp. Vì vậy, từ khía cạnh đó nó hoàn toàn chấp nhận được để sử dụng trong cơ sở dữ liệu nếu bạn cần đánh dấu cấu trúc đặc biệt (và bạn hoàn toàn chắc chắn rằng việc sử dụng các bảng là không thể và/hoặc giải pháp tốt nhất).

Tuy nhiên, bạn không nói bạn đang sử dụng cơ sở dữ liệu nào. Nếu đó là SQL Server 2005 hoặc mới hơn thì bản thân cơ sở dữ liệu có khả năng mở rộng khi xử lý XML, bao gồm kiểu dữ liệu XML, hỗ trợ XQuery và khả năng tối ưu hóa các biểu thức XQuery như một phần của kế hoạch thực hiện. Vì vậy, nếu đây là trường hợp tôi muốn được nhiều hơn nữa nghiêng để sử dụng XML và tận dụng lợi thế của cơ sở dữ liệu của cơ sở dữ liệu.

4

Bạn không phải là người duy nhất sử dụng JSON để lưu trữ dữ liệu. CouchDB là một cơ sở dữ liệu hướng tài liệu sử dụng JSON để lưu trữ thông tin. Ban đầu họ đã lưu trữ thông tin đó dưới dạng XML, sau đó chuyển sang JSON. Truy vấn-ing được thực hiện thông qua HTTP cũ tốt.

Bằng cách này, CouchDB nhận được một số sự chú ý thời gian gần đây và được hỗ trợ bởi IBMApache Software Foundation. Nó được viết bằng Erlang và hứa hẹn rất nhiều (IMHO).

1

Hãy nhớ rằng JSON có tất cả các vấn đề tương tự mà XML có như một kho lưu trữ dữ liệu phía sau; cụ thể là, nó không có cách nào thay thế một cơ sở dữ liệu quan hệ hoặc thậm chí là một định dạng nhị phân có kích thước cố định. Nếu bạn có hàng triệu hàng và cần quyền truy cập ngẫu nhiên, bạn sẽ chạy vào tất cả các vấn đề hiệu suất cơ bản giống với JSON mà bạn làm với XML. Tôi nghi ngờ bạn có ý định sử dụng nó cho loại kịch bản lưu trữ dữ liệu này, nhưng bạn không bao giờ biết ... những điều lạ đã được thử :)

-1

Bạn không nên sử dụng JSON hoặc XML để lưu trữ dữ liệu trong một quan hệ cơ sở dữ liệu. JSON và XML là các định dạng tuần tự hóa hữu ích cho việc lưu trữ dữ liệu trong các tệp hoặc gửi qua dây.

Nếu bạn muốn lưu trữ một tập hợp các thuộc tính, chỉ cần tạo một bảng cho thuộc tính, với mỗi hàng tạo một thuộc tính. Bằng cách đó bạn có thể truy vấn dữ liệu bằng cách sử dụng SQL thông thường.

+0

Tôi lưu trữ nó trong một cơ sở dữ liệu khi tôi biết đối tượng sẽ không cần phải được kéo ra ngoài để được truy vấn. – Nosredna

+0

Chính xác - mặc dù không tối ưu, có những trường hợp bạn muốn lưu trữ dữ liệu có cấu trúc "nguyên tử", nghĩa là, chỉ được sử dụng làm thực thể chứ không phải từng phần. Nếu vậy, phân tích nó thành hàng và cột chỉ là trên không. Và trong khi lưu trữ chúng trong RDBMS chính nó là lãng phí (khóa/giá trị cửa hàng sẽ tốt hơn), nó có thể là một lựa chọn phong nha nếu tất cả các bạn có là một DB. – StaxMan

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