กลับไปหน้าบทความ

อ่าน 8 นาที

เกรมลิน (ภาษาสำหรับการสอบถามข้อมูล)

Gremlinเป็น ภาษา การท่องกราฟและเครื่องเสมือนที่พัฒนาโดยApache TinkerPopของApache Software Foundation Gremlin สามารถใช้งานได้ทั้งกับ ฐานข้อมูลกราฟแบบ OLTPและ ตัวประมวลผลกราฟแบบ...

เกรมลิน (ภาษาสำหรับการสอบถามข้อมูล)

เกรมลิน
ออกแบบโดยมาร์โก เอ. โรดริเกซ
นักพัฒนาApache TinkerPop จากApache Software Foundation
ปรากฏครั้งแรก2009 ( 2009 )
เวอร์ชันเสถียร
3.8.0 / 12 พฤศจิกายน 2025 [ 1 ] ( 12 พฤศจิกายน 2025 )
โอเอสใช้งานได้หลาย แพลตฟอร์ม (Cross -platform)
ใบอนุญาตใบอนุญาต Apache 2.0
เว็บไซต์tinkerpop.apache.org
ภาษาถิ่น
Gremlin-Java, Gremlin-Python, Gremlin-JavaScript, Gremlin.Net, Gremlin-Go, Gremlin-Groovy
ได้รับอิทธิพลจาก
นิพจน์ปกติ , XPath , Ripple, SPARQL , SQL , Java / JVM

Gremlinเป็น ภาษา การท่องกราฟและเครื่องเสมือนที่พัฒนาโดยApache TinkerPopของApache Software Foundation Gremlin สามารถใช้งานได้ทั้งกับ ฐานข้อมูลกราฟแบบ OLTPและ ตัวประมวลผลกราฟแบบ OLAP ออโตมาตาและ รากฐาน ภาษาเชิงฟังก์ชันของ Gremlin ช่วยให้ Gremlin สามารถรองรับ การสืบค้น แบบเชิงคำสั่งและ เชิง ประกาศความเป็นอิสระของภาษาโฮสต์ภาษาเฉพาะโดเมน ที่ผู้ใช้กำหนด คอมไพเลอร์/ตัวเพิ่มประสิทธิภาพที่ขยายได้ โมเดลการทำงานแบบเครื่องเดียวและหลายเครื่อง และการประเมินแบบไฮบริดเชิงลึกและเชิงกว้างพร้อม ความสมบูรณ์แบบ ของTuring [ 2 ]

เพื่อเป็นการอธิบายเปรียบเทียบ Apache TinkerPop และ Gremlin เปรียบเสมือน JDBC และSQLสำหรับฐานข้อมูลเชิงสัมพันธ์ ในทำนองเดียวกัน เครื่องสำรวจ Gremlin ก็เปรียบเสมือน Java virtual machine สำหรับการคำนวณกราฟ เปรียบเสมือนJava virtual machineสำหรับการคำนวณทั่วไป[ 3 ]

ประวัติศาสตร์

  • โครงการนี้ถือกำเนิดขึ้นเมื่อวันที่ 30 ตุลาคม 2009 และได้รับการตั้งชื่อทันทีว่า "TinkerPop"
  • เวอร์ชัน 0.1 ซึ่งเผยแพร่ครั้งแรกเมื่อวันที่ 25 ธันวาคม 2009
  • 2011-05-21 เวอร์ชัน 1.0 ได้ถูกปล่อยออกมาแล้ว
  • เวอร์ชัน 2.0 วางจำหน่ายแล้วเมื่อวันที่ 24 พฤษภาคม 2012
  • 16 มกราคม 2015 TinkerPop กลายเป็นโครงการ Apache Incubator
  • 2015-07-09 v3.0.0-incubating ได้ถูกปล่อยออกมาแล้ว
  • 23 พฤษภาคม 2016 Apache TinkerPop กลายเป็นโครงการระดับสูงสุด
  • เวอร์ชัน 3.1.3 และ 3.2.1 ที่เผยแพร่ครั้งแรกในชื่อ Apache TinkerPop คือวันที่ 18 กรกฎาคม 2559
  • เวอร์ชัน 3.3.1 เผยแพร่เมื่อวันที่ 17 ธันวาคม 2017
  • เวอร์ชัน 3.3.3 เปิดตัวเมื่อวันที่ 8 พฤษภาคม 2018
  • 2019-08-05 v3.4.3 ได้ถูกปล่อยออกมาแล้ว
  • 2020-02-20 เวอร์ชัน 3.4.6 ได้ถูกปล่อยออกมาแล้ว
  • เวอร์ชัน 3.5.0 เปิดตัวเมื่อวันที่ 1 พฤษภาคม 2021
  • เวอร์ชัน 3.6.0 เปิดตัวเมื่อวันที่ 4 เมษายน 2022
  • 2023-07-31 v3.7.0 ได้ถูกปล่อยออกมาแล้ว
  • เวอร์ชัน 3.8.0 เปิดตัวเมื่อวันที่ 12 พฤศจิกายน 2025

การบูรณาการผู้ขาย

Gremlin เป็น ภาษาสำหรับการสำรวจกราฟ ที่ได้รับอนุญาตภายใต้ Apache2ซึ่งสามารถใช้งานได้โดยผู้จำหน่ายระบบกราฟ โดยทั่วไปแล้วผู้จำหน่ายระบบกราฟมีสองประเภท ได้แก่ฐานข้อมูลกราฟ OLTP และตัวประมวลผลกราฟ OLAP ตารางด้านล่างแสดงรายชื่อผู้จำหน่ายระบบกราฟที่รองรับ Gremlin

ผู้ขาย ระบบกราฟ
นีโอ4เจฐานข้อมูลกราฟ
โอเรียนท์ดีบีฐานข้อมูลกราฟ
DataStax Enterprise (5.0 ขึ้นไป) ฐานข้อมูลกราฟ
ฮาดูป ( จิราฟ ) ตัวประมวลผลกราฟ
ฮาดู๊ป ( สปาร์ค ) ตัวประมวลผลกราฟ
อินฟินิตี้กราฟฐานข้อมูลกราฟ
จานัสกราฟฐานข้อมูลกราฟ
คอสมอส ดีบีฐานข้อมูลกราฟ
อเมซอน เนปจูนฐานข้อมูลกราฟ
อาร์เคดดีบีฐานข้อมูลกราฟ

ตัวอย่างการท่องไป

ตัวอย่างต่อไปนี้ของการสอบถามและการตอบกลับของ Gremlin ในสภาพแวดล้อม Gremlin-Groovy เกี่ยวข้องกับการแสดงกราฟของชุดข้อมูลMovieLens [ 4 ]ชุดข้อมูลประกอบด้วยผู้ใช้ที่ให้คะแนนภาพยนตร์ ผู้ใช้แต่ละคนมีอาชีพหนึ่งอาชีพ และภาพยนตร์แต่ละเรื่องมีหมวดหมู่ที่เกี่ยวข้องอย่างน้อยหนึ่งหมวดหมู่ แผนผังกราฟของ MovieLens มีรายละเอียดดังต่อไปนี้

ผู้ใช้-- ให้คะแนน[ ดาว: 0 - 5 ] --> ภาพยนตร์ผู้ใช้-- อาชีพ--> อาชีพภาพยนตร์-- หมวดหมู่--> หมวดหมู่

การท่องแบบง่าย

สำหรับแต่ละจุดยอดในกราฟ ให้แสดงป้ายกำกับของจุดยอดนั้น จากนั้นจัดกลุ่มและนับจำนวนป้ายกำกับที่ไม่ซ้ำกันทั้งหมด

gremlin > g . V (). label (). groupCount () ==>[ occupation: 21 , movie: 3883 , category: 18 , user: 6040 ]

ภาพยนตร์ที่เก่าแก่ที่สุดสร้างขึ้นในปีใด?

gremlin > g . V (). hasLabel ( 'movie' ). values ​​( 'year' ). min () ==> 1919

ภาพยนตร์เรื่อง Die Hard มีเรตติ้งเฉลี่ยเท่าไหร่?

gremlin > g . V (). has ( 'movie' , 'name' , 'Die Hard' ). inE ( 'rated' ). values ​​( 'stars' ). mean () ==> 4.121848739495798

การสำรวจการฉายภาพ

สำหรับแต่ละหมวดหมู่ ให้แสดงแผนที่ที่มีชื่อหมวดหมู่และจำนวนภาพยนตร์ที่อยู่ในหมวดหมู่นั้น

gremlin > g . V (). hasLabel ( 'category' ). as ( 'a' , 'b' ). select ( 'a' , 'b' ). by ( 'name' ). โดย( inE ( 'category' ). count ()) ==>[ a: แอนิเมชั่น, b: 105 ] ==>[ a: ภาพยนตร์สำหรับเด็ก, b: 251 ] ==>[ a: ตลก, b: 1200 ] ==>[ a: ผจญภัย, b: 283 ] ==>[ a: แฟนตาซี, b: 68 ] ==>[ a: โรแมนติก, b: 471 ] ==>[ a: ดราม่า, b: 1603 ] ==>[ a: แอ็คชั่น, b: 503 ] ==>[ a: อาชญากรรม, b: 211 ] ==>[ a: ระทึกขวัญ, b: 492 ] ==>[ a: สยองขวัญ, b: 343 ] ==>[ a: ไซไฟ, b: 276 ] == >[ a: สารคดี, b: 127 ] ==>[ a: สงคราม, b: 143 ] ==>[ a: ละครเพลง, b: 114 ] ==>[ a: ปริศนา, b: 106 ] ==>[ a: ภาพยนตร์- นัวร์, b: 44 ] ==>[ a: เวสเทิร์น, b: 68 ]

สำหรับภาพยนตร์แต่ละเรื่องที่มีการให้คะแนนอย่างน้อย 11 ครั้ง ให้แสดงแผนที่ที่มีชื่อภาพยนตร์และคะแนนเฉลี่ย เรียงลำดับแผนที่ตามคะแนนเฉลี่ยจากมากไปน้อย แสดงแผนที่ 10 อันดับแรก (เช่น 10 อันดับแรก)

gremlin > g . V (). hasLabel ( 'movie' ). as ( 'a' , 'b' ). where ( inE ( 'rated' ). count (). is ( gt ( 10 ))). select ( 'a' , 'b' ). by ( 'name' ). by ( inE ( 'rated' ). values ​​( 'stars' ). mean ()). order (). by ( select ( 'b' ), decr ). ขีดจำกัด( 10 ) ==>[ a: Sanjuro , b: 4.608695652173913 ] ==>[ a: Seven Samurai ( The Magnificent Seven ), b: 4.560509554140127 ] ==>[ a: Shawshank Redemption , The , b: 4.554557700942973 ] ==>[ a: Godfather , The , b: 4.524966261808367 ] ==>[ a: Close Shave , A , b: 4.52054794520548 ] ==>[ a: Usual Suspects , The , b: 4.517106001121705 ] ==>[ a: Schindler ' s List , b: 4.510416666666667 ] ==>[ a: Wrong Trousers , The , b: 4.507936507936508 ] ==>[ a: Sunset Blvd . ( a . k . a . Sunset Boulevard ), b: 4.491489361702127 ] ==>[ a: Raiders of the Lost Ark , b: 4.47772 ]

การท่องไปพร้อมกับการจับคู่รูปแบบเชิงประกาศ

Gremlin รองรับการจับคู่รูปแบบกราฟแบบประกาศคล้ายกับSPARQLตัวอย่างเช่น คำสั่งค้นหาด้านล่างนี้ใช้ขั้นตอน `match()` ของ Gremlin

ภาพยนตร์แอ็คชั่นยุค 80 เรื่องไหนที่โปรแกรมเมอร์วัย 30 กว่าๆ ชอบ? นับจำนวนภาพยนตร์เหล่านั้นเป็นกลุ่มตามชื่อ และเรียงลำดับแผนที่จำนวนกลุ่มตามค่าจากมากไปน้อย ตัดแผนที่ให้เหลือเพียง 10 อันดับแรก และแสดงผลข้อมูลในแผนที่ออกมา

เกร็มลิน> g . V (). ตรงกับ( __ . as ( 'a' ). hasLabel ( 'movie' ), __ . as ( 'a' ). out ( 'category' ). has ( 'name' , 'Action' ), __ . as ( 'a' ). has ( 'year' , between ( 1980 , 1990 )), __ . as ( 'a' ). inE ( 'rated' ). as ( 'b' ), __ . as ( 'b' ). has ( 'stars' , 5 ), __ . as ( 'b' ). outV (). as ( 'c' ), __ . as ( 'c' ). out ( 'occupation' ). has ( 'name' , 'programmer' ), __ . as ( 'c' ). has ( 'age' , between ( 30 , 40 )) ))). เลือก( 'a' ). groupCount (). by ( 'name' ). order ( local ). by ( valueDecr ). limit ( local , 10 ) ==> Raiders of the Lost Ark = 26 ==> Star Wars Episode V - The Empire Strikes Back = 26 ==> Terminator ,เดอะ= 23 ==> สตาร์วอร์สตอนที่6 - การกลับมาของเจได= 22 ==> เจ้าหญิงเจ้าสาวเดอะ= 19==> เอเลี่ยน= 18 ==> เดอะบู๊ส์= 11 ==> อินเดียนาโจนส์กับสงครามครูเสดครั้งสุดท้าย= 11 ==> สตาร์เทร็คเดอะแรธออฟข่าน= 10 ==> เดอะอบิส์= 9

การท่อง OLAP

ภาพยนตร์เรื่องใดมีความสำคัญมากที่สุดในกราฟ 5 ดาวโดยนัย ?

gremlin > g = graph.traversal ( computer ( SparkGraphComputer )) ==> graphtraversalsource [ hadoopgraph [ gryoinputformat- > gryooutputformat ], sparkgraphcomputer ] gremlin > g.V ( ). repeat ( outE ( 'rated' ). has('stars', 5 ) .inV ( ) . groupCount ( ' m ' ) . by ( ' name' ). inE ( 'rated' ). has ( 'stars' , 5 ) .outV ()). times ( 4 ). cap ( 'm' ) ==> Star Wars Episode IV - A New Hope 35405394353105332 ==> American Beauty 31943228282020585 ==> Raiders of the Lost Ark 31224779793238499 ==> Star Wars Episode V - The Empire Strikes Back 30434677119726223 ==> Godfather , The 30258518523013057 ==> Shawshank Redemption , The 28297717387901031 ==> Schindler ' s List 27539336654199309 ==> Silence of the Lambs , The 26736276376806173 ==> Fargo 26531050311325270 ==> เมทริกซ์, The 26395118239203191

เครื่องมือสำรวจกราฟ Gremlin

Gremlin เป็นเครื่องเสมือนที่ประกอบด้วยชุดคำสั่งและกลไกการประมวลผล มีการเปรียบเทียบ Gremlin กับ Java

ระบบนิเวศของชวา ระบบนิเวศของเกรมลิน
ภาษาโปรแกรม Apache Groovyเกรมลิน-กรู้วี่
ภาษาโปรแกรมสกาล่าเกรมลิน-สกาลา
ภาษาโปรแกรมโคลจูร์เกรมลิน-โคลจูร์
... ...
ภาษาการเขียนโปรแกรม Javaเกรมลิน-จาวา8
ชุดคำสั่ง Java ไลบรารีขั้นตอนเกรมลิน
เครื่องเสมือน Javaเครื่องจักรเคลื่อนที่เกร็มลิน

ขั้นตอนของ Gremlin (ชุดคำสั่ง)

ต่อไปนี้เป็นการสำรวจโครงสร้างข้อมูลด้วยภาษา Gremlin ในภาษา Gremlin-Java8

g . V (). as ( "a" ). out ( "knows" ). as ( "b" ). select ( "a" , "b" ). by ( "name" ). by ( "age" )

ภาษา Gremlin (เช่น รูปแบบ การแสดงการท่องกราฟแบบลื่นไหล ) สามารถแสดงได้ในภาษาโฮสต์ใดๆ ที่รองรับ การประกอบฟังก์ชันและการซ้อนฟังก์ชันเนื่องจากข้อกำหนดที่เรียบง่ายนี้ จึงมีภาษา Gremlin หลายแบบ เช่น Gremlin-Groovy, Gremlin-Scala, Gremlin-Clojure เป็นต้น การท่องกราฟใน Gremlin-Java8 ข้างต้นจะถูกคอมไพล์ลงเป็นลำดับขั้นตอนที่เรียกว่าการท่องกราฟการแสดงการท่องกราฟข้างต้นในรูปแบบสตริงมีดังต่อไปนี้

[ GraphStep ( [] , vertex ) @ [ a ] ​​, VertexStep ( OUT , [ knows ] , vertex ) @ [ b ] , SelectStep ( [ a , b ] , [ value ( name ), value ( age ) ] ) ]

ขั้นตอนต่างๆเป็นส่วนประกอบพื้นฐานของเครื่องจักรสำรวจกราฟ Gremlin เป็นคำสั่งที่มีพารามิเตอร์ซึ่งเครื่องจักรจะดำเนินการในท้ายที่สุดชุดคำสั่ง ของ Gremlin มีประมาณ 30 ขั้นตอน ขั้นตอนเหล่านี้เพียงพอสำหรับการคำนวณทั่วไปและสิ่งที่จำเป็นโดยทั่วไปในการแสดงรูปแบบทั่วไปของคำถามสำรวจกราฟใดๆ

เนื่องจาก Gremlin เป็นทั้งภาษา ชุดคำสั่ง และเครื่องเสมือน จึงเป็นไปได้ที่จะออกแบบภาษาสำหรับการสำรวจโครงสร้างข้อมูลอีกภาษาหนึ่งที่คอมไพล์ไปยังเครื่องสำรวจโครงสร้างข้อมูล Gremlin (คล้ายกับวิธีที่ Scala คอมไพล์ไปยังJVM ) ตัวอย่างเช่น ภาษาจับคู่รูปแบบกราฟ SPARQL ที่ได้รับความนิยม สามารถคอมไพล์เพื่อทำงานบนเครื่อง Gremlin ได้ คำสั่ง SPARQL ต่อไปนี้

เลือก?a ? b ? c โดยที่{ ?a เป็นบุคคล. ? a เช่นรู้จัก?b . ?a เช่นสร้าง? c . ?b เช่นสร้าง? c . ?b เช่นอายุ? d . กรอง( ?d < 30 ) }

จะรวบรวมเป็น

[ GraphStep ( [] , vertex ), MatchStep ( AND , [[ MatchStartStep ( a ), LabelStep , IsStep ( eq ( Person )), MatchEndStep ] , [ MatchStartStep ( a ), VertexStep ( OUT , [ knows ] , vertex ), MatchEndStep ( b ) ] , [ MatchStartStep ( a ), VertexStep ( OUT , [ created ] , vertex ), MatchEndStep ( c ) ] , [ MatchStartStep ( b ), VertexStep ( OUT , [ created ] , vertex ), MatchEndStep ( c ) ] , [ MatchStartStep ( b ), PropertiesStep ( [ age ] , value ), MatchEndStep ( d ) ] , [ MatchStartStep ( d ), IsStep ( gt ( 30 )), MatchEndStep ]] ), SelectStep ( [ a , b , c ] ) ] .

ใน Gremlin-Java8 คำสั่ง SPARQL ข้างต้นจะถูกแสดงดังต่อไปนี้ และจะถูกคอมไพล์เป็นลำดับขั้นตอน Gremlin ที่เหมือนกัน (เช่น การท่องไปในเส้นทาง)

g . V (). match ( as ( "a" ). label (). is ( "person" ), as ( "a" ). out ( "knows" ). as ( "b" ), as ( "a" ). out ( "created" ). as ( "c" ), as ( "b" ). out ( "created" ). as ( "c" ), as ( "b" ). values ​​( "age" ). as ( "d" ), as ( "d" ). is ( gt ( 30 ))). select ( "a" , "b" , "c" )

เครื่องเกร็มลิน (เครื่องเสมือน)

เครื่องมือสำรวจกราฟ Gremlin สามารถทำงานได้บนเครื่องเดียวหรือบนคลัสเตอร์ประมวลผลแบบหลายเครื่อง ความสามารถในการทำงานที่ไม่ขึ้นกับแพลตฟอร์มการประมวลผลทำให้ Gremlin สามารถทำงานได้ทั้งบนฐานข้อมูลกราฟ (OLTP) และตัวประมวลผลกราฟ (OLAP)

ดูเพิ่มเติม

  1. หน้าแรกของ Apache TinkerPop
  2. sql2gremlin.com (TinkerPop2)
  3. Rodriguez, MA, " เครื่องและภาษาสำหรับการท่องกราฟ Gremlin ", เอกสารประกอบการประชุม ACM Database Programming Languages ​​Conference, ตุลาคม 2015
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Gremlin_(query_language)&oldid=1356814022 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ เกรมลิน (ภาษาสำหรับการสอบถามข้อมูล)

Gremlinเป็น ภาษา การท่องกราฟและเครื่องเสมือนที่พัฒนาโดยApache TinkerPopของApache Software Foundation Gremlin สามารถใช้งานได้ทั้งกับ ฐานข้อมูลกราฟแบบ OLTPและ ตัวประมวลผลกราฟแบบ...

ประวัติศาสตร์

โครงการนี้ถือกำเนิดขึ้นเมื่อวันที่ 30 ตุลาคม 2009 และได้รับการตั้งชื่อทันทีว่า "TinkerPop" เวอร์ชัน 0.1 ซึ่งเผยแพร่ครั้งแรกเมื่อวันที่ 25 ธันวาคม 2009 2011-05-21 เวอร์ชัน 1.0 ได้ถูกปล่อยออกมาแล้ว เวอร์ชัน 2.

การบูรณาการผู้ขาย

Gremlin เป็น ภาษาสำหรับการสำรวจกราฟ ที่ได้รับอนุญาตภายใต้ Apache2 ซึ่งสามารถใช้งานได้โดยผู้จำหน่ายระบบกราฟ โดยทั่วไปแล้วผู้จำหน่ายระบบกราฟมีสองประเภท ได้แก่ ฐานข้อมูลกราฟ OLTP และตัวประมวลผลกราฟ OLAP ตารางด้านล่างแสดงรายชื่อผู้จำหน่ายระบบกราฟที่รองรับ Gremlin

ตัวอย่างการท่องไป

ตัวอย่างต่อไปนี้ของการสอบถามและการตอบกลับของ Gremlin ในสภาพแวดล้อม Gremlin-Groovy เกี่ยวข้องกับการแสดงกราฟของชุดข้อมูลMovieLens [ 4 ] ชุดข้อมูลประกอบด้วยผู้ใช้ที่ให้คะแนนภาพยนตร์ ผู้ใช้แต่ละคนมีอาชีพหนึ่งอาชีพ...