అమెజాన్ నెప్ట్యూన్ యొక్క మొదటి ముద్రలు

సెల్యూట్, ఖబ్రోవ్స్క్ నివాసితులు. కోర్సు ప్రారంభం కోసం ఎదురుచూస్తూ "డెవలపర్‌ల కోసం AWS" మేము ఆసక్తికరమైన విషయాల అనువాదాన్ని సిద్ధం చేసాము.

అమెజాన్ నెప్ట్యూన్ యొక్క మొదటి ముద్రలు

మనకు నచ్చిన అనేక ఉపయోగ సందర్భాలలో బక్‌డేటామేము మా క్లయింట్‌ల వెబ్‌సైట్‌లలో చూస్తున్నట్లుగా, సంబంధిత సమాచారం ఎంటిటీల మధ్య కనెక్షన్‌లలో దాచబడుతుంది, ఉదాహరణకు వినియోగదారుల మధ్య సంబంధాలు, మూలకాల మధ్య ఆధారపడటం లేదా సెన్సార్‌ల మధ్య కనెక్షన్‌లను విశ్లేషించేటప్పుడు. ఇటువంటి వినియోగ సందర్భాలు సాధారణంగా గ్రాఫ్‌లో రూపొందించబడతాయి. ఈ సంవత్సరం ప్రారంభంలో, అమెజాన్ తన కొత్త గ్రాఫ్ డేటాబేస్, నెప్ట్యూన్‌ను విడుదల చేసింది. ఈ పోస్ట్‌లో మేము మా మొదటి ఆలోచనలు, మంచి అభ్యాసాలు మరియు కాలక్రమేణా మెరుగుపరచగల వాటిని భాగస్వామ్యం చేయాలనుకుంటున్నాము.

మాకు అమెజాన్ నెప్ట్యూన్ ఎందుకు అవసరం

గ్రాఫ్ డేటాబేస్‌లు వాటి సంబంధిత సమానమైన వాటి కంటే బాగా కనెక్ట్ చేయబడిన డేటా సెట్‌లను మెరుగ్గా నిర్వహిస్తాయని వాగ్దానం చేస్తాయి. అటువంటి డేటాసెట్లలో, సంబంధిత సమాచారం సాధారణంగా వస్తువుల మధ్య సంబంధాలలో నిల్వ చేయబడుతుంది. మేము నెప్ట్యూన్‌ని పరీక్షించడానికి అద్భుతమైన ఓపెన్ డేటా ప్రాజెక్ట్‌ని ఉపయోగించాము Musicbrainz. MusicBrainz కళాకారులు, పాటలు, ఆల్బమ్ విడుదలలు లేదా కచేరీల గురించిన సమాచారం, అలాగే పాట వెనుక ఉన్న ఆర్టిస్ట్ ఎవరితో కలిసి పనిచేశారు లేదా ఏ దేశంలో ఆల్బమ్ ఎప్పుడు విడుదలైంది వంటి ఊహాజనిత సంగీత మెటాడేటాను సేకరిస్తుంది. MusicBrainz సంగీత పరిశ్రమకు ఏదో ఒకవిధంగా అనుసంధానించబడిన సంస్థల యొక్క భారీ నెట్‌వర్క్‌గా చూడవచ్చు.

MusicBrainz డేటాసెట్ రిలేషనల్ డేటాబేస్ యొక్క CSV డంప్‌గా అందించబడింది. మొత్తంగా, డంప్‌లో 93 పట్టికలలో సుమారు 157 మిలియన్ వరుసలు ఉన్నాయి. ఈ పట్టికలలో కొన్ని కళాకారులు, ఈవెంట్‌లు, రికార్డింగ్‌లు, విడుదలలు లేదా ట్రాక్‌లు వంటి ప్రాథమిక డేటాను కలిగి ఉంటాయి లింక్ పట్టికలు — కళాకారులు మరియు రికార్డింగ్‌లు, ఇతర కళాకారులు లేదా విడుదలలు మొదలైన వాటి మధ్య సంబంధాలను నిల్వ చేయండి... అవి డేటా సెట్ యొక్క గ్రాఫ్ నిర్మాణాన్ని ప్రదర్శిస్తాయి. డేటాసెట్‌ను RDF ట్రిపుల్‌లుగా మార్చినప్పుడు, మేము సుమారు 500 మిలియన్ ఇన్‌స్టాన్స్‌లను పొందాము.

మేము పని చేసే ప్రాజెక్ట్ భాగస్వాముల అనుభవం మరియు ఇంప్రెషన్‌ల ఆధారంగా, కొత్త సమాచారాన్ని పొందడానికి ఈ నాలెడ్జ్ బేస్ ఉపయోగించబడే సెట్టింగ్‌ను మేము అందిస్తున్నాము. అదనంగా, ఇది క్రమం తప్పకుండా నవీకరించబడుతుందని మేము ఆశిస్తున్నాము, ఉదాహరణకు కొత్త విడుదలలను జోడించడం లేదా సమూహ సభ్యులను నవీకరించడం.

సర్దుబాటు

ఊహించిన విధంగా, అమెజాన్ నెప్ట్యూన్‌ని ఇన్‌స్టాల్ చేయడం చాలా సులభం. ఆమె చాలా వివరంగా ఉంది డాక్యుమెంట్ చేయబడింది. మీరు కేవలం కొన్ని క్లిక్‌లలో గ్రాఫ్ డేటాబేస్‌ను ప్రారంభించవచ్చు. అయితే, మరింత వివరణాత్మక కాన్ఫిగరేషన్ విషయానికి వస్తే, అవసరమైన సమాచారం దొరకడం కష్టం. కాబట్టి, మేము ఒక కాన్ఫిగరేషన్ పరామితిని సూచించాలనుకుంటున్నాము.

అమెజాన్ నెప్ట్యూన్ యొక్క మొదటి ముద్రలు
పారామీటర్ సమూహాల కోసం కాన్ఫిగరేషన్ స్క్రీన్‌షాట్

నెప్ట్యూన్ తక్కువ-లేటెన్సీ లావాదేవీల వర్క్‌లోడ్‌లపై దృష్టి పెడుతుందని అమెజాన్ చెబుతోంది, అందుకే డిఫాల్ట్ అభ్యర్థన గడువు 120 సెకన్లు. అయినప్పటికీ, మేము ఈ పరిమితిని క్రమం తప్పకుండా చేరుకున్న అనేక విశ్లేషణాత్మక వినియోగ కేసులను పరీక్షించాము. నెప్ట్యూన్ మరియు సెట్టింగ్ కోసం కొత్త పారామితి సమూహాన్ని సృష్టించడం ద్వారా ఈ గడువును మార్చవచ్చు neptune_query_timeout సంబంధిత పరిమితి.

డేటా లోడ్ అవుతోంది

మేము నెప్ట్యూన్‌లోకి MusicBrainz డేటాను ఎలా లోడ్ చేసామో క్రింద వివరంగా చర్చిస్తాము.

ముగ్గురిలో సంబంధాలు

ముందుగా, మేము 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> .

బల్క్ అప్‌లోడ్

నెప్ట్యూన్‌లోకి పెద్ద మొత్తంలో డేటాను లోడ్ చేయడానికి సూచించబడిన మార్గం S3 ద్వారా బల్క్ అప్‌లోడ్ ప్రక్రియ. మీ ట్రిపుల్ ఫైల్‌లను 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"
 
}'

మేము నెప్ట్యూన్‌ను ప్రారంభించిన ప్రతిసారీ ఈ సుదీర్ఘ ప్రక్రియను నివారించడానికి, ఈ ట్రిపుల్‌లు ఇప్పటికే లోడ్ చేయబడిన స్నాప్‌షాట్ నుండి ఉదాహరణను పునరుద్ధరించాలని మేము నిర్ణయించుకున్నాము. స్నాప్‌షాట్ నుండి రన్ చేయడం చాలా వేగంగా ఉంటుంది, అయితే అభ్యర్థనల కోసం నెప్ట్యూన్ అందుబాటులోకి రావడానికి ఇంకా ఒక గంట పడుతుంది.

ప్రారంభంలో నెప్ట్యూన్‌లోకి ట్రిపుల్స్‌ను లోడ్ చేస్తున్నప్పుడు, మేము వివిధ లోపాలను ఎదుర్కొన్నాము.

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

వాటిలో కొన్ని పైన చూపిన విధంగా పార్సింగ్ లోపాలు ఉన్నాయి. ఈ రోజు వరకు, ఈ సమయంలో సరిగ్గా ఏమి జరిగిందో మేము ఇంకా గుర్తించలేదు. కొంచెం ఎక్కువ వివరాలు ఖచ్చితంగా ఇక్కడ సహాయపడతాయి. చొప్పించిన ట్రిపుల్‌లలో సుమారు 1% కోసం ఈ లోపం సంభవించింది. కానీ నెప్ట్యూన్‌ను పరీక్షించేంతవరకు, మేము MusicBrainz నుండి 99% సమాచారంతో మాత్రమే పని చేస్తాము అనే వాస్తవాన్ని మేము అంగీకరించాము.

SPARQLతో పరిచయం ఉన్న వ్యక్తులకు ఇది చాలా సులభం అయినప్పటికీ, RDF ట్రిపుల్స్ తప్పనిసరిగా స్పష్టమైన డేటా రకాలతో ఉల్లేఖించబడాలని గుర్తుంచుకోండి, ఇది మళ్లీ లోపాలను కలిగిస్తుంది.

స్ట్రీమింగ్ డౌన్‌లోడ్

పైన పేర్కొన్నట్లుగా, మేము నెప్ట్యూన్‌ను స్టాటిక్ డేటా స్టోర్‌గా ఉపయోగించకూడదనుకుంటున్నాము, బదులుగా సౌకర్యవంతమైన మరియు అభివృద్ధి చెందుతున్న నాలెడ్జ్ బేస్‌గా ఉపయోగించాలనుకుంటున్నాము. కాబట్టి మేము నాలెడ్జ్ బేస్ మారినప్పుడు కొత్త ట్రిపుల్‌లను పరిచయం చేయడానికి మార్గాలను కనుగొనవలసి ఉంటుంది, ఉదాహరణకు కొత్త ఆల్బమ్ ప్రచురించబడినప్పుడు లేదా మేము ఉత్పన్నమైన జ్ఞానాన్ని పొందాలనుకున్నప్పుడు.

నెప్ట్యూన్ SPARQL ప్రశ్నల ద్వారా ఇన్‌పుట్ ఆపరేటర్‌లకు మద్దతిస్తుంది, ముడి మరియు నమూనా ఆధారితం. మేము రెండు విధానాలను క్రింద చర్చిస్తాము.

స్ట్రీమింగ్ పద్ధతిలో డేటాను నమోదు చేయడం మా లక్ష్యాలలో ఒకటి. కొత్త దేశంలో ఆల్బమ్‌ని విడుదల చేయడాన్ని పరిగణించండి. MusicBrainz దృక్కోణంలో, ఆల్బమ్‌లు, సింగిల్స్, EPలు మొదలైన వాటితో కూడిన విడుదల కోసం, టేబుల్‌కి కొత్త ఎంట్రీ జోడించబడిందని దీని అర్థం. విడుదల-దేశం. 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 నిమిషాల కంటే ఎక్కువ సమయం పడుతుంది, కాబట్టి ఈ కొత్త జ్ఞానాన్ని వేరే ప్రశ్నలో మళ్లీ ఉపయోగించేందుకు మనం ఫలితాన్ని పొందాలి. కాబట్టి మేము సబ్‌క్వెరీ ఫలితాన్ని నమోదు చేస్తూ, గ్రాఫ్‌కు తిరిగి ఈ సమాచారంతో ట్రిపుల్స్‌ని జోడిస్తాము.

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
 
}

గ్రాఫ్‌కు సింగిల్ ట్రిపుల్‌లను జోడించడం కొన్ని మిల్లీసెకన్లు పడుతుంది, అయితే సబ్‌క్వెరీ ఫలితాన్ని చొప్పించడానికి అమలు సమయం సబ్‌క్వెరీ యొక్క అమలు సమయంపై ఆధారపడి ఉంటుంది.

మేము దీన్ని తరచుగా ఉపయోగించనప్పటికీ, సమాచారాన్ని నవీకరించడానికి ఉపయోగించే నమూనాలు లేదా స్పష్టమైన డేటా ఆధారంగా త్రిపాదిలను తీసివేయడానికి నెప్ట్యూన్ మిమ్మల్ని అనుమతిస్తుంది.

SPARQL ప్రశ్నలు

ప్రతి కళాకారుడి కోసం విడుదలల సంఖ్యను అందించే మునుపటి ఉప నమూనాను పరిచయం చేయడం ద్వారా, మేము నెప్ట్యూన్‌ని ఉపయోగించి సమాధానం ఇవ్వాలనుకుంటున్న మొదటి రకమైన ప్రశ్నను ఇప్పటికే పరిచయం చేసాము. నెప్ట్యూన్‌లో ప్రశ్నను రూపొందించడం సులభం - దిగువ చూపిన విధంగా SPARQL ఎండ్‌పాయింట్‌కు POST అభ్యర్థనను పంపండి:

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

అటువంటి ప్రశ్న యొక్క సంక్లిష్టత కారణంగా, మేము ఎల్టన్ జాన్ వంటి నిర్దిష్ట కళాకారుడి కోసం మాత్రమే పాయింట్ ప్రశ్నలను నిర్వహించగలము, కానీ కళాకారులందరికీ కాదు. ఫిల్టర్‌లను ఉప ఎంపికలలోకి వదలడం ద్వారా నెప్ట్యూన్ అటువంటి ప్రశ్నను ఆప్టిమైజ్ చేసినట్లు లేదు. కాబట్టి, ప్రతి ఎంపిక తప్పనిసరిగా కళాకారుడి పేరు ద్వారా మాన్యువల్‌గా ఫిల్టర్ చేయబడాలి.

నెప్ట్యూన్ గంటకు మరియు ప్రతి-I/O ఛార్జీలను కలిగి ఉంటుంది. మా పరీక్ష కోసం, మేము కనీసపు నెప్ట్యూన్ ఉదాహరణను ఉపయోగించాము, దీని ధర గంటకు $0,384. పై ప్రశ్న విషయంలో, ఒకే కార్మికుని కోసం ప్రొఫైల్‌ను గణిస్తుంది, Amazon మాకు పదివేల I/O ఆపరేషన్‌లను వసూలు చేస్తుంది, దీని ధర $0.02.

తీర్మానం

మొదట, అమెజాన్ నెప్ట్యూన్ దాని వాగ్దానాలను చాలా వరకు ఉంచుతుంది. నిర్వహించబడే సేవగా, ఇది గ్రాఫ్ డేటాబేస్, ఇది ఇన్‌స్టాల్ చేయడం చాలా సులభం మరియు ఎక్కువ కాన్ఫిగరేషన్ లేకుండా అమలులో ఉంటుంది. ఇక్కడ మా ఐదు కీలక ఫలితాలు ఉన్నాయి:

  • బల్క్ అప్‌లోడ్ సులభం కానీ నెమ్మదిగా ఉంటుంది. కానీ ఇది చాలా సహాయకారిగా లేని ఎర్రర్ సందేశాలతో సంక్లిష్టంగా మారవచ్చు.
  • స్ట్రీమింగ్ డౌన్‌లోడ్ మేము ఊహించిన ప్రతిదానికీ మద్దతు ఇస్తుంది మరియు చాలా వేగంగా ఉంది
  • ప్రశ్నలు సరళమైనవి, కానీ విశ్లేషణాత్మక ప్రశ్నలను అమలు చేయడానికి తగినంత ఇంటరాక్టివ్ కాదు
  • SPARQL ప్రశ్నలను మాన్యువల్‌గా ఆప్టిమైజ్ చేయాలి
  • Amazon చెల్లింపులను అంచనా వేయడం కష్టం ఎందుకంటే SPARQL ప్రశ్న ద్వారా స్కాన్ చేయబడిన డేటా మొత్తాన్ని అంచనా వేయడం కష్టం.

అంతే. చందాదారులుకండి "లోడ్ బ్యాలెన్సింగ్" అనే అంశంపై ఉచిత వెబ్‌నార్.


మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి