Cointime

Download App
iOS & Android

การเพิ่มประสิทธิภาพกราฟย่อย: คุณสมบัติใหม่และขั้นตอนถัดไป

Validated Project

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

ความคิดเห็น

ความคิดเห็นทั้งหมด

Recommended for you