기존의 블록체인들은 real-time event 처리와 tx의 순서/위변조 방지에 데이터 저장 초점이 맞추어져 있음
Approach
timeseries data의 put/query와 streaming 처리에 적합하도록 블록체인에 source 개념을 도입함
source는 생산되는 timeseries data stream 각각의 객체를 나타냄
생산되는 스트림의 meta 정보가 하나의 source와 mapping 됨
여기서 제가 생각하는 meta와 실제 저장하는 데이터의 구분은
meta는 stream을 구분하기 위한 데이터로 하나의 stream에서는 시간의 흐름과 관계없이 일정한 정보이고
실제 저장하는 데이터는 시간의 흐름에 따라 변화되는 데이터입니다.
ex.) owner: Kevin, type: video stream, subject: kevin's game streaming -> source A(source A로부터 전달되는 실제 데이터는 영상 각 프레임에 대한 데이터)
owner: Kevin, type: video stream, subject: kevin's meokbang -> source B
owner: Andrew, type: temperature sensor -> source C
사용자는 데이터를 얻기 위해 필요한 source를 Query를 통해 검색하고 원하는 source로부터 데이터를 Fetch해서 가져옴
이 source와 meta 정보의 mapping table을 통해 block 내의 불필요한 중복 저장을 줄이고 빠른 block iterating으로 쿼리 성능을 향상하려고 함
간단한 linked list 구조의 blockchain 구성
single node로 구성
RocksDB에 block 저장
1초 간격으로 block 생성
데이터의 timestamp는 node에서 데이터를 받았을 때 지정
block에는 source를 검색하는 Query에서 사용하는 정보를 저장
source 하나에 저장되는 데이터의 여러 timestamp들이 대응되는 구조로 저장
block을 source를 기준으로 쪼개서 저장
source와 대응하는 meta 정보는 중복해서 저장할 필요가 없음. 모든 block에 걸쳐 global하게 사용됨.
block과 함께 저장할 필요 없음. 따로 관리.
다른 RocksDB에 Fetch를 위한 실제 데이터를 저장
source를 기준으로 iterating하면서 특정 range의 value, 또는 지속적으로 value를 가져오는 구조
Go lang
Derive
Timeseries data의 query, fetch, streaming에 적합한 blockchain 구조
기존의 tendermint로 구성한 prototype과 비교하였을 때 비슷한 query 성능이 나오는 것이 목표
블록체인 블록을 timeseries data query에 활용
source를 기준으로 데이터를 지속적으로 받거나 일부 데이터 조회 가능
source를 기반으로 구분되서 저장되는 block 구조에서 source를 검색하는 Query가 효율적
원하는 meta 정보와 일치하는 source를 찾는 것은 block을 검색하거나 iterating할 필요가 없음
block은 시간 순으로 생성되므로 원하는 time range 내의 block에서 검색하는 source와 일치하는 데이터를 iterating하면서 가져옴
source를 기준으로 구분되어 저장된 실제 데이터를 iterating해서 가져와 Fetch가 효율적
Next Experiment point
현재 실험하는 구조는 linked list 형태의 blockchain 구조이며 full-copy -> 분산저장이 되는 dag 형태의 block 구조 생각해보기
client query interface와 연결(#162)
query에서 단순히 source에 대한 검색으로 끝나는 것이 아니라 fetch에도 연관이 되면 좋을 듯 -> 실제 데이터를 fetch하는데 필요한 path, key 등을 block 상에 저장해서 query의 결과로 사용.
tx으로 받은 데이터를 저장할 때 하나의 블록 내에서는 tx의 처리순서가 상관없고 동시에 처리해서 저장되어도 됨 -> tx 순차적 처리가 없는 효율적인 put 구조로 변경
timeseries data와 streaming 처리에 적합한 블록체인 구조 실험
Problem
Approach
Derive
Next Experiment point