根据Sui 博客,Sui 索引框架通过一个强大的数据摄取框架提供对 Sui 链上数据的可自定义访问。这个框架允许各种软件收集原始链上数据和派生数据集,无论这些软件是链上还是链下运行。
利用这个框架,开发人员可以创建可定制的数据源,可以构建响应链上事件的软件和产品。Sui 索引框架解决了传统区块链数据结构的局限性,这些结构通常没有针对其整个历史的随机数据访问进行优化。使用这个框架构建的可定制数据源使开发人员能够更有效地利用链上数据进行实时分析和响应式应用程序。
链上数据源的力量
例如,一位音乐家可以使用 NFT 向粉丝分发音乐。通过创建一个不可转让的 NFT 集合,每个 NFT 可以在铸造时自动访问存储在链下数据库中的音频文件。使用 Sui 索引框架创建的自定义索引器可以跟踪与这些特定 NFT 相关的铸造交易,允许一个单独的链下服务执行音频文件传输等操作,这些操作由通过自定义索引器监控的事件触发。
该框架对于那些寻求更精简的全节点设置的人尤其有用。如果没有索引解决方案,全节点通常会保留每笔交易的历史记录。使用 Sui 索引框架创建的自定义索引器可以将检查点数据分开存储,从而允许更高效的基础设施设置,因为全节点可以被积极修剪。
此外,Sui 索引框架对于链上数据仪表盘的开发至关重要。虽然数据分析平台需要许多元素,但这个框架是这些应用程序所依赖的数据摄取的基础。
工作原理
使用 Sui 索引框架进行数据摄取从订阅 Sui 的检查点流开始,以接收最新数据。最简单的方法是订阅一个远程商店的检查点数据,比如 Mysten Labs 提供的那些:
- Testnet - https://checkpoints.testnet.sui.io
- Mainnet - https://checkpoints.mainnet.sui.io
必须创建一个工作函数来处理检查点数据。然后主应用程序在检测到远程商店中的事件时调用工作函数。
use async_trait::async_trait;
use sui_data_ingestion_core::{setup_single_workflow, Worker};
use sui_types::full_checkpoint_content::CheckpointData;
struct CustomWorker;
#[async_trait]
impl Worker for CustomWorker {
async fn process_checkpoint(&self, checkpoint: CheckpointData) -> Result<()> {
println!("processing checkpoint {}", checkpoint.checkpoint_summary.sequence_number);
// custom processing logic
...
Ok(())
}
}
#[tokio::main]
async fn main() -> Result<()> {
let (executor, term_sender) = setup_single_workflow(
CustomWorker,
"https://checkpoints.mainnet.sui.io".to_string(),
0, /* initial checkpoint number */
5, /* concurrency */
None, /* extra reader options */
).await?;
executor.await?;
Ok(())
}
对于那些操作自己全节点的人,他们可以通过在全节点配置文件中添加以下checkpoint-executor-config
信息创建自己的检查点流:
checkpoint-executor-config:
data-ingestion-dir: <path to a local directory>
配置完成后,全节点将检查点数据转储到本地目录,索引器守护进程监听检查点事件并在新检查点到达时处理数据。返回的检查点数据是一个CheckpointData
结构体,当前的应用程序很熟悉该结构体。索引器可以像托管订阅一样处理数据。
Sui 索引框架支持基于轮询和基于推送的处理方法,为开发人员提供了选择简单实现或降低延迟的灵活性。这种多功能性对于优先考虑实时数据访问和响应能力的应用程序至关重要。
深入探索
无论是创建响应实时区块链事件的应用程序,还是管理一般数据和基础设施,Sui 索引框架都提供了所需的灵活性和可靠性。如需详细的实施指导,请参阅Sui 自定义索引器文档。要查看框架的实际应用,请探索 Mysten Labs、SuiNS 和 Sui 桥使用的专门索引管道。
Image source: Shutterstock