2015-10-06 12 views
5

Tôi đang cố gắng tích hợp cơ sở dữ liệu NoSQL để lưu trữ dữ liệu JSON, chứ không phải cơ sở dữ liệu SQL để lưu trữ dữ liệu JSON (Một cột lưu trữ một đối tượng JSON).Cassandra vs MongoDB - Lưu trữ dữ liệu JSON với các khóa chưa biết trước đó?

Đối với MongoDB, tôi có thể chèn một tệp JSON chỉ bằng cách làm:

document = <JSON OBJECT> 
collection.insert(document) 

Tuy nhiên, đối với Cassandra, theo trang web này: http://www.datastax.com/dev/blog/whats-new-in-cassandra-2-2-json-support

Nó không thể schema ít hơn, có nghĩa là tôi sẽ cần để tạo ra một bảng trước:

CREATE TABLE users (
    id text PRIMARY KEY, 
    age int, 
    state text 
); 

Và sau đó chèn dữ liệu:

INSERT INTO users JSON '{"id": "user123", "age": 42, "state": "TX"}'; 

Vấn đề là tôi muốn thử và sử dụng Cassandra, tôi vừa mới hoàn thành hướng dẫn của DataStax, nhưng có vẻ như tôi cần phải biết các khóa của dữ liệu JSON trước, điều này là không thể.

Hoặc tôi có nên thay đổi bảng khi có cột dữ liệu mới nếu có khóa không xác định không? Điều đó không có vẻ giống như một quyết định thiết kế rất tốt.

Có ai có thể chỉ cho tôi đúng hướng không? Cảm ơn

+2

kinh nghiệm của tôi là, bạn phải, thiết kế giản đồ trước, hoặc thay đổi nó sau này ... – keypoint

Trả lời

8

Hỗ trợ JSON này rất gây hiểu lầm - đó là JSON trong hỗ trợ Cql, không có trong bộ nhớ.

Hoặc tôi nên thay đổi bảng khi có cột dữ liệu mới nếu có là một khóa không xác định? Điều đó không có vẻ giống như một quyết định thiết kế rất tốt .

Thực tế đây không phải là quyết định tốt - các trường của bạn trong JSON có thể có các loại khác nhau giữa các thực thể - một tên cột không thể phân phối tất cả. Ngoài ra, thêm trường mới yêu cầu tuyên truyền lược đồ trên cụm của bạn, do đó, chèn đầu tiên (có thể chứa dữ liệu chèn bảng + chèn) sẽ rất chậm.

Cassandra không cung cấp cho bạn bất kỳ cơ chế tích hợp nào, nhưng những gì bạn có thể làm là đặt toàn bộ JSON vào một trường và hiển thị các thuộc tính cần thiết trong các cột riêng biệt bổ sung. Ví dụ:

CREATE TABLE users (
    id text PRIMARY KEY, 
    json text, //in json age and state 
    age int //explicit duplicated property - if you need e.g. index 
); 

BTW. AFAIK Cassandra sử dụng để hỗ trợ trường hợp của bạn từ lâu, nhưng bây giờ nó được 'gõ mạnh' hơn.

+0

Cảm ơn! Rất nhiều giải pháp làm điểm đến blob và văn bản. Tôi không sửa đổi các json, chỉ đọc nó, và tôi nghĩ rằng lưu trữ nó như là văn bản là chấp nhận được. – user1157751

+0

Một điều nữa - kiểm tra chiều dài văn bản/kích thước cột tối đa. Nó có thể chỉ ra rằng JSON của bạn là quá lớn tại một số điểm. – piotrwest

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