2014-12-23 12 views
5

Tôi có một bảng như thế này trong CQL3Thêm cột tự động ở cassandra

create table product_info 
(
key text, 
value text, 
Primary key (key) 
); 

Nó là một bảng dọc. Vì tôi có thể chèn các hàng mới với cặp (khóa, giá trị).

dữ liệu mẫu sẽ là:

product_info

key    |  value  
    ------------------------------------------- 
    product_name  | sample_product 
    quantity   | 2 
    manufacture  | sample_manufacturer 
    ....     .... 

Nhưng những gì tôi cần là một bảng ngang, nơi tôi có thể thể thêm các cột tự động mà không thay đổi bàn.

product_info

product_name  | quantity | manufacture   | .... 
    ------------------------------------------------------------------------------  
    sample_product | 2   | sample_manufacturer | .... 

tôi cần những cấu trúc như bảng trên, cần phải tiếp tục thêm các cột một cách nhanh chóng.

CQL3 cung cấp tùy chọn thêm cột động, nhưng trước đó chúng tôi cần phải thay đổi bảng.

Tôi cần biết có phương pháp nào khác cho phép điều này không.

Tôi thấy rằng bằng cách sử dụng api tiết kiệm điều đó là có thể, nhưng kể từ khi tiết kiệm không được hỗ trợ nhiều hơn, không thể sử dụng điều đó.

Có API nào khác như hector hay bất kỳ thứ gì khác hỗ trợ điều này không?

Tôi đã thực hiện các bài đăng tràn ngăn xếp tương tự, nhưng tôi đã không nhận được giải pháp tốt hơn.

+0

mặc dù lần đầu tiên của tôi: Bạn đang làm nó sai ™. Cassandra đã là một kho lưu trữ khóa/giá trị và có thể xử lý kịch bản OOTB chính xác này. Về cơ bản, bạn đang mô phỏng một kho khóa/giá trị trong một kho khóa/giá trị khác, điều này không có ý nghĩa gì nhiều, IMHO. Vì vậy, cách tiếp cận thứ hai là chính xác những gì bạn nên làm và những gì Cassandra có thể làm anyway nếu bạn sử dụng nó đúng. Cách tiếp cận đầu tiên chỉ là quá phức tạp những điều đơn giản. – JensG

Trả lời

3
CREATE TABLE product_info(
    product_name text, 
    key text, 
    value text, 
    PRIMARY KEY (product_name, key) 
); 

Bây giờ bạn có thể chèn tối đa 2B k/v vì khóa hiện là cột phân cụm.

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'quantity', '2'); 

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'manufacturer', 'Apple'); 

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'quantity', '2'); 

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'another column name', 'another column value'); 

Tuy nhiên, bạn không chỉ định mẫu truy vấn truy vấn, vì vậy mô hình dữ liệu này có thể hoàn toàn sai (hoặc ok) cho ứng dụng của bạn.

+0

Câu trả lời có vẻ tốt cho kịch bản bình thường. Nhưng vẫn là bảng kết quả là dọc. Tôi cần một bảng mở rộng theo chiều ngang. Giống như, mỗi giá trị mới phải được thêm dưới dạng cột, không phải là hàng. –

+1

Hi Sunjith, C * là cột rộng. Các "hàng" chỉ là một sự trừu tượng CQL của cột rộng vật lý cơ bản. Nếu bạn nhìn vào dữ liệu trong 'cassandra-cli' bạn sẽ thấy rằng có một khóa phân vùng duy nhất được theo sau bởi cột sau cột. "Hàng dọc" trong CQL là các cột có chiều rộng vật lý. CQL không là gì ngoài trừu tượng hiển thị các cột rộng vật lý như các hàng dọc (tương tự, nhưng không giống như một CTE trong một RDBMS). –

+0

@AkbarAhmed Tôi không nghĩ câu trả lời của bạn phù hợp với câu hỏi của anh ấy. Trong ví dụ của ông, ông không quan tâm làm thế nào dữ liệu thực sự sẽ được lưu trữ trên đĩa.Nếu bạn chọn từ CF như vậy, bạn sẽ vẫn thấy một bảng dọc. Anh ấy đang hỏi cách thêm cột vào một hàng. Ví dụ, anh ta có thể muốn có phiên bản firmaware như các cột mới không có giá trị. Trong ví dụ này, nếu bạn chọn CF như vậy, bạn sẽ nhận được một hàng rộng dữ liệu. Theo như tôi biết, nó không thể với CQL3 nữa. – I4004

0

Bạn đã cân nhắc sử dụng bản đồ chưa?

create table products(
id text primary key, 
something text, 
attributes map<text, text> 
); 

Xem cuối http://www.datastax.com/documentation/cql/3.1/cql/cql_using/use_collections_c.html

+0

Có, tôi đã đi qua bản đồ. Nhưng tôi không nghĩ đó là giải pháp tốt nhất. Vì nó không giống như mong đợi của tôi là .. –

+0

Kỳ vọng của bạn là gì? Bạn có thể thêm các khóa mới với các giá trị khi đang di chuyển và bạn có thể cập nhật giá trị cho khóa. Bên trong, cassandra duy trì ánh xạ để bạn có thể suy nghĩ về bản đồ trừu tượng. – ashic

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