Graph Builders Office Hours #50 นำเสนอกราฟย่อยที่เน้นฟีเจอร์ใหม่และที่กำลังจะมีขึ้น
TL; DR: เรียนรู้เกี่ยวกับความก้าวหน้าล่าสุดในเทคโนโลยีกราฟย่อย รวมถึงการรวมอนุกรมเวลา การกรองพารามิเตอร์ดัชนี และการโทร Ethereum แบบขนาน ในขณะที่พูดคุยเกี่ยวกับศักยภาพในอนาคตของกราฟย่อยแบบโมดูลาร์ที่นำมาใช้ซ้ำได้ และผลกระทบของความน่าเชื่อถือของ IPFS ภายในการปรับปรุงระบบนิเวศของ The Graph
ระบบนิเวศของกราฟกำลังเติบโตอย่างรวดเร็ว ทำให้นักพัฒนามีเครื่องมือที่มีประสิทธิภาพมากขึ้นในการสร้าง จัดการ และเพิ่มประสิทธิภาพกราฟย่อย ในตอนที่ 50 ของ The Graph Builders Office Hours Marcus Rein และ Alex Pakalniskis (ทั้ง Edge และ Node) พูดคุยถึงความก้าวหน้าในเทคโนโลยีกราฟย่อย
บทความนี้จะสรุปการอัปเดตที่สำคัญ การพัฒนาที่กำลังจะเกิดขึ้น และศักยภาพในอนาคตของกราฟย่อยบนเครือข่ายแบบกระจายอำนาจ
----บันทึกคำพูดของอเล็กซ์
ลิงค์วิดีโอ: https://youtu.be/AOEVsx6u_mc
การแนะนำอนุกรมเวลาและการรวมกลุ่มเป็นหนึ่งในการอัปเดตที่สำคัญที่สุดในเทคโนโลยีกราฟย่อย คุณลักษณะทดลองนี้ซึ่งมีให้ใช้งานโดยเริ่มตั้งแต่ข้อกำหนดเวอร์ชัน 1.1.0 ช่วยให้นักพัฒนาสามารถจัดเก็บจุดข้อมูลดิบเป็นอนุกรมเวลา และกำหนดวิธีการรวมจุดข้อมูลเหล่านั้นเมื่อเวลาผ่านไป
- เอนทิตีอนุกรมเวลา: เอนทิตีเหล่านี้จะบันทึกจุดข้อมูลโดยใช้การประทับเวลาและไม่เปลี่ยนรูป สิ่งเหล่านี้ถูกกำหนดไว้ในสคีมา GraphQL โดยใช้ @entity(timeseries: true) รหัสจะถูกตั้งค่าเป็นประเภท Int8 โดยอัตโนมัติ และการประทับเวลาจะถูกตั้งค่าเป็นการประทับเวลาของบล็อกปัจจุบันโดยอัตโนมัติ
- เอนทิตีการรวม: เอนทิตีเหล่านี้ทำการคำนวณที่กำหนดไว้ล่วงหน้าเกี่ยวกับจุดข้อมูลอนุกรมเวลาทุกชั่วโมงหรือวัน และจัดเก็บผลลัพธ์เพื่อให้เข้าถึงได้ง่ายผ่าน GraphQL การรวมถูกกำหนดโดยใช้คำอธิบายประกอบ @aggregation
ตัวอย่าง:
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")
}
- จุดข้อมูลดิบ: การแม็ปสำหรับสคีมานี้จะเพิ่มจุดข้อมูลโดยการสร้างเอนทิตีข้อมูล ซึ่งคล้ายกับเอนทิตีปกติ โหนดกราฟจะเติมการรวมสถิติโดยอัตโนมัติเมื่อสิ้นสุดชั่วโมงหรือวันที่กำหนด
- มิติและการรวมกลุ่ม: การรวมสามารถประกอบด้วยมิติ (ฟิลด์ที่จัดกลุ่มข้อมูล) และการรวมกลุ่ม (ฟิลด์ที่มีคำสั่ง @aggregate ที่ทำการคำนวณ) ตัวอย่างเช่น การรวม TokenStats สามารถจัดกลุ่มจุดข้อมูลตามโทเค็น และคำนวณปริมาณรวมและราคาล่าสุดเป็น USD
ในระหว่างการประชุม Marcus ถามคำถามสำคัญ: "การรวมกลุ่มเหล่านี้จัดการกับความซับซ้อนในการจัดการข้อมูลที่สะสมในช่วงเวลาที่ต่างกันอย่างไร"
Alex ตอบว่า: "คำตอบอยู่ที่ความยืดหยุ่นของคำสั่ง @aggregate ซึ่งรองรับการแท็กการสะสม สิ่งนี้ทำให้นักพัฒนาสามารถตัดสินใจว่าการรวมจะรวมเฉพาะข้อมูลภายในช่วงเวลา หรือยังคงสะสมค่าต่อไปเมื่อเวลาผ่านไป"
ตัวอย่างแบบสอบถาม GraphQL
{
stats(interval: "hour", where: { timestamp_gt: 1704085200 }) {
sum
timestamp
id
}
}
ค้นหาสถิติรายชั่วโมงสำหรับจุดข้อมูลที่มีการประทับเวลามากกว่า 1704085200 เพื่อดึงข้อมูลผลรวมของค่า
การกรองพารามิเตอร์ดัชนีเป็นอีกหนึ่งคุณสมบัติที่ก้าวล้ำที่ช่วยให้นักพัฒนาสามารถกรองเหตุการณ์บล็อคเชนได้อย่างแม่นยำตามค่าของพารามิเตอร์ดัชนี คุณสมบัตินี้ช่วยให้การจัดการข้อมูลมีประสิทธิภาพมากขึ้นโดยลดการบวมของข้อมูลและเพิ่มความเร็วของกราฟย่อย
ตัวอย่างเช่น ในเหตุการณ์การโอนโทเค็น นักพัฒนาสามารถระบุที่อยู่ที่จะตรวจสอบได้ เพื่อให้แน่ใจว่าจะมีการจัดทำดัชนีเฉพาะข้อมูลที่เกี่ยวข้องเท่านั้น คุณลักษณะการกรองล่วงหน้านี้มีประโยชน์อย่างยิ่งเมื่อกราฟย่อยกำลังประมวลผลข้อมูลจำนวนมาก แต่ต้องการเพียงข้อมูลเฉพาะเท่านั้น
ตัวอย่าง:
eventHandlers:
- event: Transfer(indexed address,indexed address,uint256)
handler: handleDirectedTransfer
topic1: ['0xAddressA']
topic2: ['0xAddressB']
การตั้งค่านี้ช่วยให้มั่นใจได้ว่ากราฟย่อยจะจัดทำดัชนีธุรกรรมระหว่างที่อยู่ที่ระบุเท่านั้น ซึ่งจะช่วยเพิ่มประสิทธิภาพการใช้ทรัพยากร
การเรียก ETH มักเป็นจุดคอขวดของประสิทธิภาพกราฟย่อย โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับข้อมูลจำนวนมาก เพื่อแก้ไขปัญหานี้ The Graph ได้แนะนำการเรียก ETH ที่เปิดเผย ซึ่งช่วยให้การเรียกเหล่านี้ดำเนินการแบบคู่ขนานได้ การปรับปรุงนี้เพิ่มประสิทธิภาพของกราฟย่อย โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมที่มีธุรกรรมสูง
ในขณะที่ยังอยู่ในช่วงเริ่มต้น ความสามารถในการขนานการเรียก ETH แบบขนานสัญญาว่าจะทำให้กราฟย่อยตอบสนองได้ดีขึ้น และสามารถจัดการกับการดำเนินการที่ซับซ้อนได้เร็วขึ้น
โปรดทราบ: Edge&Node จะไม่มีส่วนร่วมในงานนี้อีกต่อไปตั้งแต่วันที่ 23 กันยายน 2024
ตัวอย่าง:
calls:
global0X128: Pool[event.address].feeGrowthGlobal0X128()
global1X128: Pool[event.address].feeGrowthGlobal1X128()
การตั้งค่านี้ดำเนินการเรียก ETH แบบคู่ขนาน ทำให้กราฟย่อยตอบสนองได้ดีขึ้นและสามารถจัดการการดำเนินการที่ซับซ้อนได้เร็วขึ้น
Marcus เน้นย้ำถึงความสำคัญของฟีเจอร์นี้ โดยถามว่า: "เราสามารถคาดหวังการปรับปรุงประสิทธิภาพแบบใดเมื่อจัดการกับการโทร ETH ความถี่สูง"
Alex อธิบายว่า: “ในขณะที่ยังคงรวบรวมตัวชี้วัดที่แน่นอน การปรับปรุงที่คาดหวังนั้นมีมากมาย โดยเฉพาะอย่างยิ่งสำหรับกราฟย่อยที่จัดการข้อมูลจำนวนมาก”
Marcus เน้นย้ำถึงความสำคัญของฟีเจอร์นี้ โดยถามว่า: "เราสามารถคาดหวังการปรับปรุงประสิทธิภาพแบบใดเมื่อจัดการกับการโทร ETH ความถี่สูง"
Alex อธิบายว่า: “ในขณะที่ยังคงรวบรวมตัวชี้วัดที่แน่นอน การปรับปรุงที่คาดหวังนั้นมีมากมาย โดยเฉพาะอย่างยิ่งสำหรับกราฟย่อยที่จัดการข้อมูลจำนวนมาก”
หนึ่งในโอกาสที่น่าตื่นเต้นที่สุดคือแนวคิดของกราฟย่อยในฐานะเครื่องมือข้อมูลแบบแยกส่วนและนำกลับมาใช้ใหม่ได้ สิ่งนี้จะช่วยให้นักพัฒนาสามารถใช้กราฟย่อยหรือส่วนประกอบของกราฟย่อยที่มีอยู่เป็นแหล่งข้อมูล ซึ่งสามารถขยายและปรับแต่งให้ตรงตามความต้องการเฉพาะได้ แนวทางแบบแยกส่วนนี้จะช่วยให้นักพัฒนาสามารถต่อยอดงานของกันและกัน ส่งเสริมระบบนิเวศที่เชื่อมต่อกันและมีประสิทธิภาพมากขึ้น
การเปลี่ยนแปลงนี้สามารถปฏิวัติวิธีที่เราใช้กราฟย่อย โดยเปลี่ยนให้เป็นบล็อคการสร้างที่ยืดหยุ่นซึ่งนักพัฒนาสามารถนำมารวมกันเพื่อสร้างแอปพลิเคชันที่ซับซ้อนได้ ศักยภาพในการนำมาใช้ซ้ำและความสามารถในการประกอบในกราฟย่อยเปิดช่องทางใหม่สำหรับนวัตกรรมและการทำงานร่วมกันภายในเครือข่ายแบบกระจายอำนาจ
ตัวอย่าง:
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
ตั้งค่าแหล่งข้อมูลกราฟย่อยสำหรับเอนทิตี 'Foo' บนเครือข่ายหลัก เริ่มต้นด้วยบล็อก 123456 และแมปตัวจัดการเอนทิตีแบบกำหนดเองกับ AssemblyScript
Marcus ตั้งคำถามที่กระตุ้นความคิด: “ความเป็นโมดูลนี้จะส่งผลต่อวิธีที่นักพัฒนาทำงานร่วมกันในโครงการต่างๆ อย่างไร”
Alex ตอบว่า: “แนวทางกราฟย่อยแบบแยกส่วนสนับสนุนการใช้ซ้ำและการทำงานร่วมกัน ช่วยให้นักพัฒนาสามารถสร้างผลงานของกันและกันได้ ส่งผลให้แอปพลิเคชันกระจายอำนาจมีความเหนียวแน่นและเชื่อมโยงถึงกันมากขึ้น”
แม้ว่าจะไม่ฉูดฉาดเหมือนการอัปเดตอื่นๆ แต่การทำงานอย่างต่อเนื่องเพื่อปรับปรุงความแข็งแกร่งของ IPFS นั้นมีความสำคัญอย่างยิ่งต่อการรับรองความน่าเชื่อถือและความสามารถในการปรับขนาดของโครงสร้างพื้นฐาน The Graph การย้ายไปยัง IPFS Gateway API และการแยกโฮสต์ไฟล์ของไฟล์คำจำกัดความกราฟย่อยจากแหล่งข้อมูลเสริมจะช่วยลดข้อขัดแย้งและปรับปรุงประสิทธิภาพโดยรวม
นอกเหนือจากการอัปเดตเหล่านี้ ระบบนิเวศของ The Graph ยังสำรวจแนวคิดเชิงนวัตกรรม เช่น ระบบปลั๊กอินสำหรับกราฟย่อย ระบบจะช่วยให้นักพัฒนาขยายฟังก์ชันกราฟย่อยได้โดยใช้ความพยายามเพียงเล็กน้อย และอาจรวมฟังก์ชันต่างๆ เช่น การแก้ไขชื่อโดเมน ENS หรือฟีดราคา oracle แบบกระจายอำนาจ
- ปลั๊กอิน: นักพัฒนาสามารถระบุปลั๊กอินในรายการกราฟย่อยที่ขยายฟังก์ชันการทำงานของกราฟย่อยด้วยคุณสมบัติใหม่ เช่น การค้นหาโดเมน ENS หรือการตอบรับราคา
ตัวอย่าง:
plugIns:
- ENS
- Chronicle
ผสานรวมปลั๊กอิน ENS และ Chronicle เพื่อขยายฟังก์ชันกราฟย่อยด้วยการปรับปรุงการจำแนกชื่อและความสามารถด้านข้อมูลประวัติ
ในระหว่างการสนทนา Marcus ถามว่า: “ระบบปลั๊กอินนี้เปิดโอกาสให้นักพัฒนามีโอกาสใหม่อะไรบ้าง”
Alex ตอบว่า: “ระบบปลั๊กอินคาดว่าจะลดเกณฑ์ลงอย่างมากสำหรับการขยายฟังก์ชันกราฟย่อย และเปิดใช้งานโซลูชันที่ปรับแต่งและสร้างสรรค์มากขึ้นในเว็บแบบกระจายอำนาจ”
ตั้งแต่การปรับปรุงการรวมและการกรองไปจนถึงศักยภาพของกราฟย่อยแบบโมดูลาร์ ความก้าวหน้าเหล่านี้จะช่วยให้นักพัฒนามีเครื่องมืออันทรงพลังสำหรับการสร้างแอปพลิเคชันแบบกระจายอำนาจแห่งอนาคต
Alex ตอบว่า: “ระบบปลั๊กอินคาดว่าจะลดเกณฑ์ลงอย่างมากสำหรับการขยายฟังก์ชันกราฟย่อย และเปิดใช้งานโซลูชันที่ปรับแต่งและสร้างสรรค์มากขึ้นในเว็บแบบกระจายอำนาจ”
ตั้งแต่การปรับปรุงการรวมและการกรองไปจนถึงศักยภาพของกราฟย่อยแบบโมดูลาร์ ความก้าวหน้าเหล่านี้จะช่วยให้นักพัฒนามีเครื่องมืออันทรงพลังสำหรับการสร้างแอปพลิเคชันแบบกระจายอำนาจแห่งอนาคต
หากต้องการติดตามข่าวสารล่าสุดหรือทำความเข้าใจการพัฒนาเหล่านี้ให้ลึกซึ้งยิ่งขึ้น เชื่อมต่อกับชุมชนบน Graph Builders บน X สำรวจแหล่งข้อมูลบน Graph BuildersDAO Discord และติดตามการสนทนาทั้งหมดผ่านเพลย์ลิสต์ Graph Builders Office Hours
- วิธีประเมินและสืบค้นกราฟย่อยบนเครือข่ายกราฟ
- Subgraph Studio ตัวเลือกที่ง่ายสำหรับการสร้างกราฟย่อย
(สำหรับคำศัพท์ทางวิชาชีพที่เกี่ยวข้อง ความคิดเห็น ไลบรารีโค้ด ไฮเปอร์ลิงก์ ฯลฯ โปรดติดตามบล็อกหรือบัญชีสาธารณะเพื่อค้นหา)
💡 บทความนี้ตอบคำถามต่อไปนี้:
- มีการนำเสนอคุณสมบัติใหม่อะไรบ้างในแผนย่อย?
- มีการวางแผนฟังก์ชั่นอะไรบ้างสำหรับแผนการย่อยในอนาคต?
- อนุกรมเวลาและการรวมกลุ่มช่วยให้นักพัฒนาทำอะไรได้บ้าง?
- การกรองพารามิเตอร์ดัชนีคืออะไร และทำหน้าที่อะไร?
- กราฟย่อยจะถูกทำให้เป็นโมดูลและนำกลับมาใช้ใหม่ได้อย่างไรในอนาคต
#web3data #blockchaindataindex #TheGraph
ความคิดเห็นทั้งหมด