ความประทับใจครั้งแรกของ Amazon Neptune

ขอคารวะชาวเมือง Khabrovsk ในความคาดหมายของการเริ่มหลักสูตร "AWS สำหรับนักพัฒนา" เราได้เตรียมแปลเนื้อหาที่น่าสนใจ

ความประทับใจครั้งแรกของ Amazon Neptune

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

เหตุใดเราจึงต้องการ Amazon Neptune

ฐานข้อมูลกราฟสัญญาว่าจะจัดการชุดข้อมูลที่เชื่อมต่อกันในระดับสูงได้ดีกว่าชุดข้อมูลที่เทียบเท่าเชิงสัมพันธ์ ในชุดข้อมูลดังกล่าว ข้อมูลที่เกี่ยวข้องมักจะถูกจัดเก็บไว้ในความสัมพันธ์ระหว่างออบเจ็กต์ เราใช้โครงการข้อมูลแบบเปิดที่น่าทึ่งเพื่อทดสอบเนปจูน เพลงBrainz. MusicBrainz รวบรวมข้อมูลเมตาของเพลงทุกประเภทเท่าที่จะจินตนาการได้ เช่น ข้อมูลเกี่ยวกับศิลปิน เพลง การออกอัลบั้ม หรือคอนเสิร์ต รวมถึงศิลปินที่อยู่เบื้องหลังเพลงที่ร่วมงานด้วย หรือเมื่ออัลบั้มออกจำหน่ายในประเทศใด MusicBrainz ถือเป็นเครือข่ายขนาดใหญ่ที่เชื่อมโยงกับอุตสาหกรรมเพลง

ชุดข้อมูล MusicBrainz จัดทำเป็นดัมพ์ CSV ของฐานข้อมูลเชิงสัมพันธ์ โดยรวมแล้วดัมพ์มีประมาณ 93 ล้านแถวใน 157 ตาราง แม้ว่าตารางเหล่านี้บางส่วนจะมีข้อมูลพื้นฐาน เช่น ศิลปิน กิจกรรม การบันทึก ผลงานหรือแทร็ก และอื่นๆ ตารางการเชื่อมโยง — จัดเก็บความสัมพันธ์ระหว่างศิลปินกับการบันทึก ศิลปินหรือผลงานอื่นๆ ฯลฯ... พวกมันสาธิตโครงสร้างกราฟของชุดข้อมูล เมื่อแปลงชุดข้อมูลเป็นสามเท่าของ RDF เราได้รับอินสแตนซ์ประมาณ 500 ล้านอินสแตนซ์

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

การตั้งค่า

ตามที่คาดไว้ การติดตั้ง Amazon Neptune นั้นง่ายดาย เธอค่อนข้างละเอียด จัดทำเป็นเอกสาร. คุณสามารถเปิดฐานข้อมูลกราฟได้ด้วยการคลิกเพียงไม่กี่ครั้ง อย่างไรก็ตาม เมื่อพูดถึงการกำหนดค่าที่มีรายละเอียดมากขึ้น ข้อมูลที่จำเป็น หายาก ดังนั้นเราจึงต้องการชี้ไปที่พารามิเตอร์การกำหนดค่าตัวเดียว

ความประทับใจครั้งแรกของ Amazon Neptune
ภาพหน้าจอการกำหนดค่าสำหรับกลุ่มพารามิเตอร์

Amazon กล่าวว่า Neptune มุ่งเน้นไปที่ปริมาณงานในการทำธุรกรรมที่มีความหน่วงต่ำ ซึ่งเป็นเหตุผลว่าทำไมการหมดเวลาคำขอเริ่มต้นคือ 120 วินาที อย่างไรก็ตาม เราได้ทดสอบกรณีการใช้งานเชิงวิเคราะห์หลายกรณีซึ่งเรามาถึงขีดจำกัดนี้เป็นประจำ การหมดเวลานี้สามารถเปลี่ยนแปลงได้โดยการสร้างกลุ่มพารามิเตอร์ใหม่สำหรับ Neptune และการตั้งค่า neptune_query_timeout ข้อ จำกัด ที่สอดคล้องกัน

กำลังโหลดข้อมูล

ด้านล่างนี้เราจะพูดถึงรายละเอียดว่าเราโหลดข้อมูล MusicBrainz ลงใน Neptune ได้อย่างไร

ความสัมพันธ์ในสาม

ขั้นแรก เราแปลงข้อมูล MusicBrainz เป็นสามเท่าของ RDF ดังนั้นสำหรับแต่ละตาราง เราจึงกำหนดเทมเพลตที่กำหนดวิธีการแสดงแต่ละคอลัมน์ในสามคอลัมน์ ในตัวอย่างนี้ แต่ละแถวจากตารางนักแสดงจะถูกแมปกับค่าสามเท่าของ RDF สิบสองค่า

<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/gid> "${gid}"^^<http://www.w3.org/2001/XMLSchema#string> .
 
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/name> "${name}"^^<http://www.w3.org/2001/XMLSchema#string> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/sort-name> "${sort_name}"^^<http://www.w3.org/2001/XMLSchema#string> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/begin-date> "${begin_date_year}-${begin_date_month}-${begin_date_day}"^^xsd:<http://www.w3.org/2001/XMLSchema#date> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/end-date> "${end_date_year}-${end_date_month}-${end_date_day}"^^xsd:<http://www.w3.org/2001/XMLSchema#date> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/type> <http://musicbrainz.foo/artist-type/${type}> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/area> <http://musicbrainz.foo/area/${area}> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/gender> <http://musicbrainz.foo/gender/${gender}> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/comment> "${comment}"^^<http://www.w3.org/2001/XMLSchema#string> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/edits-pending> "${edits_pending}"^^<http://www.w3.org/2001/XMLSchema#int> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/last-updated> "${last_updated}"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
 
<http://musicbrainz.foo/artist/${id}> <http://musicbrainz.foo/ended> "${ended}"^^<http://www.w3.org/2001/XMLSchema#boolean> .

อัปโหลดจำนวนมาก

วิธีที่แนะนำในการโหลดข้อมูลจำนวนมากลงใน Neptune คือผ่านกระบวนการอัปโหลดจำนวนมากผ่าน S3 หลังจากอัปโหลดไฟล์ Triples ของคุณไปยัง S3 แล้ว คุณจะเริ่มต้นการอัปโหลดโดยใช้คำขอ POST ในกรณีของเรา ใช้เวลาประมาณ 24 ชั่วโมงสำหรับแฝด 500 ล้านตัว เราคาดว่ามันจะเร็วขึ้น

curl -X POST -H 'Content-Type: application/json' http://your-neptune-cluster:8182/loader -d '{
 
 
 "source" : "s3://your-s3-bucket",
 
 "format" : "ntriples",
 
 "iamRoleArn" : "arn:aws:iam::your-iam-user:role/NeptuneLoadFromS3",
 
 "region" : "eu-west-1",
 
 "failOnError" : "FALSE"
 
}'

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

เมื่อเริ่มโหลดแฝดสามเข้าไปในดาวเนปจูน เราพบข้อผิดพลาดต่างๆ

{
 
 
 "errorCode" : "PARSING_ERROR",
 
 "errorMessage" : "Content after '.' is not allowed",
 
 "fileName" : [...],
 
 "recordNum" : 25
 
}

บางส่วนมีข้อผิดพลาดในการแยกวิเคราะห์ดังที่แสดงไว้ด้านบน จนถึงวันนี้ เรายังไม่ทราบว่ามีอะไรผิดพลาดเกิดขึ้น ณ จุดนี้ รายละเอียดเพิ่มเติมอีกเล็กน้อยจะช่วยได้ที่นี่อย่างแน่นอน ข้อผิดพลาดนี้เกิดขึ้นประมาณ 1% ของอเนกประสงค์ที่แทรกไว้ แต่เท่าที่การทดสอบ Neptune ดำเนินต่อไป เรายอมรับความจริงที่ว่าเราทำงานกับข้อมูลจาก MusicBrainz เพียง 99% เท่านั้น

แม้ว่าจะเป็นเรื่องง่ายสำหรับผู้ที่คุ้นเคยกับ SPARQL แต่โปรดทราบว่า RDF triples จะต้องได้รับการใส่คำอธิบายประกอบด้วยประเภทข้อมูลที่ชัดเจน ซึ่งอาจทำให้เกิดข้อผิดพลาดได้อีกครั้ง

ดาวน์โหลดแบบสตรีมมิ่ง

ตามที่กล่าวไว้ข้างต้น เราไม่ต้องการใช้ Neptune เป็นที่เก็บข้อมูลแบบคงที่ แต่เป็นฐานความรู้ที่ยืดหยุ่นและพัฒนาอยู่ ดังนั้นเราจึงจำเป็นต้องค้นหาวิธีที่จะแนะนำสามสิ่งใหม่เมื่อฐานความรู้เปลี่ยนแปลง เช่น เมื่อมีการเผยแพร่อัลบั้มใหม่ หรือเมื่อเราต้องการทำให้ความรู้ที่ได้รับเป็นจริง

Neptune รองรับตัวดำเนินการอินพุตผ่านการสืบค้น SPARQL ทั้งแบบดิบและแบบตัวอย่าง เราจะหารือทั้งสองแนวทางด้านล่างนี้

เป้าหมายประการหนึ่งของเราคือการป้อนข้อมูลในลักษณะสตรีมมิ่ง ลองออกอัลบั้มในประเทศใหม่ จากมุมมองของ MusicBrainz หมายความว่าสำหรับผลงานที่มีอัลบั้ม ซิงเกิล อีพี ฯลฯ รายการใหม่จะถูกเพิ่มลงในตาราง ประเทศที่วางจำหน่าย. ใน RDF เราจับคู่ข้อมูลนี้กับสามรายการใหม่สองรายการ

INSERT DATA { <http://musicbrainz.foo/release-country/737041> <http://musicbrainz.foo/release> <http://musicbrainz.foo/release/435759> };INSERT DATA { <http://musicbrainz.foo/release-country/737041> <http://musicbrainz.foo/date-year> "2018"^^<http://www.w3.org/2001/XMLSchema#int> };

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

INSERT {
 
 
  ?artist_credit <http://musicbrainz.foo/number-of-releases> ?number_of_releases
 
} WHERE {
 
  SELECT ?artist_credit (COUNT(*) as ?number_of_releases)
 
  WHERE {
 
     ?artist_credit <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/artist-credit> .
 
     ?release_group <http://musicbrainz.foo/artist-credit> ?artist_credit .
 
     ?release_group <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/release-group> .
 
     ?release_group <http://musicbrainz.foo/name> ?release_group_name .
 
  }
 
  GROUP BY ?artist_credit
 
}

การเพิ่มสามเท่าลงในกราฟจะใช้เวลาสองสามมิลลิวินาที ในขณะที่เวลาดำเนินการสำหรับการแทรกผลลัพธ์ของแบบสอบถามย่อยจะขึ้นอยู่กับเวลาดำเนินการของแบบสอบถามย่อยนั้นเอง

แม้ว่าเราจะไม่ได้ใช้มันบ่อยนัก แต่ Neptune ยังอนุญาตให้คุณลบแฝดสามตามตัวอย่างหรือข้อมูลที่ชัดเจน ซึ่งสามารถใช้เพื่ออัปเดตข้อมูลได้

แบบสอบถาม SPARQL

ด้วยการแนะนำตัวอย่างย่อยก่อนหน้านี้ ซึ่งส่งคืนจำนวนการเผยแพร่สำหรับศิลปินแต่ละคน เราได้แนะนำคำถามประเภทแรกที่เราต้องการตอบโดยใช้ Neptune แล้ว การสร้างแบบสอบถามใน Neptune เป็นเรื่องง่าย - ส่งคำขอ POST ไปยังตำแหน่งข้อมูล SPARQL ดังที่แสดงด้านล่าง:

curl -X POST --data-binary 'query=SELECT ?artist ?p ?o where {?artist <http://musicbrainz.foo/name> "Elton John" . ?artist ?p ?o . }' http://your-neptune-cluster:8182/sparql

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

SELECT
 
 
 ?artist_name ?year
 
 ?releases_in_year ?releases_up_year
 
 ?artist_type_name ?releases
 
 ?artist_gender ?artist_country_name
 
 ?artist_begin_date ?bands
 
 ?bands_in_year
 
WHERE {
 
 # Bands for each artist
 
 {
 
   SELECT
 
     ?year
 
     ?first_artist
 
     (group_concat(DISTINCT ?second_artist_name;separator=",") as ?bands)
 
     (COUNT(DISTINCT ?second_artist_name) AS ?bands_in_year)     
 
   WHERE {
 
     VALUES ?year {
 
       1960 1961 1962 1963 1964 1965 1966 1967 1968 1969
 
       1970 1971 1972 1973 1974 1975 1976 1977 1978 1979
 
       1980 1981 1982 1983 1984 1985 1986 1987 1988 1989
 
       1990 1991 1992 1993 1994 1995 1996 1997 1998 1999
 
       2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
 
       2010 2011 2012 2013 2014 2015 2016 2017 2018
 
     }   
 
     ?first_artist <http://musicbrainz.foo/name> "Elton John" .
 
     ?first_artist <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/artist> .
 
     ?first_artist <http://musicbrainz.foo/type> ?first_artist_type .
 
     ?first_artist <http://musicbrainz.foo/name> ?first_artist_name .
 

 
 
     ?second_artist <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/artist> .
 
     ?second_artist <http://musicbrainz.foo/type> ?second_artist_type .
 
     ?second_artist <http://musicbrainz.foo/name> ?second_artist_name .
 
     optional { ?second_artist <http://musicbrainz.foo/begin-date-year> ?second_artist_begin_date_year . }
 
     optional { ?second_artist <http://musicbrainz.foo/end-date-year> ?second_artist_end_date_year . }
 

 
 
     ?l_artist_artist <http://musicbrainz.foo/entity0> ?first_artist .
 
     ?l_artist_artist <http://musicbrainz.foo/entity1> ?second_artist .
 
     ?l_artist_artist <http://musicbrainz.foo/link> ?link .
 

 
 
     optional { ?link <http://musicbrainz.foo/begin-date-year> ?link_begin_date_year . }
 
     optional { ?link <http://musicbrainz.foo/end-date-year> ?link_end_date_year . }
 

 
 
     FILTER (!bound(?link_begin_date_year) || ?link_begin_date_year <= ?year)
 
     FILTER (!bound(?link_end_date_year) || ?link_end_date_year >= ?year)
 
     FILTER (!bound(?second_artist_begin_date_year) || ?second_artist_begin_date_year <= ?year)
 
     FILTER (!bound(?second_artist_end_date_year) || ?second_artist_end_date_year >= ?year)
 
     FILTER (?first_artist_type NOT IN (<http://musicbrainz.foo/artist-type/2>, <http://musicbrainz.foo/artist-type/5>, <http://musicbrainz.foo/artist-type/6>))
 
     FILTER (?second_artist_type IN (<http://musicbrainz.foo/artist-type/2>, <http://musicbrainz.foo/artist-type/5>, <http://musicbrainz.foo/artist-type/6>))
 
   }
 
   GROUP BY ?first_artist ?year
 
 }
 
 # Releases up to a year
 
 {
 
   SELECT
 
     ?artist
 
     ?year
 
     (group_concat(DISTINCT ?release_name;separator=",") as ?releases)
 
     (COUNT(*) as ?releases_up_year)
 
   WHERE {
 
     VALUES ?year {
 
       1960 1961 1962 1963 1964 1965 1966 1967 1968 1969
 
       1970 1971 1972 1973 1974 1975 1976 1977 1978 1979
 
       1980 1981 1982 1983 1984 1985 1986 1987 1988 1989
 
       1990 1991 1992 1993 1994 1995 1996 1997 1998 1999
 
       2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
 
       2010 2011 2012 2013 2014 2015 2016 2017 2018 
 
     }
 

 
 
     ?artist <http://musicbrainz.foo/name> "Elton John" .
 

 
 
     ?artist_credit_name <http://musicbrainz.foo/artist-credit> ?artist_credit .
 
     ?artist_credit_name <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/artist-credit-name> .
 
     ?artist_credit_name <http://musicbrainz.foo/artist> ?artist .
 
     ?artist_credit <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/artist-credit> .
 

 
 
     ?release_group <http://musicbrainz.foo/artist-credit> ?artist_credit .
 
     ?release_group <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/release-group> .
 
     ?release_group <http://musicbrainz.foo/name> ?release_group_name .
 
     ?release <http://musicbrainz.foo/release-group> ?release_group .
 
     ?release <http://musicbrainz.foo/name> ?release_name .
 
     ?release_country <http://musicbrainz.foo/release> ?release .
 
     ?release_country <http://musicbrainz.foo/date-year> ?release_country_year .
 

 
 
     FILTER (?release_country_year <= ?year)
 
   }
 
   GROUP BY ?artist ?year
 
 }
 
 # Releases in a year
 
 {
 
   SELECT ?artist ?year (COUNT(*) as ?releases_in_year)
 
   WHERE {
 
     VALUES ?year {
 
       1960 1961 1962 1963 1964 1965 1966 1967 1968 1969
 
       1970 1971 1972 1973 1974 1975 1976 1977 1978 1979
 
       1980 1981 1982 1983 1984 1985 1986 1987 1988 1989
 
       1990 1991 1992 1993 1994 1995 1996 1997 1998 1999
 
       2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
 
       2010 2011 2012 2013 2014 2015 2016 2017 2018 
 
     }
 

 
 
     ?artist <http://musicbrainz.foo/name> "Elton John" .
 

 
 
     ?artist_credit_name <http://musicbrainz.foo/artist-credit> ?artist_credit .
 
     ?artist_credit_name <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/artist-credit-name> .
 
     ?artist_credit_name <http://musicbrainz.foo/artist> ?artist .
 
     ?artist_credit <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/artist-credit> .
 

 
 
     ?release_group <http://musicbrainz.foo/artist-credit> ?artist_credit .
 
     ?release_group <http://musicbrainz.foo/rdftype> <http://musicbrainz.foo/release-group> .
 
     ?release_group <http://musicbrainz.foo/name> ?release_group_name .
 
     ?release <http://musicbrainz.foo/release-group> ?release_group .
 
     ?release_country <http://musicbrainz.foo/release> ?release .
 
     ?release_country <http://musicbrainz.foo/date-year> ?release_country_year .
 

 
 
     FILTER (?release_country_year = ?year)
 
   }
 
   GROUP BY ?artist ?year
 
 }
 
 # Master data
 
 {
 
   SELECT DISTINCT ?artist ?artist_name ?artist_gender ?artist_begin_date ?artist_country_name
 
   WHERE {
 
     ?artist <http://musicbrainz.foo/name> ?artist_name .
 
     ?artist <http://musicbrainz.foo/name> "Elton John" .
 
     ?artist <http://musicbrainz.foo/gender> ?artist_gender_id .
 
     ?artist_gender_id <http://musicbrainz.foo/name> ?artist_gender .
 
     ?artist <http://musicbrainz.foo/area> ?birth_area .
 
     ?artist <http://musicbrainz.foo/begin-date-year> ?artist_begin_date.
 
     ?birth_area <http://musicbrainz.foo/name> ?artist_country_name .
 

 
 
     FILTER(datatype(?artist_begin_date) = xsd:int)
 
   }

เนื่องจากความซับซ้อนของการสืบค้นดังกล่าว เราจึงดำเนินการได้เฉพาะการสืบค้นแบบตรงประเด็นสำหรับศิลปินคนใดคนหนึ่ง เช่น เอลตัน จอห์น เท่านั้น แต่ไม่ใช่สำหรับศิลปินทุกคน ดูเหมือนว่า Neptune จะไม่ปรับการค้นหาดังกล่าวให้เหมาะสมโดยการวางตัวกรองลงในการเลือกย่อย ดังนั้น การเลือกแต่ละรายการจะต้องกรองตามชื่อศิลปินด้วยตนเอง

Neptune มีค่าใช้จ่ายทั้งรายชั่วโมงและต่อ-I/O สำหรับการทดสอบของเรา เราใช้อินสแตนซ์ Neptune ขั้นต่ำเปล่า ซึ่งมีราคา 0,384 USD/ชั่วโมง ในกรณีของข้อความค้นหาข้างต้น ซึ่งคำนวณโปรไฟล์สำหรับผู้ปฏิบัติงานคนเดียว Amazon จะเรียกเก็บเงินจากการดำเนินการ I/O นับหมื่นรายการ ซึ่งคิดเป็นค่าใช้จ่าย 0.02 ดอลลาร์สหรัฐฯ

เอาท์พุต

ประการแรก Amazon Neptune รักษาสัญญาส่วนใหญ่ไว้ เนื่องจากเป็นบริการที่ได้รับการจัดการ จึงเป็นฐานข้อมูลกราฟที่ติดตั้งง่ายมาก และสามารถติดตั้งและรันได้โดยไม่ต้องมีการกำหนดค่ามากนัก ต่อไปนี้เป็นข้อค้นพบหลักห้าประการของเรา:

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

นั่นคือทั้งหมดที่ ลงทะเบียนเพื่อ การสัมมนาผ่านเว็บฟรีในหัวข้อ “Load Balancing”.


ที่มา: will.com

เพิ่มความคิดเห็น