Rust+Oxigraph를 통한 서버 SPARQL 엔드포인트 구축
이번에는 Rust로 제작된Oxigraph을 사용해 AWS 서버에서 어디에서도 이동할 수 없는 프로그램을 제작했다.
여기 소개oxigraph-sparql-api-serverless합니다.
SPARQL이란 무엇입니까?
SPARQL는 RDF용 검색 언어다.SPARQL 조회를 통해 검색할 수 있는 엔드포인트는 이미 공개DBpedia와Wikidata 등 다양한 정보를 담았다.
자세한 내용은 아래의 내용을 참조하시오.
사용법
oxigraph-sparql-api-serverless Rust를 사용하여 AWS Lambda 함수 섹션을 구현했습니다.Docker를 사용하여 Amazon Linux2에 구축AWS SAM CLI하여 AWS에 추출합니다.
구축
SPARQL 엔드포인트에서 검색할 RDF 파일을 터틀로 준비하십시오.
이름
dump.ttl
을 바꾸고 디렉토리rdf/
를 덮어씁니다.다음 Docker 명령을 사용하여 Rust 프로그램을 구성합니다.
$ cd oxigraph-sparql-api-serverless/
$ docker image build -t oxigraph-build -f Dockerfile.build .
$ docker container run --rm -v $PWD:/code -v $HOME/.cargo/registry:/root/.cargo/registry -v $HOME/.cargo/git:/root/.cargo/git oxigraph-build
구축이 완료되면 생성lambda.zip
됩니다.프로그램 설계
AWS SDK 또는 AWS SAM CLI를 설치하고 설정 후 디버깅을 수행하십시오.
$ sam package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket {デプロイ用S3バケット}
$ sam deploy --template-file packaged.yaml --stack-name {スタック名} --capabilities CAPABILITY_IAM
depro를 복사한 후 표시되는 URL(예: https://${ID}.execute-api.${Region}.amazonaws.com/Prod/
)은 다음과 같이 액세스하면 SPARQL 엔드포인트 동작으로 사용됩니다.https://${ID}.execute-api.${Region}.amazonaws.com/Prod/sparql?query={URLエンコードされたSPARQLクエリ}&format={json(デフォルト) か xml}
성능
검색 속도
과거 제작된Node.js/Quadstore 버전,Java/apache Jena 버전처럼 검색 속도를 측정했다.
두 기사는 공개된 2020년판 RDF 파일(총 160491의 3배)과 다음 3가지 SPARQL 조회를 사용했다.
이번에도 같은 조건에서 진행됐다.
(1) 100개 3배 얻기
select * where {?s ?p ?o} limit 100
(2) 모든 3배수 얻기select (count(*) as ?count) where {?s ?p ?o}
(3)filter
로 문자열 축소prefix schema: <http://schema.org/>
prefix org: <http://www.w3.org/ns/org#>
prefix dbpedia: <http://dbpedia.org/ontology/>
select * where {
?uri dbpedia:originalName ?name;
org:hasSite/org:siteAddress/schema:addressRegion ?pref.
filter( regex(?pref, "東京") )
}
limit 10
결과는 다음과 같다.개별 설치
(1)
(2)
(3)
Rust/Oxigraph
88ms
279ms
80ms
Node.js/Quadstore
220ms
12910ms
12910ms
Java/Apache Jena
141ms
579ms
104ms
Node.Js/Quadstore와 Java/apache Jena를 비교하기 위한 결과도 게재됐다.모든 Rust/Oxigraph 결과가 가장 빠릅니다.
첫 번째 부팅 시간
AWS Lambda에는 콜드 스타트가 있는데, 처음 프로그램을 실행할 때 초기화하는 데 시간이 걸린다는 문제가 있다.
Rust/Oxigraph 및 노드.js/Quadstore, Java/APache Jena 세 개의 AWS Lambda로 실행할 때 초기 소요 시간(Init Duration)을 조사했습니다.
개별 설치
초기 소요 시간
메모리 크기
Rust/Oxigraph
81.96 ms
1024MB
Node.js/Quadstore
383.82 ms
1024MB
Java/Apache Jena
3690.75 ms
2048MB
※ 초기에 걸리는 시간은 일정하지 않으며, 상황에 따라 이보다 더 오래 걸릴 수도 있습니다.
결과적으로 Rust/Oxigraph는 여기서도 최초였다.
총결산
지금까지 자바/스페이스 제나 버전이 냉열 가동 문제를 외면했다면 가장 안정적인 성능을 기대할 수 있었지만, Rust/Oxigraph 버전의 냉열 가동 문제도 거의 무시할 수 있었고, 15만3배라면 검색 속도도 비교적 안정적이어서 충분히 활용할 수 있을 것으로 생각했다.
다만, RDF 파일 100만3배 이상을 시도한 뒤 전체 스캔을 하는 쿼리(예:
filter
나 order by
는 Rust/Oxigraph 버전(10초 이상)보다 검색 속도가 빨라 상황에 따라 자바/apache Jena 버전(1초 미만)이 유리할 수 있다.옥시그래프는 2021년 3월까지만 해도 버전이 젊었고, 최적화는 현재부터 시작될 예정이어서 앞으로 큰 기대가 있을 것으로 보인다.
Rust/Oxigraph 버전 검색은 다음과 같이 시도할 수 있습니다.
ISIL(International International Standard Idential Identerprise) 파일럿 LOD
Reference
이 문제에 관하여(Rust+Oxigraph를 통한 서버 SPARQL 엔드포인트 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/uedayou/articles/06f744ac1c4737텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)