본문 바로가기

nosql

Datastore - 개요 Google App Engine 에는 Datastore 기능을 제공 하고 있음. 쉽게 말해 Database를 제공함.Schemaless로 일반적인 RDB는 아님 (noSQL) data object인 entity와 이를 구성하는 value인 property가 있음. property로 다양한 타입의 데이터를 지원하며, entity 자체도 property가 될 수 있음. 무엇보다 transaction 기능을 제공함. 보통 noSQL은 transaction 기능이 없지만 어떻겐지는 잘 몰라도 암튼 제공함. java, python, go, php 를 지원함. 더보기
Cassandra - Python 2.X (pycassa)를 이용하여 데이터 조회 준비물 : python 2.x 버전 설치, pycassa 설치 (기타 필요한 thrift, cassandra 가 포함되어 있음) 먼저 Python 3.X 에서 진행하려 했으나, 아직 thrift, pycassa... 이런 라이브러리들이 3버전을 지원하지 않아 실패함 결국 2.X 버전을 추가로 설치하여 작업 진행 예제 소스 (구지 설명하는것보다 예제를 보는편이 더 빠를듯) # -*- coding: utf-8 -*- # 위 코드는 한글을 쓰기위한 코드 from pycassa import ConnectionPool from pycassa.columnfamily import ColumnFamily from pycassa.cassandra.ttypes import ConsistencyLevel from cassa.. 더보기
Cassandra - Python 2.X (pycassa)를 이용하여 데이터 쓰기 준비물 : python 2.x 버전 설치, pycassa 설치 (기타 필요한 thrift, cassandra 가 포함되어 있음) 먼저 Python 3.X 에서 진행하려 했으나, 아직 thrift, pycassa... 이런 라이브러리들이 3버전을 지원하지 않아 실패함 결국 2.X 버전을 추가로 설치하여 작업 진행 예제 소스 (구지 설명하는것보다 예제를 보는편이 더 빠를듯) # -*- coding: utf-8 -*- # 위 코드는 한글을 쓰기위한 코드 from pycassa import ConnectionPool from pycassa.columnfamily import ColumnFamily from pycassa.cassandra.ttypes import ConsistencyLevel import tim.. 더보기
Cassandra - Java를 이용하여 데이터 검색 조회 함수 Cassandra.Client 의 어떤 칼럼 값으로 데이터를 조회하고 싶은 경우 list get_indexed_slices(ColumnParent column_parent, IndexClause index_clause, SlicePredicate predicate, ConsistencyLevel consistency_level) 어떤 키의 범위로 데이터를 조회하고 싶은 경우 list get_range_slices(ColumnParent column_parent, SlicePredicate predicate, KeyRange range, ConsistencyLevel consistency_level) 두 함수를 사용하면 된다. e.g. city 칼럼 값이 "NY"인 row를 조회하고싶은 경우 g.. 더보기
Cassandra - Java를 이용하여 데이터 쓰기 (super column family) Super Column Family 란 ??? 보통 Column Family는 row key를 가지고 column들을 가진다. 하지만 Super Column Family는 row key와 Super Column을 가진다. 그림으로 보면... 일반 Column Family 위와 같은 구조에 데이터는 아래와 같이 입력된다. Super Column Family 위와 같은 구조에 아래와 같이 데이터가 입력된다. join이 없는 대신 super column family가 있나 싶다. 어떤 경우 사용하면 유리한지 카산드라 설계 레퍼런스 자료가 있다면 보고싶다. 입력 함수 일반 Column Family에 입력할때보다 조금 복잡하다. Cassandra.Client의 batch_mutate 함수를 사용하는데 필요한 파라.. 더보기
Cassandra - Java를 이용하여 데이터 쓰기 (column family) 준비물 : cassandra와 통신하기 위한 라이브러리, 그 라이브러리가 필요로 하는 라이브러리들 상황 : Hotelier 라는 키스페이스에 Hotel 이라는 칼럼패밀리가 있다. 이 칼럼패밀리에 아래 데이터를 "AZC_043"키로 입력한다. name : Cambria Suites Hayden phone : 480-444-4444 address : 400 N. Hayden city : Scottsdale state : AZ zip : 85255 0. 위 준비물들(라이브러리) 들의 클래스 패스를 추가한다. 1. 카산드라 서버에 접속하기 ※ cassandra.yaml 파일 내부에 있는 rpc_address: localhost 를 rpc_address: 192.168.0.11 와 같이 서버 아이피로 변경해준다... 더보기
Cassandra - ConsistencyLevel 정리 참조 : http://wiki.apache.org/cassandra/API ConsistencyLevel 은 일관성을 최대한 보장하기 위한 옵션값인듯 하다 음.. 그러니까 데이터를 쓸때 n개의 DB 서버 중에한군데만 쓰기가 완료되도 ok두군데서만 쓰기가 완료되도 ok세군데, n/2 + 1 .... 데이터를 불러올때 n개의 DB 서버 중에 제일빨리 응답한놈데이터를 쓸것이냐, 서버 2개에서 데이터를 읽어서 가장 최근 자료를 쓸 것이냐서버 3개, n/2 + 1 .... 뭐 이런 규칙을 정의한듯 (영어가 짧아서...) WriteLevelBehaviorANYEnsure that the write has been written to at least 1 node, including HintedHandoff recip.. 더보기
Cassandra - thrift 인터페이스 jar 만들기 안보셨다면 Cassandra - thrift 인터페이스 생성 포스트를 먼저 보시길 thrift --gen java cassandra.thrift 실행했더니 gen-java 디렉토리가 생성되었다.이제 이 디렉토리만 컴파일해서 jar로 묶어준다음에 java 예제를 해볼까 했지만 에러 발생.... 에러 내용은org.apache.thrift.XXX 가 없다는것.... 음... thrift 라이브러리도 필요한가보구나 하고 찾아보니 /usr/lib/thrift/lib 경로안에 각 언어별 라이브러리들이 있다/usr/lib/thrift/lib/java 경로로 갔더니 build.xml 파일이 있다. ant를 실행해보자.우선 ant를 깔고....apt-get install antant 실행ant ant 종료 후 build.. 더보기