Improve Block store for iterating time-series data on block
Problem
Reference : #128
기존 tendermint blockstore 중복저장 문제 및 blockstore 구조를 변경하기 위한 실험 및 task
Approach
기존의 tendermint 종속적인 chain 을 걷어내고 새로운 chain 을 만듬
p2p, consensus 는 중요하지 않으므로 libp2p, pow base 로 간단하게 만듬 -> API 호출하면 block 쌓이게
RockDB implementation
Block 에 담을 Tx 데이터 우선 Meta만 담도록 (추후에 Meta 만 저장하고 Real 은 다른곳에 저장하는 실험을 필요. 본 실험은 기존의 tendermint 의 block 과 rocksdb 두 곳에 데이터가 저장되는 중복문제를 해결하기 위함)
Query 를 해서 Block iteration 해서 Block 이 가지고 있는 데이터를 찾는 방식의 구조
Go lang + http API test
Derive
Data 중복저장 문제 해결point
Time series 를 담기 적합한 Blockstore 구조
Block Query 방식
Block Query를 해서 Block 을 iterate 하고 데이터를 줄 수 있는 구조가 필요. (기존은 단일 노드가 가지고 있는 rocksdb 데이터에서 찾아서 주는 방식이었음)
본 이슈는 experiment 성격보단 task 성격을 띄고있음. Next experiment point 가 main experiment 가 될듯
Next Experiment point
Query 가 들어왔을때 해당 노드의 블록체인이 최신이 아니라면? -> Query도 전파할 수 있는 구조가 필요하지 않을까 -> 그럼 data 를 full copy 할 필요도 없지 않나? -> 데이터 분산저장 구조생각해볼수있을듯 -> 어떤 노드가 어떤 데이터를 들고있는지에 대한 DHT 필요..
Meta 만 저장하고 Real 은 다른곳에 저장하는 실험 -> 처음 tx 를 받은 primary node 가 real data 를 저장하고 real data path 를 포함한 meta 만 p2p 전파해서 합의가 되면 primary node 가 real data 를 저장하는 방식으로 부터 접근
sample 엔 libp2p 가 특정 node의 endpoint 를 가르키고 걔랑 연결하는 1:N 관계의 연결인데 (나는 여러명에게 연결할 수 없음, 나한테 연결되는 노드는 여러개 가능), 이러면 중간에 한개의 연결이 끊어졌을 때 전체 링크가 끊어진다.
-> 다른 blockchain 에서는어떻게하지? 조사필요. 전체를 다 연결하는건 비효율적이고 tendermint 는 처음 validator 구성때 node 간의 endpoint 를 다 기록해놓기 때문에 endpoint table 을 관리할거임. 이처럼 구현하면 연결 테이블을 관리하면서 끊어지면 다른 노드랑 연결을 다시 맺고 하는 식의 구조가 되지않을까
Improve Block store for iterating time-series data on block
Problem
Approach
pow base 로 간단하게 만듬-> API 호출하면 block 쌓이게Derive
Next Experiment point
Due date