RethinkDB는 리얼타임 웹을 위한 NoSQL 저장소이다.
설치하기
가이드에 따라 OS에 맞게 설치한다. (맥기준)
docker로 실행할 경우
$ docker run -d -P --name rethink1 rethinkdb
저장소를 설치했으면 다음으로 NodeJS에서 사용할 클라이언트 드라이버를 설치한다.
실행하기
설치확인
$ which rethinkdb
/usr/local/bin/rethinkdb
실행하기
$ rethinkdb --bind all
Running rethinkdb 2.3.5 (CLANG 7.3.0 (clang-703.0.31))...
Running on Darwin 16.5.0 x86_64
Loading data from directory /Users/dowonyun/opensource/rethinkdb_data
Listening for intracluster connections on port 29015
Listening for client driver connections on port 28015
Listening for administrative HTTP connections on port 8080
브라우져기반 Admin(http://localhost:8080)을 통해 실시간 변경사항 조회, 테이블 생성, 서버관리, 데이터 조회등을 할 수 있다.
NodeJS환경에서 RethinkDB 접속하기
npm으로 노드환경을 만들고 rethink driver를 설치한다.
$ npm init -y
$ npm i rethinkdb --save
신규 파일을 만들고 Connect를 하고, 기본 데이터베이스인 test안에 신규 테이블을 생성해 보자.
// connect.js
r = require('rethinkdb');
let connection = null;
r.connect({ host: 'localhost', port: 28015 }, function (err, conn) {
if (err) throw err;
connection = conn;
r.db('test').tableCreate('authors').run(connection, function (err, result) {
if (err) throw err;
console.log(JSON.stringify(result, null, 2));
})
})
실행을 해보면 테이블이 생성되고 Admin화면에서도 확인해 볼 수 있다. rethinkDB 또한 Shard, Replica를 제공함을 알 수 있다.
$ node connect.js
{
"config_changes": [
{
"new_val": {
"db": "test",
"durability": "hard",
"id": "05f4b262-9e01-477e-a74c-3d4ccb14cf84",
"indexes": [],
"name": "authors",
"primary_key": "id",
"shards": [
{
"nonvoting_replicas": [],
"primary_replica": "DowonYunui_MacBook_Pro_local_bcb",
"replicas": [
"DowonYunui_MacBook_Pro_local_bcb"
]
}
],
"write_acks": "majority"
},
"old_val": null
}
],
"tables_created": 1
}
다음으로 rethinkDB는 자체 query 엔진을 가지고 있고, rethinkDB를 위한 쿼리 언어를 ReQL이라 한다. ReQL의 3가지 특성은 다음과 같다.
- ReQL embeds into your programming language: 펑션으로 만들어짐
- All ReQL queries are chainable: Dot ( . ) 오퍼레이터를 통해 체이닝 메소드 호출이다.
- All queries execute on the server: run을 호출해야 비로서 쿼리를 수행한다.
예제는 3가지의 특성을 보여주고 있다. query를 json 또는 SQL query statement으로 짜는게 아니라. 메소드 체이닝을 통해 쿼리를 만들고, 맨 나중에 Connection 객체를 파라미터로 넘겨주면서 run() 메소드를 실행한다.
r.table('users').pluck('last_name').distinct().count().run(conn)
일반 SQL 문과 자바스크립트 기반의 ReQL 차이점
구문의 차이저을 보자. row가 document이고, column이 field라는 차이점만 존재한다.
Insert
Select
다른 예제는 가이드 문서를 참조하자.
Horizon을 이용한 클라이언트 & 서버 구축하기
Horizon은 rehtinkDB를 사용해 realtime서비스 개발을 돕는 Node.js기반의 서버 프레임워크이면서 클라이언트에서 서버단의 접속을 RxJS 기반의 라이브러리를 통해 가능하다. 마치 Meteor 플랫폼과 유사한 리얼타임 아키텍트를 제공한다. Horizon의 CLI를 글로벌로 설치한다.
$ npm install -g horizon
호라이즌 실행은 hz 이다. 애플리케이션 스켈레톤을 hz을 이용해 만든다.
$ hz init realtime_app
Created new project directory realtime_app
Created realtime_app/src directory
Created realtime_app/dist directory
Created realtime_app/dist/index.html example
Created realtime_app/.hz directory
Created realtime_app/.gitignore
Created realtime_app/.hz/config.toml
Created realtime_app/.hz/schema.toml
Created realtime_app/.hz/secrets.toml
hz 서버 구동하고 http://localhost:55584/ 로 접속하면 http://localhost:8080 접속화면과 동일한 Admin화면을 볼 수 있다.
$ hz serve --dev
App available at http://127.0.0.1:8181
RethinkDB
├── Admin interface: http://localhost:55584
└── Drivers can connect to port 55583
Starting Horizon...
🌄 Horizon ready for connections
http://127.0.0.1:8181/을 호출하면 샘플 웹 화면을 볼 수 있다. 보다 자세한 사항은 홈페이지를 참조하고, 차후에 다시 다루어 보기로 하자.
<참조>
- ReQL 가이드
'Big Data' 카테고리의 다른 글
[Hadoop] Mongo-Hadoop 에 대한 생각 (0) | 2013.09.12 |
---|---|
[Hadoop] MapReduce 직접 .jar 파일로 수행하기 (0) | 2013.09.11 |
[Hadoop] Eclipse에서 Maven으로 하둡 코딩하기 (2) | 2013.09.09 |
[Hadoop] 개념이해 및 설치하기 (2) | 2013.09.09 |