2014-07-24 4 views
0

나는 Cassandra- The definitive guide by E.Hewitt을 읽습니다. 저자가 샘플 호텔 응용 프로그램의 코드를 설명하는 네 번째 장에 있습니다. 책의 이미지는 참조 용으로 제공됩니다. 여기 enter image description hereCassendra 키 공간에서 열 패밀리를 삽입하는 코드를 이해하고 있습니까?

column Family HotelByCity

private void insertByCityIndex(String rowKey, String hotelName) throws Exception { 
    Clock clock = new Clock(System.nanoTime()); 
    Column nameCol = new Column(hotelName.getBytes(UTF8), new byte[0], clock); 
    ColumnOrSuperColumn nameCosc = new ColumnOrSuperColumn(); 
    nameCosc.column = nameCol; 
    Mutation nameMut = new Mutation(); 
    nameMut.column_or_supercolumn = nameCosc; 
    //set up the batch 
    Map<String, Map<String, List<Mutation>>> mutationMap = 
    new HashMap<String, Map<String, List<Mutation>>>(); 
    Map<String, List<Mutation>> muts = 
    new HashMap<String, List<Mutation>>(); 
    List<Mutation> cols = new ArrayList<Mutation>(); 
    cols.add(nameMut); 
    String columnFamily = "HotelByCity"; 
    muts.put(columnFamily, cols); 
    //outer map key is a row key 
    //inner map key is the column family name 
    mutationMap.put(rowKey, muts); 
    //create representation of the column 
    ColumnPath cp = new ColumnPath(columnFamily); 
    cp.setColumn(hotelName.getBytes(UTF8)); 
    ColumnParent parent = new ColumnParent(columnFamily); 
    //here, the column name IS the value (there's no value) 
    Column col = new Column(hotelName.getBytes(UTF8), new byte[0], clock); 
    client.insert(rowKey.getBytes(), parent, col, CL); 
    LOG.debug("Inserted HotelByCity index for " + hotelName); } //end inserting ByCity index 

내가 코드를 다음과 같은 어려움을 겪고에서 rowkeys를 삽입하는 방법입니다. 특히 많은 컨테이너 (지도)가 만들어지는 이유. Mutation 오브젝트의 용도는 무엇입니까? 어떻게 행키가 삽입 되었습니까?

코드의 각 단계에서 어떤 일이 일어나는지 설명 할 수 있다면 좋을 것입니다. 이 책은 설명하지 않으며 이것이 어떻게 이루어 졌는지를 알 수는 없습니다.

P .: 자바 개발자입니다. 그래서 나는지도를 다른지도 및 기타 세부 안에

감사

+3

2010 년 (그 책이 나왔을 때)부터 Cassandra에서 많은 부분이 변경되어 사용하지 않을 것입니다. Cassandra 데이터 모델링에 대한 더 나은 이해를 원한다면 https://academy.datastax.com/에서 제공되는 무료 강좌 몇 가지를 확인해야합니다. – Aaron

+0

@ BryceAtNetwork23 : 링크 해 주셔서 감사합니다. 카산드라 Java API가 버전간에 많은 변화가 있을지는 확실치 않습니다. 쿼리에 대한 자습서가 작성되지 않았거나 Java API를 사용하여 테이블을 만들지 않았습니다. 대부분의 CQL은 빠른 테스트에 유용합니다. 하지만 내가 도움이되지 않을 생산을 위해 –

답변

1

이 책은 카산드라에 드리프트 인터페이스를 설명 박제 이유지도 등하지만 난 그냥 따르지 않는 것을 잘 알고. 중고 API를 원하는 언어로 컴파일하여 많은 고객을 지원할 수있게되어 한 번에 훌륭했습니다. Thrift로 작성된 단일 서버 API로 N 클라이언트를 즉시 사용할 수있었습니다.

그러나 절약은 고통스럽고 이진 원시 프로토콜에 비해 훨씬 느립니다. Thrift is also a legacy API이며 새로운 응용 프로그램 개발에 사용해서는 안됩니다. 새로운 바이너리 프로토콜이 개발되어 이후 버전의 카산드라에 통합되었습니다.

이해하기 어려운 사람은 여러분뿐 아니라, 이 순간에 배우기에 아마도 무의미한 컴퓨터 생성 인터페이스이므로, 대신 java driver을 살펴보십시오.