인덱서 데이터 및 통합
Sui에서 custom indexer를 구축하면 데이터 수집, 저장, 처리에 대한 완전한 제어권을 가질 수 있다. Mainnet 데이터를 인덱싱하는지, 알려진 checkpoints를 대상으로 테스트하는지, 또는 로컬 네트워크에서 작업하는지에 따라 remote store, local files, 또는 직접 RPC API 접근과 같은 여러 checkpoint data sources 중에서 선택할 수 있다.
스토리지에는 PostgreSQL과 함께 내장된 IndexerCluster를 사용하거나 다른 데이터베이스 또는 storage backend를 통합하기 위해 자체 Store 및 Connection traits를 구현할 수 있다. 연결한 후에는 manual indexer를 연결하고, custom pipelines를 추가하고, 데이터를 동기화 상태로 유지하기 위한 워터마크 조정을 처리할 수 있다.
마지막으로 pipelines가 강하게 타입화된 데이터로 작업할 수 있도록 bcs와 serde를 사용해 원시 BCS bytes의 Move events를 역직렬화하여 Rust structs로 변환해야 한다. 이를 통해 성능, 신뢰성, custom analytics에 맞게 조정할 수 있는 재현 가능한 end-to-end 구성을 얻을 수 있다.
Checkpoint data sources
sui-indexer-alt-framework는 Sui blockchain 데이터에 접근하기 위한 여러 데이터 소스를 지원한다. 이러한 소스는 명령줄 인수를 통해 구성한다. 이들은 push-based와 polling-based라는 두 범주로 나뉜다.
Push-based data sources
Push-based 소스는 checkpoint 데이터가 사용 가능해지는 즉시 실시간으로 전달하므로 polling보다 더 낮은 지연 시간을 제공한다.
Recommended: gRPC streaming
gRPC streaming은 최신 checkpoints에 대해 full nodes에서 push된 실시간 checkpoint 데이터를 전달한다. 최신 데이터만 스트리밍하므로 과거 checkpoints를 검색하고 안정성을 보장하려면 polling-based 폴백 소스(remote store, local path, 또는 full node RPC)를 구성해야 한다:
$ cargo run -- --remote-store-url https://checkpoints.testnet.sui.io --streaming-url https://fullnode.testnet.sui.io:443
Endpoint format: https://fullnode.NETWORK.sui.io:443 여기서 NETWORK는 사용 가능한 네트워크 중 하나이다:
testnetdevnetmainnet
When to use gRPC streaming:
- 최소 지연 시간이 필요한 프로덕션 인덱서
- 실시간 데이터 처리 pipelines
- 즉각적인 checkpoint 업데이트가 필요한 애플리케이션
- 안정성과 과거 데이터 접근을 보장하려면 항상 polling-based 폴백 소스(예:
--remote-store-url)를 구성하라. - 스트리밍 연결은 스트리밍을 사용할 수 없거나 과거 checkpoints가 필요할 때 polling source로 자동 폴백한다.
Polling-based data sources
Polling-based 소스는 indexing framework가 제공하는 polling 메커니즘을 사용해 새로운 checkpoints를 주기적으로 확인한다.
Remote store
가장 직접적인 스트림 source는 원격 checkpoint store에 대한 구독이다. Sui는 다음 엔드포인트를 제공한다:
- Testnet:
https://checkpoints.testnet.sui.io - Mainnet:
https://checkpoints.mainnet.sui.io
$ cargo run -- --remote-store-url https://checkpoints.testnet.sui.io
Local path
로컬 checkpoint files는 개발 및 테스트 시나리오에 유용하다:
$ cargo run -- --local-ingestion-path /path/to/checkpoints
Common use cases:
- 알려진 checkpoint 데이터를 사용한 unit 및 integration 테스트
- 재현 가능한 datasets를 사용하는 개발 워크플로
Full node RPC
Full node RPC 쿼리는 gRPC를 사용한다:
$ cargo run -- --rpc-api-url https://fullnode.testnet.sui.io:443
Endpoint format: https://fullnode.NETWORK.sui.io:443 여기서 NETWORK는 사용 가능한 네트워크 중 하나이다:
testnetdevnetmainnet
When to use RPC API:
- 공식 remote store가 없는 네트워크(devnet, localnet, custom networks)
- 로컬 Sui 네트워크를 대상으로 한 개발