paust-db

module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 15, 2019 License: GPL-3.0

README

PAUST Logo

Build Status

Paust DB

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

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

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

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

주요 특징

  • 탈중앙화 네트워크 기반 데이터 저장소(Decentralized Date Store)
  • 소유권 정보 불변성(Immutable Ownership)
  • 시계열 분산데이터 조회 최적화(Timeseries Query Optimizer)
  • 참여형 오픈 데이터베이스(Open Database for Participation)

Features

  • 하나의 연속적인 대용량 Timeseries 데이터를 실시간으로 관리 가능
  • 시계열 쿼리 전용 인터페이스
  • 다양한 정책에 따른 데이터베이스 지원

Prerequisite

Requirement Version
Golang 1.11.5 or higher
Rocksdb 5.17.2 or higher
Tendermint 0.29.0 or higher
Install go

Install

Setting environments

Install rocksdb
Rocksdb dependency install

zlib, bzip2, lz4, zstandard, snappy

  • Mac OS
$ brew install snappy zlib bzip2 lz4 zstd cmake
  • Ubuntu
$ sudo apt-get install libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev
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.0
$ 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
  • run paust-db
$ paust-db master
  • run tendermint
$ tendermint unsafe_reset_all
$ tendermint init
$ tendermint node
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
  • Result
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에서 확인할 수 있음

$ 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

  • Single Node (for test)
  • Multi-Node Clustering on Single Host (for test)
  • Multi-Node Clustering

Contributing

License

  • PaustDB(master) is GPLv3-style licensed, as found in the LICENSE file.
  • PaustDB(client) is LGPL-style licensed, as found in the LICENSE file.

Third-party

Directories

Path Synopsis
Package client는 paust-db의 read, write를 위한 go client library임
Package client는 paust-db의 read, write를 위한 go client library임
util
Package util은 paust-db/client package를 사용함에 있어서 편리한 tool을 제공함.
Package util은 paust-db/client package를 사용함에 있어서 편리한 tool을 제공함.
cmd
libs
db
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL