อ่าน 8 นาที
เกรมลิน (ภาษาสำหรับการสอบถามข้อมูล)
Gremlinเป็น ภาษา การท่องกราฟและเครื่องเสมือนที่พัฒนาโดยApache TinkerPopของApache Software Foundation Gremlin สามารถใช้งานได้ทั้งกับ ฐานข้อมูลกราฟแบบ OLTPและ ตัวประมวลผลกราฟแบบ...
เกรมลิน (ภาษาสำหรับการสอบถามข้อมูล)
| เกรมลิน | |
|---|---|
| ออกแบบโดย | มาร์โก เอ. โรดริเกซ |
| นักพัฒนา | Apache TinkerPop จากApache Software Foundation |
| ปรากฏครั้งแรก | 2009 |
| เวอร์ชันเสถียร | |
| โอเอส | ใช้งานได้หลาย แพลตฟอร์ม (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)
ดูเพิ่มเติม
- Cypher Query Languageเป็นภาษาสอบถามข้อมูลอีกแบบหนึ่งสำหรับข้อมูลกราฟ
- SPARQLอีกหนึ่งภาษาสำหรับการสืบค้นข้อมูลกราฟ
- การค้นหาเส้นทางปกติ (Regular path query ) ภาษาค้นหาเชิงทฤษฎีบนข้อมูลกราฟ
- ภาษาสอบถามข้อมูลกราฟ (Graph query language)คือข้อเสนอการกำหนดมาตรฐานของภาษาสอบถามข้อมูลบนข้อมูลกราฟ
ลิงก์ภายนอก
- หน้าแรกของ Apache TinkerPop
- sql2gremlin.com (TinkerPop2)
- Rodriguez, MA, " เครื่องและภาษาสำหรับการท่องกราฟ Gremlin ", เอกสารประกอบการประชุม ACM Database Programming Languages Conference, ตุลาคม 2015
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ เกรมลิน (ภาษาสำหรับการสอบถามข้อมูล)
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 ] ชุดข้อมูลประกอบด้วยผู้ใช้ที่ให้คะแนนภาพยนตร์ ผู้ใช้แต่ละคนมีอาชีพหนึ่งอาชีพ...