2014-12-23 14 views
5

Mam tabeli jak to w CQL3Dodaj kolumny dynamicznie w Cassandry

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

Jest to pionowy stół. Ponieważ mogę wstawić nowe wiersze z parą (klucz, wartość).

Przykładowe dane będą:

product_info

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

Ale to, co jest mi potrzebne poziomy stół, gdzie mógłbym w stanie dodać kolumny dynamicznie bez zmiany tabeli.

product_info

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

muszę strukturę jak w powyższej tabeli, trzeba zachować na dodanie kolumn w locie.

CQL3 zapewnia opcję dynamicznego dodawania kolumn, ale wcześniej musimy zmienić tabelę.

Muszę wiedzieć, czy istnieje inna metoda, która na to pozwala.

Znalazłem, że przy użyciu oszczędzania API jest to możliwe, ale ponieważ oszczędzanie nie jest bardziej obsługiwane, nie można tego użyć.

Czy jest jakikolwiek inny interfejs API, taki jak hector lub cokolwiek innego, który obsługuje to?

Przejrzałem podobne stanowiska przepełnienia stosu, ale nie dostałem lepszego rozwiązania.

+0

Mojego pierwszego chociaż było: robisz to źle ™. Cassandra jest już magazynem kluczy/wartości i może obsłużyć ten dokładny scenariusz OOTB. Zasadniczo symulujesz magazyn kluczy/wartości w innym magazynie kluczy/wartości, co nie ma większego sensu, IMHO. Tak więc drugie podejście jest dokładnie tym, co powinieneś zrobić i co Cassandra może zrobić, mimo że używasz tego dobrze. Pierwsze podejście to po prostu nadmierne komplikowanie prostych rzeczy. – JensG

Odpowiedz

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

Teraz można wstawić pary do 2B k/v, ponieważ kluczem jest teraz kolumna klastrowania.

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'); 

Jednak nie określono wzorców dostępu do zapytań, więc ten model danych może być całkowicie błędny (lub ok) dla aplikacji.

+0

Odpowiedź wygląda dobrze w normalnym scenariuszu. Ale nadal tabela wyników jest pionowa. Potrzebuję poziomo skalującego się stołu. Podobnie, każda nowa wartość musi być dodana jako kolumna, a nie wiersz. –

+1

Witam Sunjith, C * to szeroka kolumna. "Wiersze" są po prostu abstrakcją CQL leżącą u jej podstaw fizycznej szerokiej kolumny. Jeśli spojrzysz na dane w 'cassandra-cli' zobaczysz, że istnieje jeden klucz partycji, po którym następuje kolumna za kolumną. "Pionowe rzędy" w CQL są fizycznie szerokimi kolumnami. CQL to nic innego jak abstrakcja, która wyświetla fizyczne szerokie kolumny jako pionowe wiersze (podobne, ale nie takie same jak CTE w RDBMS). –

+0

@AkbarAhmed Nie sądzę, że twoja odpowiedź jest odpowiednia dla jego pytania. W jego przykładzie nie obchodzi go, jak dane będą przechowywane na dysku.Jeśli wybierzesz z takiego CF, nadal będziesz widzieć pionową tabelę. Pyta, jak dodać kolumny do jednego wiersza. Na przykład może on chcieć mieć wersje oprogramowania jako nowe kolumny bez wartości. W takim przypadku, jeśli wybierzesz takie CF, otrzymasz szeroki rząd danych. O ile mi wiadomo, nie jest już możliwe z CQL3. – I4004

0

Czy rozważałeś użycie mapy?

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

Zobacz koniec http://www.datastax.com/documentation/cql/3.1/cql/cql_using/use_collections_c.html

+0

Tak, poszedłem przez mapę. Ale nie sądzę, że to najlepsze rozwiązanie. Ponieważ nie jest tak jak moje oczekiwanie ... –

+0

Jakie są twoje oczekiwania? Możesz dodawać nowe klucze z wartościami w locie i aktualizować wartość klucza. Wewnętrznie, Kasandra utrzymuje mapowania, dzięki czemu można myśleć w kategoriach abstrakcji mapy. – ashic

Powiązane problemy