The Graph Builders Office Hours #50 đã ra mắt một buổi showcase về subgraph, trong đó tập trung vào các tính năng mới và sắp ra mắt.
TL;DR: Hãy cùng tìm hiểu về những cải tiến mới nhất trong công nghệ subgraph, bao gồm tổng hợp dữ liệu theo chuỗi thời gian (timeseries aggregations), lọc tham số được index (indexed argument filtering), và tối ưu hóa các cuộc gọi ETH song song (parallelized ETH calls). Cùng với đó, hãy cùng thảo luận về tiềm năng tương lai của subgraphs mô-đun, với tính năng tái sử dụng cùng các nâng cấp nhằm tăng cường độ ổn định của IPFS trong hệ sinh thái The Graph.
Hệ sinh thái The Graph đã và đang đóng vai trò cốt lõi trong việc giúp các nhà phát triển xây dựng, quản lý và tối ưu hoá subgraphs. Trong tập 50 của The Graph Builders Office Hours, Marcus Rein và Alex Pakalniskis ( cả hai đều đến từ công ty Edge & Node) đã thảo luận về những tính năng mới được nâng cấp của công nghệ subgraph)
Bài báo này kết luận lại những cập nhật quan trọng, những phát triển sắp tới và tiềm năng tương lai của subgraph đối với web phi tập trung.
Những Cải Tiến Quan Trọng trong Subgraph
Tổng hợp chuỗi thời gian và xử lý dữ liệu (Timeseries and aggregations)
Một trong những cập nhật nổi bật nhất đối với công nghệ subgraph là việc giới thiệu tổng hợp chuỗi thời gian. Tính năng thử nghiệm này có sẵn từ phiên bản đặc tả 1.1.0, cho phép nhà phát triển lưu trữ các điểm dữ liệu thô theo chuỗi thời gian và xác định cách các dữ liệu này được tổng hợp theo thời gian.
Tổng quan
Thực thể chuỗi thời gian (Timeseries entities): Những thực thể này lưu trữ dữ liệu theo dấu thời gian (timestamp) và không thể thay đổi. Chúng được khai báo trong schema GraphQL với @entity(timeseries: true). ID sẽ tự động được đặt thành kiểu Int8, còn timestamp sẽ tự động lấy giá trị từ block hiện tại.
- Thực thể tổng hợp (Aggregation entities): Các thực thể này thực hiện các phép tính trên dữ liệu chuỗi thời gian ở mức giờ hoặc ngày, giúp truy vấn dễ dàng hơn thông qua GraphQL. Tổng hợp được định nghĩa bằng annotation @aggregation.
Ví dụ
type Data @entity(timeseries: true) {
id: Int8!
timestamp: Timestamp!
price: BigDecimal!
}
type Stats @aggregation(intervals: ["hour", "day"], source: "Data") {
id: Int8!
timestamp: Timestamp!
sum: BigDecimal! @aggregate(fn: "sum", arg: "price")
}
Cách hoạt động
- Dữ liệu thô: Khi các thực thể Data được tạo, graph-node sẽ tự động cập nhật thực thể Stats bất cứ khi nào một khoảng thời gian (giờ hoặc ngày) kết thúc.
Chỉ số và phép tổng hợp: Một aggregation có thể chứa dimensions (trường nhóm dữ liệu) và aggregates (trường sử dụng directive @aggregate để thực hiện phép tính). Ví dụ: TokenStats có thể nhóm dữ liệu theo từng token và tính toán tổng khối lượng giao dịch hoặc giá cuối cùng theo USD.
Các tính năng nâng cao
Một câu hỏi quan trọng được đặt ra trong buổi thảo luận: “Làm thế nào để các phép tổng hợp này xử lý việc duy trì dữ liệu tích lũy qua các khoảng thời gian khác nhau?“
Alex giải thích: “Directive @aggregate hỗ trợ cờ cumulative, cho phép nhà phát triển quyết định liệu tổng hợp chỉ nên tính toán trong khoảng thời gian cụ thể hay tiếp tục tích lũy giá trị theo thời gian.”
Ví dụ truy vấn GraphQL
stats(interval: "hour", where: { timestamp_gt: 1704085200 }) {
id
timestamp
sum
}
}
Truy vấn trên lấy dữ liệu thống kê theo giờ, chỉ hiển thị các giá trị có timestamp lớn hơn 1704085200.
Lọc đối số được lập chỉ mục (Indexed argument filtering)
Đây là một cải tiến lớn, cho phép nhà phát triển lọc sự kiện blockchain dựa trên giá trị của các đối số đã lập chỉ mục. Tính năng này giúp giảm lượng dữ liệu dư thừa và cải thiện hiệu suất truy vấn.
Ví dụ, khi theo dõi các sự kiện chuyển token, nhà phát triển có thể chỉ định địa chỉ cần giám sát, đảm bảo rằng chỉ những giao dịch liên quan mới được lập chỉ mục.
Ví dụ
eventHandlers:
- event: Transfer(indexed address,indexed address,uint256)
handler: handleDirectedTransfer
topic1: ['0xAddressA']
topic2: ['0xAddressB']
Cấu hình trên giúp subgraph chỉ lập chỉ mục các giao dịch giữa 0xAddressA và 0xAddressB, tối ưu hóa tài nguyên.
Thực thi song song các cuộc gọi ETH (Parallelized ETH calls)
ETH calls thường là nút thắt cổ chai trong hiệu suất của subgraph. Để khắc phục, The Graph đã giới thiệu cuộc gọi ETH có tính khai báo (declarative ETH calls), cho phép thực thi song song nhiều cuộc gọi, giúp tối ưu hóa tốc độ xử lý dữ liệu.
Ví dụ
calls:
global0X128: Pool[event.address].feeGrowthGlobal0X128()
global1X128: Pool[event.address].feeGrowthGlobal1X128()
Cấu hình trên giúp thực hiện song song nhiều cuộc gọi ETH, tăng tốc độ xử lý.
Marcus nhấn mạnh tầm quan trọng của tính năng này và đặt câu hỏi: “Chúng ta có thể kỳ vọng mức cải thiện hiệu suất như thế nào khi xử lý các cuộc gọi ETH có tần suất cao?”
Alex giải thích: “Mặc dù các số liệu chính xác vẫn đang được thu thập, nhưng những cải tiến dự kiến là đáng kể, đặc biệt đối với các subgraph xử lý dữ liệu có khối lượng lớn.”
Điều gì đang chờ đón subgraph trong tương lai?
Subgraph mô-đun được sử dụng như các tài nguyên dữ liệu có thể tái sử dụng
Một trong những bước phát triển đáng mong đợi nhất là việc biến subgraph thành các tài nguyên dữ liệu có thể tái sử dụng theo mô-đun. Điều này cho phép các nhà phát triển sử dụng lại các subgraph hoặc thành phần của subgraph làm nguồn dữ liệu, sau đó mở rộng và tùy chỉnh theo nhu cầu cụ thể. Cách tiếp cận mô-đun này giúp các nhà phát triển có thể xây dựng dựa trên công việc của nhau, thúc đẩy một hệ sinh thái ngày càng kết nối và hiệu quả hơn.
Sự thay đổi này có thể cách mạng hóa cách chúng ta sử dụng subgraph, biến chúng thành các khối xây dựng linh hoạt mà các nhà phát triển có thể kết hợp để tạo ra những ứng dụng phức tạp hơn. Tiềm năng tái sử dụng và kết hợp của subgraph mở ra nhiều hướng đổi mới và hợp tác trong không gian Web3 phi tập trung.
Ví dụ:
dataSources:
- kind: subgraph
name: Foo
network: mainnet
source:
id: 'Qmblahblahblah'
startBlock: 123456
mapping:
kind: subgraph/entities
apiVersion: 0.0.y
language: wasm/assemblyscript
entityHandlers:
- entity: FooSpecificEntity
handler: handleFooSpecificEntity
- entity: SomeOtherFooEntity
handler: handleSomeOtherFooEntity
file: ./src/fooMappings.ts
Cấu hình một subgraph nguồn dữ liệu cho thực thể ‘Foo’ trên mạng mainnet, bắt đầu từ block 123456 với các entity handler tùy chỉnh được ánh xạ sang AssemblyScript.
Marcus đặt một câu hỏi đáng suy ngẫm:
“Tính mô-đun này sẽ ảnh hưởng như thế nào đến cách các nhà phát triển hợp tác trong các dự án khác nhau?”
Alex trả lời rằng:
“Cách tiếp cận subgraph mô-đun khuyến khích việc tái sử dụng và hợp tác, giúp các nhà phát triển tận dụng công việc của nhau, tạo ra các ứng dụng phi tập trung ngày càng gắn kết và liên kết chặt chẽ hơn.”
Cải thiện độ ổn định của IPFS
Dù không nổi bật như các cập nhật khác, việc cải thiện độ ổn định của IPFS đóng vai trò quan trọng trong việc đảm bảo độ tin cậy và khả năng mở rộng của hạ tầng The Graph. Việc chuyển sang sử dụng IPFS Gateway API và tách biệt lưu trữ tệp giữa tệp định nghĩa subgraph và các nguồn dữ liệu tùy chọn sẽ giúp giảm xung đột và nâng cao hiệu suất tổng thể.
Tương lai của subgraph: Một sân chơi đổi mới
Bên cạnh những cập nhật trên, hệ sinh thái The Graph đang khám phá các ý tưởng đổi mới, bao gồm hệ thống plugin cho subgraph. Hệ thống này sẽ giúp các nhà phát triển mở rộng chức năng của subgraph một cách dễ dàng, có thể tích hợp các tính năng như phân giải tên ENS hoặc nguồn cấp dữ liệu giá từ các oracle phi tập trung.
Cách hoạt động
Plugin: Nhà phát triển có thể chỉ định plugin trong tệp manifest của subgraph để mở rộng chức năng với các tính năng như phân giải tên ENS hoặc tích hợp dữ liệu lịch sử giá.
Ví dụ:
yaml
CopyEdit
plugIns:
- ENS
- Chronicle
Tích hợp plugin ENS và Chronicle để mở rộng chức năng subgraph với khả năng phân giải tên và dữ liệu lịch sử.
Trong cuộc thảo luận, Marcus hỏi:
“Hệ thống plugin này sẽ mở ra những khả năng mới nào cho các nhà phát triển?”
Alex trả lời:
“Hệ thống plugin dự kiến sẽ giảm đáng kể rào cản mở rộng tính năng subgraph, giúp phát triển các giải pháp tùy chỉnh và sáng tạo hơn trong hệ sinh thái Web3 phi tập trung.”
Giữ kết nối với cộng đồng
Từ các cải tiến về tổng hợp dữ liệu và lọc sự kiện đến tiềm năng của subgraph mô-đun, những nâng cấp này sẽ cung cấp cho các nhà phát triển những công cụ mạnh mẽ để xây dựng các ứng dụng phi tập trung trong tương lai.
Để cập nhật tin tức hoặc tìm hiểu sâu hơn, hãy kết nối với cộng đồng tại Graph Builders trên X, tham gia BuildersDAO Discord, và theo dõi các phiên thảo luận tại Graph Builders Office Hours.
Bạn cũng có thể quan tâm đến:
- Cách đánh giá và truy vấn subgraph trên The Graph Network
- Subgraph Studio – Lựa chọn dễ dàng để xây dựng subgraph của bạn
Bài viết này giúp trả lời các câu hỏi:
- Những tính năng mới nào đã được giới thiệu cho subgraph?
- Các tính năng nào được lên kế hoạch cho subgraph trong tương lai?
- Tổng hợp chuỗi thời gian và aggregation giúp gì cho nhà phát triển?
- Lọc tham số được lập chỉ mục là gì và hoạt động ra sao?
- Làm thế nào để subgraph có thể trở thành mô-đun và tái sử dụng trong tương lai?
Tác giả: Paul Barba
Paul là một thành viên tận tâm của Graph Advocates DAO và cộng đồng Graphtronauts. Anh là một nhà đầu tư và có niềm đam mê lớn với crypto, với trọng tâm nghiên cứu sâu về The Graph protocol. Paul đã có nhiều đóng góp quan trọng, bao gồm viết blog chuyên sâu cho Graphtronauts và hỗ trợ phát triển tài liệu subgraph cho nhiều dự án trong hệ sinh thái The Graph. Gần đây nhất, anh đảm nhận vai trò kỹ thuật viên viết tài liệu tại Pinax, tiếp tục cam kết thúc đẩy sự hiểu biết và ứng dụng blockchain cũng như các công nghệ liên quan đến The Graph.
Liên hệ với tác giả:
No Comments