Paust DB is a blockchain based decentralized database platform for continuous timeseries.
PAUST DB 는 시계열 데이터에 특화된 탈중앙화 데이터 베이스 인프라 입니다.
최근 데이터 시대에는 이전보다 몇 배나 더 많은 양의 데이터들이 디바이스나 개인으로부터 발생하고 있습니다. 하지만 기존 데이터의 형태와 달리 연속적이고 정형화되지 않은 시계열 데이터와 중앙화된 인프라 구조의 한계로 시계열 데이터를 제대로 활용하지 못하고 있습니다.
앞으로는 성능이나 자원 효율의 관점에서 위와 같은 문제를 해결할 수 있는 새로운 탈중앙화 데이터베이스가 필요합니다. 우리는 시계열 데이터에 특화된 탈중앙화 데이터베이스로 PAUST DB를 만들어 네트워크 데이터 공유 인프라를 구축하는 것을 목표로 합니다.
Requirement | Version |
---|---|
Golang | 1.11.5 or higher |
Rocksdb | 5.17.2 or higher |
Tendermint | 0.29.0 ~ 0.30.2 |
zlib, bzip2, lz4, zstandard, snappy
$ brew install snappy zlib bzip2 lz4 zstd cmake
$ sudo apt-get install libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev
$ 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
$ 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
$ cd $GOPATH/src/github.com/tendermint/tendermint
$ git checkout v0.30.2
$ make get_tools
$ make get_vendor_deps
$ make install
$ go get github.com/paust-team/paust-db/cmd/paust-db
$ paust-db master
$ tendermint unsafe_reset_all
$ tendermint init
$ tendermint node
아래 Quick start guide 를 따라 paust-db-client 를 설치하여 status command 로 health check 가능
$ paust-db-client status -e localhost:26657
tm-monitor를 이용해 직접 구성한 node 들의 상태를 확인 할 수 있음
Run
usage: tm-monitor ip:port
$ tm-monitor localhost:26657
2019-02-20 20:13:14.50251 +0900 KST m=+0.074827320 up 100.00%
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
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 |
스트림을 이용한 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.
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\"}"}]
Query를 통하여 받은 id인 eyJ0aW1lc3RhbXAiOjE1NDQ3NzI5NjAwNDkxNzcwMDAsInNhbHQiOjIxNX0= 를 이용해 실제 data를 fetch하는 example
$ paust-db-client fetch eyJ0aW1lc3RhbXAiOjE1NDQ3NzI5NjAwNDkxNzcwMDAsInNhbHQiOjIxNX0=
Read data from cli arguments
fetch success.
[{"id":"eyJ0aW1lc3RhbXAiOjE1NDQ3NzI5NjAwNDkxNzcwMDAsInNhbHQiOjIxNX0=","timestamp":1544772960049177000,"data":"ZGVm"}]