Ny fahatsapana voalohany momba ny Amazon Neptune

Miarahaba, ry mponina ao Khabrovsk. Eo am-piandrasana ny fanombohan'ny fampianarana "AWS ho an'ny mpamorona" Nanomana fandikan-teny momba ny zavatra mahaliana izahay.

Ny fahatsapana voalohany momba ny Amazon Neptune

Amin'ny tranga fampiasana maro izay tiantsika bakdataAraka ny hitantsika ao amin'ny tranokalan'ny mpanjifantsika, ny fampahalalana mifandraika dia miafina amin'ny fifandraisana misy eo amin'ny sampana, ohatra rehefa mamakafaka ny fifandraisana eo amin'ny mpampiasa, ny fiankinan-doha eo amin'ny singa, na ny fifandraisana eo amin'ny sensor. Ny tranga fampiasana toy izany dia matetika atao modely amin'ny grafika. Tany am-piandohan'ity taona ity, Amazon dia namoaka ny angon-drakitra grafika vaovao, Neptune. Amin'ity lahatsoratra ity dia te hizara ny hevitray voalohany izahay, ny fanao tsara ary ny zavatra azo hatsaraina rehefa mandeha ny fotoana.

Nahoana izahay no mila Amazon Neptune

Ny angon-drakitra Graph dia mampanantena fa hikarakara ireo angon-drakitra mifandray tsara kokoa noho ny mitovy aminy. Amin'ny angon-drakitra toy izany, ny fampahalalana mifandraika dia matetika voatahiry ao anaty fifandraisana misy eo amin'ny zavatra. Nampiasa tetikasa angon-drakitra misokatra mahatalanjona izahay mba hitsapana an'i Neptune MusicBrainz. MusicBrainz dia manangona ny karazana metadata mozika rehetra azo eritreretina, toy ny fampahalalana momba ny mpanakanto, hira, famoahana rakikira na fampisehoana, ary koa hoe iza ny mpanakanto tao ambadiky ny hira niara-niasa tamin'ny fotoana navoakan'ny rakikira tamin'ny firenena iray. Ny MusicBrainz dia azo jerena ho tambajotram-pifandraisana goavana izay mifandray amin'ny indostrian'ny mozika.

Ny angon-drakitra MusicBrainz dia omena ho toy ny fanariana CSV an'ny angon-drakitra mifandraika. Amin'ny fitambarany, ny fanariam-pako dia misy andalana 93 tapitrisa eo amin'ny latabatra 157. Raha ny sasany amin'ireo latabatra ireo dia misy angona fototra toy ny mpanakanto, ny hetsika, ny fandraisam-peo, ny famoahana na ny dian-tongotra, ny hafa latabatra rohy — fitehirizana fifandraisana eo amin'ny mpanakanto sy ny fandraisam-peo, ny mpanakanto hafa na ny famoahana, sns... Mampiseho ny firafitry ny sarin'ny angon-drakitra izy ireo. Rehefa namadika ny angon-drakitra ho triple RDF dia nahazo tranga manodidina ny 500 tapitrisa izahay.

Mifototra amin'ny traikefa sy ny fahatsapan'ireo mpiara-miombon'antoka amin'ny tetikasa izay iarahantsika miasa, dia manolotra sehatra iray izay hampiasana ity fototra fahalalana ity izahay mba hahazoana vaovao. Ankoatr'izay, manantena izahay fa havaozina tsy tapaka izany, ohatra amin'ny fampidirana famoahana vaovao na fanavaozana ny mpikambana ao amin'ny vondrona.

fanitsiana

Araka ny efa nampoizina, ny fametrahana Amazon Neptune dia tsotra. Tena feno antsipirihany izy voarakitra. Azonao atao ny manangana angon-drakitra grafika ao anatin'ny tsindry vitsivitsy monja. Na izany aza, rehefa tonga amin'ny fanamafisana amin'ny antsipiriany kokoa, fampahalalana ilaina sarotra hita. Noho izany, tiantsika ny hanondro paramètre configuration iray.

Ny fahatsapana voalohany momba ny Amazon Neptune
Pikantsary fanefena ho an'ny vondrona parameter

Nilaza i Amazon fa i Neptune dia mifantoka amin'ny enta-mavesatry ny fifampiraharahana ambany, ka izany no mahatonga ny fiafaran'ny fangatahana default dia 120 segondra. Na izany aza dia nanandrana tranga fampiasana famakafakana maro izay nahatratraranay io fetra io matetika izahay. Ity fe-potoana ity dia azo ovaina amin'ny alàlan'ny famoronana vondrona parameter vaovao ho an'ny Neptune sy ny toerana neptune_query_timeout famerana mifanaraka amin'izany.

Loading Data

Eto ambany isika dia hiresaka amin'ny an-tsipiriany ny fomba namerana ny angona MusicBrainz ho any Neptune.

Fifandraisana amin'ny telo

Voalohany, nanova ny angona MusicBrainz ho triple RDF izahay. Noho izany, ho an'ny latabatra tsirairay, dia namaritra môdely iray izay mamaritra ny fomba asehon'ny tsanganana tsirairay ao amin'ny triple. Amin'ity ohatra ity, ny andalana tsirairay avy amin'ny latabatry ny mpilalao dia aseho amin'ny sari-tany ho telo ambin'ny folo RDF triple.

<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> .

fampiakarana betsaka

Ny fomba atolotra hampidirana angon-drakitra be dia be ao amin'ny Neptune dia amin'ny alàlan'ny dingan'ny fampiakarana betsaka amin'ny S3. Aorian'ny fampiakaranao ny rakitra telo amin'ny S3 dia manomboka ny fampiakarana amin'ny alàlan'ny fangatahana POST ianao. Raha ny eto amintsika dia 24 ora teo ho eo izany ho an'ny triplets 500 tapitrisa. Nanantena izahay fa ho haingana kokoa izany.

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"
 
}'

Mba hialana amin'ity dingana lava ity isaky ny manomboka ny Neptune izahay, dia nanapa-kevitra ny hamerina ilay ohatra avy amin'ny sary iray izay efa misy ireo triplets ireo. Ny fihazakazahana avy amin'ny sary dia tena haingana kokoa, saingy mbola mila adiny iray eo ho eo mandra-pahatongan'ny Neptune ho an'ny fangatahana.

Rehefa nampiditra triplets tany amin'ny Neptune tamin'ny voalohany, dia nisy fahadisoana isan-karazany.

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

Ny sasany tamin'izy ireo dia nisy hadisoana tamin'ny famafazana, araka ny aseho etsy ambony. Hatreto dia mbola tsy hitanay izay tena tsy nety tamin’io fotoana io. Ny antsipiriany bebe kokoa dia tena hanampy eto. Ity hadisoana ity dia nitranga teo amin'ny 1% amin'ny triple nampidirina. Saingy raha ny fandehan'ny fitsapana an'i Neptune dia nanaiky izahay fa ny 99% amin'ny fampahalalana avy amin'ny MusicBrainz ihany no miasa.

Na dia mora ho an'ny olona zatra amin'ny SPARQL aza izany, dia tadidio fa ny RDF triple dia tsy maintsy asiana marika amin'ny karazana data mazava, izay mety hiteraka hadisoana indray.

Misintona fampidinana

Araka ny voalaza tetsy ambony, tsy te hampiasa an'i Neptune ho toy ny fivarotana angona static izahay, fa ho toy ny fototry ny fahalalana mivoatra sy mivoatra. Noho izany dia nila nitady fomba hampidirana triple vaovao izahay rehefa miova ny fototry ny fahalalana, ohatra rehefa misy rakikira vaovao navoaka na rehefa te-hanao zavatra avy amin'ny fahalalana.

Neptune dia manohana ireo mpandraharaha fampidirana amin'ny alàlan'ny fangatahan'ny SPARQL, na ny manta na ny santionany. Hiresaka momba ireo fomba roa ireo isika eto ambany.

Ny iray amin'ireo tanjonay dia ny hampiditra data amin'ny fomba mivantana. Eritrereto ny hamoaka rakikira any amin'ny firenena vaovao. Avy amin'ny fomba fijerin'i MusicBrainz, midika izany fa ho an'ny famoahana misy rakitsary, singa tokana, EP, sns., dia misy fidirana vaovao ampiana eo amin'ny latabatra. firenena fanafahana. Ao amin'ny RDF, ampifandraisinay amin'ny triple roa vaovao ity fampahalalana ity.

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> };

Ny tanjona iray hafa dia ny hahazoana fahalalana vaovao avy amin'ny grafika. Aoka hatao hoe tiantsika ny hahazo ny isan'ny famoahana navoakan'ny mpanakanto tsirairay tamin'ny asany. Sarotra be ny fanontaniana toy izany ary maharitra 20 minitra ao Neptune, noho izany dia mila manatanteraka ny vokatra isika mba hampiasana indray io fahalalana vaovao io amin'ny fanontaniana hafa. Noho izany dia manampy telo ambin'ny folo miaraka amin'ity fampahalalana ity hiverina amin'ny grafika izahay, mampiditra ny valin'ny subquery.

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
 
}

Mitaky milisegondra vitsivitsy ny fampidirana triple tokana amin'ny grafika, raha miankina amin'ny fotoana fanatanterahana ny subquery mihitsy ny fotoana hanatanterahana ny fampidirana ny valin'ny subquery.

Na dia tsy nampiasa azy io matetika aza izahay, dia mamela anao hanala triplets mifototra amin'ny santionany na angona mazava i Neptune, izay azo ampiasaina hanavaozana vaovao.

SPARQL fanontaniana

Amin'ny fampidirana ny santionany teo aloha, izay mamerina ny isan'ny famoahana ho an'ny mpanakanto tsirairay, dia efa nampiditra ny karazana fanontaniana voalohany tiantsika hovaliana amin'ny fampiasana Neptune. Mora ny fananganana fanontaniana amin'ny Neptune - mandefa fangatahana POST mankany amin'ny teboka SPARQL, araka ny aseho eto ambany:

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

Fanampin'izany, nametraka fanontaniana izahay izay mamerina piraofilin'ny mpanakanto misy fampahalalana momba ny anarany, ny taonany, na ny firenena niaviany. Ataovy ao an-tsaina fa mety ho olon-tsotra, tarika, na orkesitra ny mpilalao. Ho fanampin'izay, ampianay vaovao momba ny isan'ny famoahana navoakan'ny mpanakanto nandritra ny taona ity angona ity. Ho an’ny mpanakanto solo dia ampiana ihany koa ny vaovao momba ireo tarika nandraisan’ny mpanakanto anjara isan-taona.

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)
 
   }

Noho ny fahasarotan'ny fanontaniana toy izany, dia afaka manao fanontaniana teboka ho an'ny mpanakanto manokana, toa an'i Elton John, fa tsy ho an'ny mpanakanto rehetra. Toa tsy manatsara ny fangatahana toy izany i Neptune amin'ny alàlan'ny fandatsahana sivana ao anaty subselect. Noho izany, ny safidy tsirairay dia tsy maintsy voasivana amin'ny alàlan'ny anaran'ny mpanakanto.

Ny Neptune dia manana sara isan'ora sy isaky ny I/O. Ho an'ny fitsapana nataonay dia nampiasa ny ohatra Neptune kely indrindra izahay, izay mitentina $0,384/ora. Raha ny fanontaniana etsy ambony, izay manisa ny mombamomba ho an'ny mpiasa tokana, Amazon dia miantoka ny fiasan'ny I/O an'aliny antsika, midika izany fa mitentina $0.02.

famaranana

Voalohany, mitazona ny ankamaroan'ny fampanantenany i Amazon Neptune. Amin'ny maha-serivisy mitantana azy, dia angon-drakitra grafika izay tena mora apetraka ary afaka mandeha sy mandeha tsy misy fanamboarana be. Ireto ny zava-baovao dimy lehibe azonay:

  • Mora nefa miadana ny fampiakarana betsaka. Saingy mety ho sarotra amin'ny hafatra diso izay tsy dia manampy.
  • Ny fampidinana mivantana dia manohana izay rehetra nantenainay ary tena haingana
  • Tsotra ny fanontaniana, saingy tsy ampy fifampiresahana mba hampandehanana fanontaniana fanadihadiana
  • Ny fangatahana SPARQL dia tsy maintsy amboarina amin'ny tanana
  • Sarotra ny manombatombana ny fandoavam-bola Amazon satria sarotra ny manombatombana ny habetsaky ny angon-drakitra nodinihin'ny fangatahana SPARQL.

Izay ihany. Misoratra anarana amin'ny webinar maimaim-poana momba ny lohahevitra "Load Balancing".


Source: www.habr.com

Add a comment