Na chéad imprisean de Amazon Neiptiún

Beannachtaí, cónaitheoirí Khabrovsk. Ag súil le tús an chúrsa "AWS d'Fhorbróirí" Tá aistriúchán d’ábhar suimiúil ullmhaithe againn.

Na chéad imprisean de Amazon Neiptiún

I go leor cásanna úsáide is maith linn bakdataMar a fheicimid ar shuíomhanna gréasáin ár gcliant, tá faisnéis ábhartha i bhfolach i naisc idir eintitis, mar shampla nuair a bhíonn anailís á déanamh ar chaidrimh idir úsáideoirí, spleáchais idir eilimintí, nó naisc idir braiteoirí. De ghnáth déantar cásanna úsáide den sórt sin a mhúnlú ar ghraf. Níos luaithe i mbliana, d'eisigh Amazon a bhunachar sonraí graf nua, Neiptiún. Sa phost seo ba mhaith linn ár gcéad smaointe, dea-chleachtais agus cad is féidir a fheabhsú le himeacht ama a roinnt.

Cén fáth go raibh Amazon Neiptiún de dhíth orainn

Geallann bunachair shonraí ghraif go láimhseálfaidh siad tacair sonraí an-nasctha níos fearr ná a gcoibhéisí coibhneasta. I dtacar sonraí den sórt sin, is gnách faisnéis ábhartha a stóráil i ngaolmhaireachtaí idir réada. D’úsáideamar tionscadal sonraí oscailte iontach chun Neiptiún a thástáil CeolBrainz. Bailíonn MusicBrainz gach cineál meiteashonraí ceoil ar féidir a shamhlú, amhail faisnéis faoi ealaíontóirí, amhráin, eisiúintí albam nó ceolchoirmeacha, chomh maith le cé leis ar chomhoibrigh an t-ealaíontóir taobh thiar den amhrán nó cathain a eisíodh an t-albam sa tír. Is féidir MusicBrainz a fheiceáil mar líonra ollmhór d’eintitis atá ceangailte ar bhealach éigin le tionscal an cheoil.

Cuirtear tacar sonraí MusicBrainz ar fáil mar dhumpáil CSV de bhunachar sonraí coibhneasta. San iomlán, tá thart ar 93 milliún sraitheanna sa dumpáil i 157 tábla. Cé go bhfuil sonraí bunúsacha ar nós ealaíontóirí, imeachtaí, taifeadtaí, eisiúintí nó rianta i gcuid de na táblaí seo, tá cuid eile acu táblaí nasc — caidrimh a stóráil idir ealaíontóirí agus taifeadtaí, ealaíontóirí nó eisiúintí eile, etc... Léiríonn siad struchtúr graf de thacar sonraí. Nuair a bhí an tacar sonraí á thiontú ina thríaracha RDF, fuaireamar thart ar 500 milliún cás.

Bunaithe ar thaithí agus ar thuairimí na gcomhpháirtithe tionscadail lena n-oibrímid, cuirimid i láthair suíomh ina n-úsáidtear an bonn eolais seo chun faisnéis nua a fháil. Ina theannta sin, táimid ag súil go ndéanfar é a nuashonrú go rialta, mar shampla trí eisiúintí nua a chur leis nó trí bhaill an ghrúpa a nuashonrú.

coigeartú

De réir mar a bhíothas ag súil leis, tá sé simplí Amazon Neiptiún a shuiteáil. Tá sí mionsonraithe go leor doiciméadaithe. Is féidir leat bunachar sonraí graf a sheoladh i gceann cúpla cad a tharlaíonn. Mar sin féin, nuair a thagann sé chun cumraíocht níos mionsonraithe, faisnéis riachtanach deacair a fháil. Dá bhrí sin, ba mhaith linn a chur in iúl go paraiméadar cumraíochta amháin.

Na chéad imprisean de Amazon Neiptiún
Gabháil scáileáin cumraíochta do ghrúpaí paraiméadar

Deir Amazon go ndíríonn Neiptiún ar ualaí oibre idirbheartaíochta íseal-latency, agus is é sin an fáth gurb é 120 soicind an teorainn ama réamhshocraithe iarratais. Tá tástáil déanta againn, áfach, ar go leor cásanna úsáide anailíse inar shroicheamar an teorainn seo go rialta. Is féidir an teorainn ama seo a athrú trí ghrúpa paraiméadar nua a chruthú do Neiptiún agus a shocrú neptune_query_timeout srian comhfhreagrach.

Sonraí á Luchtú

Anseo thíos pléifimid go mion conas a lódáileamar sonraí MusicBrainz isteach i Neiptiún.

Caidrimh i dtriúr

Ar dtús, rinneamar na sonraí MusicBrainz a thiontú go triples RDF. Mar sin, le haghaidh gach tábla, sainmhínímid teimpléad a shainíonn conas a léirítear gach colún sa triple. Sa sampla seo, déantar gach sraith ón tábla taibheoirí a mhapáil go dtí dhá thrí dhéag 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> .

uaslódáil mórchóir

Is é an bealach a mholtar chun méideanna móra sonraí a luchtú isteach i Neiptiún ná tríd an bpróiseas bulcuaslódála trí S3. Tar éis duit do chomhaid thriarach a uaslódáil chuig S3, cuireann tú iarratas POST ar aghaidh leis an uaslódáil. Is é ár gcás, thóg sé thart ar 24 uair an chloig le haghaidh 500 milliún triplets. Bhí muid ag súil go mbeadh sé níos tapúla.

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

Chun an próiseas fada seo a sheachaint gach uair a sheolaimid Neiptiún, bheartaíomar an t-ásc a athbhunú ó ghrianghraf ina raibh na triplets seo lódáilte cheana féin. Tá sé i bhfad níos tapúla rith ó ghrianghraf, ach tógann sé uair an chloig go dtí go mbeidh Neiptiún ar fáil le haghaidh iarratas.

Nuair a bhí triplets á lódáil isteach i Neiptiún ar dtús, thángamar ar earráidí éagsúla.

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

Earráidí parsála a bhí i gcuid acu, mar a léirítear thuas. Go dtí seo, níl a fhios againn fós cad go díreach a chuaigh mícheart ag an bpointe seo. Is cinnte go gcabhródh beagán níos mó sonraí anseo. Tharla an earráid seo i gcás thart ar 1% de na triarachí a cuireadh isteach. Ach chomh fada agus a dhéantar tástáil ar Neiptiún, ghlacamar leis nach n-oibrímid ach le 99% den fhaisnéis ó MusicBrainz.

Cé go bhfuil sé seo éasca do dhaoine atá eolach ar SPARQL, bí ar an eolas go gcaithfear trí chineálacha sonraí follasacha a anótáil trí thrí RDF, rud a d’fhéadfadh earráidí a chruthú arís.

Sruthú íoslódáil

Mar a luadh thuas, nílimid ag iarraidh Neiptiún a úsáid mar stór sonraí statach, ach mar bhunachar eolais solúbtha agus athraitheach. Mar sin b'éigean dúinn bealaí a aimsiú chun triples nua a thabhairt isteach nuair a athraíonn an bonn eolais, mar shampla nuair a fhoilsítear albam nua nó nuair a theastaíonn uainn eolas díorthaithe a bhaint amach.

Tacaíonn Neiptiún le hoibreoirí ionchuir trí cheisteanna SPARQL, idir amh agus sampla-bhunaithe. Déanfaimid plé ar an dá chur chuige thíos.

Ar cheann dár spriocanna bhí sonraí a iontráil ar bhealach sruthaithe. Smaoinigh ar albam a scaoileadh i dtír nua. Ó thaobh MusicBrainz de, ciallaíonn sé seo go gcuirtear iontráil nua leis an tábla le haghaidh eisiúint a chuimsíonn albaim, singil, EPanna, etc. scaoileadh-tír. In RDF, déanaimid an fhaisnéis seo a mheaitseáil le dhá thriarach nua.

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

Sprioc eile a bhí ann ná eolas nua a fháil ón ngraf. Ligean le rá go dteastaíonn uainn líon na n-eisiúintí a d'fhoilsigh gach ealaíontóir ina ngairm bheatha a fháil. Tá ceist den sórt sin casta go leor agus tógann sé níos mó ná 20 nóiméad i Neiptiún, mar sin ní mór dúinn an toradh a bhaint amach chun an t-eolas nua seo a athúsáid i bhfiosrúchán éigin eile. Mar sin cuirimid triples leis an bhfaisnéis seo ar ais go dtí an graf, ag iontráil toradh an tsubquery.

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
 
}

Tógann sé cúpla milleasoicindí chun triarachí singil a chur leis an ngraf, agus braitheann an t-am forghníomhaithe chun toradh fofhiosrúcháin a chur isteach ar aga feidhmithe an fhochomhairimh féin.

Cé nár úsáideamar go minic é, ceadaíonn Neiptiún duit triplets a bhaint bunaithe ar shamplaí nó ar shonraí follasacha, ar féidir iad a úsáid chun faisnéis a nuashonrú.

Ceisteanna SPARQL

Tríd an bhfoshampla roimhe seo a thabhairt isteach, a thugann líon na n-eisiúintí do gach ealaíontóir ar ais, tá an chéad chineál fiosrúcháin tugtha isteach againn cheana féin ba mhaith linn a fhreagairt ag baint úsáide as Neiptiún. Tá sé éasca fiosrúchán a thógáil i Neiptiún - seol iarratas POST chuig críochphointe SPARQL, mar a thaispeántar thíos:

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

Ina theannta sin, tá ceist curtha i bhfeidhm againn a sheolann ar ais próifíl ealaíontóra ina bhfuil faisnéis faoina n-ainm, a n-aois nó a dtír bhunaidh. Coinnigh i gcuimhne gur féidir gur daoine aonair, bannaí nó ceolfhoirne iad na taibheoirí. Ina theannta sin, cuirimid leis na sonraí seo le faisnéis faoin líon eisiúintí a d’eisigh ealaíontóirí i rith na bliana. Maidir le healaíontóirí aonair, cuirimid eolas freisin faoi na bannaí a ghlac ealaíontóirí páirt iontu gach bliain.

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

Mar gheall ar chastacht fiosrúcháin den sórt sin, ní fhéadfaimis ach fiosrúcháin phointe a dhéanamh d’ealaíontóir ar leith, mar Elton John, ach ní do gach ealaíontóir. Ní cosúil go ndéanann Neiptiún a leithéid de cheist a bharrfheabhsú trí scagairí a chur isteach i bhfo-roghanna. Mar sin, ní mór gach rogha a scagadh de láimh de réir ainm an ealaíontóra.

Bíonn táillí in aghaidh na huaire agus in aghaidh an I/O ag Neiptiún. Le haghaidh ár dtástáil, d'úsáideamar an t-íosmhéid sampla lom Neiptiún, a chosnaíonn $0,384/uair. I gcás an fhiosrúcháin thuas, a ríomhann an phróifíl d’oibrí aonair, gearrann Amazon na mílte oibríochtaí I/O orainn, rud a thugann costas $0.02 le tuiscint.

Aschur

Ar dtús, coimeádann Amazon Neiptiún an chuid is mó dá ghealltanais. Mar sheirbhís bhainistithe, is bunachar sonraí graif é atá thar a bheith éasca le suiteáil agus is féidir a bheith ar bun agus ag feidhmiú gan go leor cumraíochta. Seo ár gcúig phríomhthoradh:

  • Tá mór-uaslódáil éasca ach mall. Ach is féidir é a bheith casta le teachtaireachtaí earráide nach bhfuil an-chabhrach.
  • Tacaíonn íoslódáil sruthú le gach rud a raibh súil againn leis agus bhí sé tapa go leor
  • Tá fiosrúcháin simplí, ach níl siad idirghníomhach go leor chun fiosrúcháin anailíse a rith
  • Ní mór fiosrúcháin SPARQL a bharrfheabhsú de láimh
  • Tá sé deacair íocaíochtaí Amazon a mheas mar go bhfuil sé deacair meastachán a dhéanamh ar an méid sonraí a scanadh le fiosrú SPARQL.

Sin é an méid. Cláraigh le haghaidh webinar saor in aisce ar an ábhar "Cothromú Ualach".


Foinse: will.com

Add a comment