paust-team / paust-db

GNU General Public License v3.0
6 stars 5 forks source link
PAUST Logo

Build Status

Paust DB

Paust DB is a blockchain based decentralized database platform for continuous timeseries.

PAUST DB 는 시계열 데이터에 특화된 탈중앙화 데이터 베이스 인프라 입니다.

최근 데이터 시대에는 이전보다 몇 배나 더 많은 양의 데이터들이 디바이스나 개인으로부터 발생하고 있습니다. 하지만 기존 데이터의 형태와 달리 연속적이고 정형화되지 않은 시계열 데이터와 중앙화된 인프라 구조의 한계로 시계열 데이터를 제대로 활용하지 못하고 있습니다.

앞으로는 성능이나 자원 효율의 관점에서 위와 같은 문제를 해결할 수 있는 새로운 탈중앙화 데이터베이스가 필요합니다. 우리는 시계열 데이터에 특화된 탈중앙화 데이터베이스로 PAUST DB를 만들어 네트워크 데이터 공유 인프라를 구축하는 것을 목표로 합니다.

주요 특징

Features

Prerequisite

Requirement Version
Golang 1.11.5 or higher
Rocksdb 5.17.2 or higher
Tendermint 0.29.0 ~ 0.30.2

Install go

Install

Setting environments

Install rocksdb

Rocksdb dependency install

zlib, bzip2, lz4, zstandard, snappy

5.17.2 version의 rocksdb를 clone한 후 cmake를 이용해 build

$ cd ~
$ git clone https://github.com/facebook/rocksdb.git -b v5.17.2
$ mkdir ~/rocksdb/build && cd ~/rocksdb/build
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_GFLAGS=OFF -DWITH_TESTS=OFF ..
$ make install
mac os의 경우 아래의 과정을 할 필요가 없음.
$ ln -s /usr/local/lib64/librocksdb.so.5 /usr/local/lib/librocksdb.so.5

Set env for gorocksdb

$ echo 'export CGO_CFLAGS="-I/usr/local/include"' >> ~/.bash_profile
$ echo 'export CGO_LDFLAGS="-L/usr/local/lib -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -llz4 -lzstd"' >> ~/.bash_profile
$ source ~/.bash_profile

Install tendermint

$ cd $GOPATH/src/github.com/tendermint/tendermint
$ git checkout v0.30.2
$ make get_tools
$ make get_vendor_deps
$ make install

Installation

Install paust-db

$ go get github.com/paust-team/paust-db/cmd/paust-db

Run

Status

paust-db-client status

아래 Quick start guide 를 따라 paust-db-client 를 설치하여 status command 로 health check 가능

$ paust-db-client status -e localhost:26657

tm-monitor

tm-monitor를 이용해 직접 구성한 node 들의 상태를 확인 할 수 있음

usage: tm-monitor ip:port

$ tm-monitor localhost:26657

Height: 49 Avg block time: 1000.000 ms Avg tx throughput: 0 per sec Avg block latency: 0.154 ms Active nodes: 1/1 (health: moderate) Validators: 1

NAME HEIGHT BLOCK LATENCY ONLINE VALIDATOR
localhost:26657 49 0.221 ms true true


## Quick start
### Install client cli
다음 명령어를 통해서 paust-db-client 를 install 하여 local 환경에서 cli 테스트를 할 수 있음 
자세한 cli 명령어는 [client](https://github.com/paust-team/paust-db/tree/master/client)에서 확인할 수 있음
```shell
$ go get github.com/paust-team/paust-db/client/cmd/paust-db-client

Data

Name Description Length
timestamp Essential. Unix timestamp(nanosec) size of uint64
ownerId Essential. Data owner id 64 characters or below
qualifier Schemeless json string Unlimited
data Base64 encoded data Unlimited

Put

스트림을 이용한 Json data를 Put 하는 example.

$ echo '[
        {"timestamp":1544772882435375000,"ownerId":"owner1","qualifier":"{\"userId\":\"paust_kevin\"}","data":"YWJj"},
        {"timestamp":1544772960049177000,"ownerId":"owner2","qualifier":"{\"userId\":\"paust_andrew\"}","data":"ZGVm"},
        {"timestamp":1544772967331458000,"ownerId":"owner3","qualifier":"{\"userId\":\"paust_elon\"}","data":"Z2hp"}
]' | paust-db-client put -s
Read json data from STDIN
put success.

Query

Time range 사이의 ownerId가 owner1 이고, qualifier가 bWVt인 item을 Query하는 example

$ paust-db-client query 1544772882435375000 1544772967331458001 -o owner1 -q '{"userId":"paust_kevin"}'
query success.
[{"id":"eyJ0aW1lc3RhbXAiOjE1NDQ3NzI5NjAwNDkxNzcwMDAsInNhbHQiOjIxNX0=","timestamp":1544772960049177000,"ownerId":"owner1","qualifier":"{\"userId\":\"paust_kevin\"}"}]

Fetch

Query를 통하여 받은 id인 eyJ0aW1lc3RhbXAiOjE1NDQ3NzI5NjAwNDkxNzcwMDAsInNhbHQiOjIxNX0= 를 이용해 실제 data를 fetch하는 example

$ paust-db-client fetch eyJ0aW1lc3RhbXAiOjE1NDQ3NzI5NjAwNDkxNzcwMDAsInNhbHQiOjIxNX0=
Read data from cli arguments
fetch success.
[{"id":"eyJ0aW1lc3RhbXAiOjE1NDQ3NzI5NjAwNDkxNzcwMDAsInNhbHQiOjIxNX0=","timestamp":1544772960049177000,"data":"ZGVm"}]

Docker Support

Docker Guide

Contributing

License

Third-party