Pelacakan Status Historis Otomatis
Pelacakan Status Historis Otomatis
Latar Belakang
SubQuery memungkinkan Anda untuk mengindeks data apa pun yang Anda inginkan dari Substrat, Avalanche, dan jaringan lainnya. Saat ini, SubQuery beroperasi sebagai penyimpanan data yang dapat diubah, tempat Anda dapat menambahkan, memperbarui, menghapus, atau mengubah entitas tersimpan yang ada dalam kumpulan data yang diindeks oleh SubQuery. Saat SubQuery mengindeks setiap blok, status setiap entitas dapat diperbarui atau dihapus berdasarkan logika proyek Anda.
Proyek SubQuery dasar yang mengindeks saldo akun mungkin memiliki entitas yang terlihat seperti berikut ini.
type Account @entity {
id: ID! # Alice's account address
balance: BigInt
transfers: [Transfer]
}
Dalam contoh di atas, saldo DOT Alice terus berubah, dan saat kami mengindeks data, properti saldo
pada entitas Akun
akan berubah. Dalam contoh di atas, saldo Dot Alice terus berubah, dan saat kami mengindeks data, properti <0>saldo</0> pada entitas <0>Akun</0> akan berubah. Misalnya, jika saat ini kita mengindeks ke blok 100, data dalam database hanya dapat mewakili status akun Alice di blok 100.
Kemudian kita dihadapkan pada suatu masalah. Dengan asumsi data telah berubah saat mengindeks ke blok 200, bagaimana kita bisa menanyakan status data di blok 100?
Automated Historical State Tracking
SubQuery sekarang mengotomatiskan pelacakan status historis entitas untuk semua proyek baru. Anda dapat secara otomatis menanyakan status proyek SubQuery Anda pada ketinggian blok apa pun. Ini berarti Anda dapat membuat aplikasi yang memungkinkan pengguna kembali ke masa lalu, atau menunjukkan bagaimana status data Anda berubah seiring waktu.
Singkatnya, saat Anda membuat, memperbarui, atau menghapus entitas SubQuery apa pun, kami menyimpan status sebelumnya dengan rentang blok yang valid untuknya. Anda kemudian dapat meminta data dari ketinggian blok tertentu menggunakan titik akhir dan API GraphQL yang sama.
Mengaktifkan Ini
Fitur ini diaktifkan secara default untuk semua proyek baru yang dimulai dengan setidaknya @subql/node@1.1.1
dan @subql/query1.1.0
. Jika Anda ingin menambahkannya ke proyek yang sudah ada, perbarui @subql/node
dan @subql/query
lalu indeks ulang proyek Anda dengan database yang bersih.
Jika Anda ingin menonaktifkan fitur ini karena alasan apa pun, Anda dapat menyetel parameter --disable-historical=true
pada subql-node
.
Saat startup, status terkini dari fitur ini dicetak ke konsol (Status historis diaktifkan
).
If you are running your project locally using subql-node
or subql-node-<network>
, make sure you enable the pg_extension btree_gist
You can run the following SQL query:
CREATE EXTENSION IF NOT EXISTS btree_gist;
Menanyakan Status Historis
Ada properti khusus (opsional) pada filter entitas GraphQL yang disebut blockHeight
. Jika Anda menghilangkan properti ini, SubQuery akan menanyakan status entitas pada ketinggian blok saat ini.
Please see one of our example projects: RMRK NFT.
Untuk menanyakan pemilik RMRK NFT pada tinggi blok 5.000.000, tambahkan parameter blockHeight seperti yang ditunjukkan di bawah ini:
query {
nFTEntities(first: 5, blockHeight: "5000000") {
nodes {
name
currentOwner
}
}
}
Untuk menanyakan pemilik koleksi NFT RMRK tersebut pada ketinggian blok terbaru, hilangkan parameter blockHeight seperti yang ditunjukkan di bawah ini.
query {
nFTEntities(first: 5) {
nodes {
name
currentOwner
}
}
}
Reindexing with Historical Data
When you enable Automated Historical State Tracking, you can benefit from on demand partial reindexing from certain block heights. Sebagai contoh:
- You can subscribe to new events, transactions, or assets in your manifest file, then backtrack to when they were deployed and start reindexing from that block
- You could update your mapping files to add new logic to deal with a runtime change, and then backtrack to the block where the runtime change was deployed.
- Coming Soon: You can update your schema and reindex from a certain block height to reflect those changes
You should see the new -- reindex command in Command Line Flags to learn more about how to use this new feature.