ඇමේසන් නෙප්චූන් පිළිබඳ පළමු හැඟීම

ආචාර කරන්න, Khabrovsk පදිංචිකරුවන්. පාඨමාලාවේ ආරම්භය අපේක්ෂාවෙන් "සංවර්ධකයින් සඳහා AWS" අපි රසවත් ද්රව්ය පරිවර්තනයක් සකස් කර ඇත.

ඇමේසන් නෙප්චූන් පිළිබඳ පළමු හැඟීම

අපි කැමති බොහෝ භාවිත අවස්ථා වලදී bakdataඅපගේ සේවාලාභීන්ගේ වෙබ් අඩවිවල අප දකින පරිදි, අදාළ තොරතුරු ආයතන අතර සම්බන්ධතා තුළ සඟවා ඇත, උදාහරණයක් ලෙස පරිශීලකයන් අතර සම්බන්ධතා, මූලද්‍රව්‍ය අතර පරායත්තතා හෝ සංවේදක අතර සම්බන්ධතා විශ්ලේෂණය කිරීමේදී. එවැනි භාවිත අවස්ථා සාමාන්‍යයෙන් ප්‍රස්ථාරයක් මත ආකෘතිගත කර ඇත. මෙම වසර මුලදී, Amazon සිය නව ප්‍රස්ථාර දත්ත ගබඩාව වන නෙප්චූන් නිකුත් කළේය. මෙම ලිපියෙන් අපට අවශ්‍ය වන්නේ අපගේ පළමු අදහස්, හොඳ භාවිතයන් සහ කාලයත් සමඟ වැඩිදියුණු කළ හැකි දේ බෙදා ගැනීමටය.

අපට ඇමසන් නෙප්චූන් අවශ්‍ය වූයේ ඇයි?

ප්‍රස්ථාර දත්ත සමුදායන් ඉහළ සම්බන්ධිත දත්ත කට්ටල ඔවුන්ගේ සම්බන්ධිත සමානතාවලට වඩා හොඳින් හැසිරවීමට පොරොන්දු වේ. එවැනි දත්ත කට්ටලවල, අදාළ තොරතුරු සාමාන්‍යයෙන් වස්තු අතර සම්බන්ධතා තුළ ගබඩා වේ. අපි නෙප්චූන් පරීක්‍ෂා කිරීමට විස්මිත විවෘත දත්ත ව්‍යාපෘතියක් භාවිතා කළෙමු 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
 
}

ප්‍රස්ථාරයට තනි ත්‍රිත්ව එකතු කිරීම සඳහා මිලි තත්පර කිහිපයක් ගත වන අතර, උප විමසුමක ප්‍රතිඵලය ඇතුළත් කිරීමේ ක්‍රියාත්මක කාලය උප විමසුමේ ක්‍රියාත්මක කාලය මත රඳා පවතී.

අපි එය නිතර භාවිතා නොකළත්, තොරතුරු යාවත්කාලීන කිරීමට භාවිතා කළ හැකි සාම්පල හෝ පැහැදිලි දත්ත මත පදනම්ව ත්‍රිත්ව ඉවත් කිරීමට ද Neptune ඔබට ඉඩ සලසයි.

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 විමසුම් අතින් ප්‍රශස්ත කළ යුතුය
  • SPARQL විමසුමකින් ස්කෑන් කරන ලද දත්ත ප්‍රමාණය ඇස්තමේන්තු කිරීම අපහසු නිසා Amazon ගෙවීම් ඇස්තමේන්තු කිරීම අපහසුය.

එච්චරයි. සඳහා ලියාපදිංචි වන්න "පූරණය තුලනය" යන මාතෘකාව පිළිබඳ නොමිලේ webinar.


මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න