您现在的位置:kastop>> Kas信息 Kaspa网络>>正文内容

Simply Kaspa Indexer开源项目已发布

用Rust实现的高性能Kaspa PostgreSQL索引器。

https://github.com/supertypo/simply-kaspa-indexer


第一个开源版本也标志着性能改进和新功能的引入,因此请务必阅读README(和--help)以获得概述。

闭源kaspa-db-filler-ng的用户只需拉取最新版本,因为改进的索引器与之向后兼容,新版本将被推送到两个docker存储库。

根据资金池中的条款,所选的许可证是ISC,这意味着它可以根据任何特定需求自由修改并重新分配(在某些条款下)。


简单的 Kaspa 索引器

用 Rust 实现的高性能 Kaspa PostgreSQL 索引器。

大约

索引器是通过派生 kaspa-db-filler 的功能规范从头开始实现的。
作为此过程的一部分,数据库架构经过重新设计,以更好地支持并发性。
这意味着必须迁移由 lAmeR1/kaspa-db-filler 填充的数据库才能兼容。
已开发架构迁移脚本,可在此处获取。
此处提供了 kaspa-rest-server 的兼容版本。

重要说明

可选表

为了最大限度地提高性能以满足您的特定需求,您应该注意通过命令行标志禁用您不需要的任何可选表。
目前支持 --skip_resolving_addresses 和 --skip_block_relations,将来将添加更多。

可选字段

除了可选表之外,如果您的使用案例不需要许多字段,则可以将许多字段留空。
使用 include_fields 或 exclude_fields 参数进行微调。有关可选字段的列表,请参阅 --help。
请注意,必填字段可能随时更改,因此在升级索引器时要特别小心!

Postgres 调优

确保将 Postgres 调整到您的特定硬件,以下是具有 12GB RAM 和 SSD 存储的服务器的示例:

shared_buffers = 2GB
work_mem = 128MB
effective_io_concurrency = 32
checkpoint_timeout = 5min
max_wal_size = 4GB
min_wal_size = 80MB
effective_cache_size = 8GB

此外,我强烈建议在使用 compression=lz4 的 ZFS 上运行 Postgres,以节省空间并提高性能。确保同时设置 recordsize=8k。

Tn11 (10bps) 票据

只要 Postgres 在足够高端的 NVMe 上运行,索引器就能够在满负载 (2000+tps) 下跟上 10bps 测试网 (TN11)。
如果在较小的硬件上运行,您可以考虑禁用可选表和字段以降低要求。

史料

索引器将从启动时的时间点开始收集数据。
如果您有存档节点,则可以使用 --ignore_checkpoint 参数指定 start-block 并指定较旧的 start 块。
如果您需要 pg_dump 历史记录文件,请在 Kaspa Discord 上与我们联系。

许可证

国际学校。请参阅 LICENSE。

捐款

kaspa:qrjtsnnpjyvlmkffdqyayrny3qyen9yjkpuw7xvhsz36n69wmrfdyf3nwv67t

开始

使用预编译的 Docker 镜像运行

请参阅 Docker Hub 页面

从源构建和运行

这些说明适用于 Ubuntu 24.04,其他发行版(或版本)可能需要进行调整。

1. 安装依赖项

sudo apt update && sudo apt install -y git curl build-essential pkg-config libssl-dev

2. 安装 Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y

3. 更新路径

source ~/.bashrc

4. 克隆此存储库

git clone <repository-url>

5. 构建工作区

cargo build

6. 运行索引器

cargo run -- -s ws://<kaspad_host>:17110 -d postgres://postgres:postgres@<postgres_host>:5432

帮助

Usage: simply-kaspa-indexer [OPTIONS]

Options:
  -s, --rpc-url <RPC_URL>
          The url to a kaspad instance, e.g 'ws://localhost:17110'. Leave empty to use the Kaspa PNN
  -n, --network <NETWORK>
          The network type and suffix, e.g. 'testnet-11' [default: mainnet]
  -d, --database-url <DATABASE_URL>
          PostgreSQL url [default: postgres://postgres:postgres@localhost:5432/postgres]
  -l, --log-level <LOG_LEVEL>
          error, warn, info, debug, trace, off [default: info]
      --log-no-color
          Disable colored output
  -b, --batch-scale <BATCH_SCALE>
          Batch size factor [0.1-10]. Adjusts internal queues and database batch sizes [default: 1.0]
  -t, --cache-ttl <CACHE_TTL>
          Cache ttl (secs). Adjusts tx/block caches for in-memory de-duplication [default: 60]
  -i, --ignore-checkpoint <IGNORE_CHECKPOINT>
          Ignore checkpoint and start from a specified block, 'p' for pruning point or 'v' for virtual
      --vcp-before-synced
          Start VCP as soon as the filler has passed the previous run. Use with care
      --skip-resolving-addresses
          Reduces database load by not tracking an address's transactions in a separate table
      --skip-block-relations
          Reduces database load by not tracking block relations in a separate table
  -u, --upgrade-db
          Auto-upgrades older db schemas. Use with care
  -c, --initialize-db
          (Re-)initializes the database schema. Use with care
      --exclude-fields <EXCLUDE_FIELDS>
          Exclude specific (non-required) fields.
                  If include_fields is specified this argument is ignored. [possible values: none, block_accepted_id_merkle_root, block_merge_set_blues_hashes, block_merge_set_reds_hashes, block_selected_parent_hash, block_bits, block_blue_work, block_daa_score, block_hash_merkle_root, block_nonce, block_pruning_point, block_timestamp, block_utxo_commitment, block_version, tx_hash, tx_mass, tx_payload, tx_block_time, tx_in_signature_script, tx_in_sig_op_count, tx_in_block_time, tx_out_script_public_key_address, tx_out_block_time]
      --include-fields <INCLUDE_FIELDS>
          Only include specific (non-required) fields.
                  Be aware that the required fields can change, so take care when upgrading and specify every field you need. [possible values: none, block_accepted_id_merkle_root, block_merge_set_blues_hashes, block_merge_set_reds_hashes, block_selected_parent_hash, block_bits, block_blue_work, block_daa_score, block_hash_merkle_root, block_nonce, block_pruning_point, block_timestamp, block_utxo_commitment, block_version, tx_hash, tx_mass, tx_payload, tx_block_time, tx_in_signature_script, tx_in_sig_op_count, tx_in_block_time, tx_out_script_public_key_address, tx_out_block_time]
  -h, --help
          Print help



感动 同情 无聊 愤怒 搞笑 难过 高兴 路过
【字体: 】【收藏】【打印文章】 【 打赏 】 【查看评论

相关文章

    没有相关内容