Все команды gStore должны использоваться в корневом каталоге gStore, например, bin/gconsole, поскольку исполняемые файлы размещаются в bin/, и они могут использовать некоторые файлы, пути к которым указаны в коде, а не абсолютные пути. Мы обеспечим, чтобы все пути были абсолютными позже, попросив пользователей указать абсолютный путь в своих системах для реальной установки/конфигурации gStore. Однако вы должны сделать так, как мы сказали сейчас, чтобы избежать ошибок.
Данные RDF должны быть представлены в формате N-Triple (XML на данный момент не поддерживается), а запросы должны быть заданы в синтаксисе SPARQL 1.1. Не весь синтаксис в SPARQL 1.1 анализируется и обрабатывается в системе gStore, например, путь свойства выходит за рамки возможностей системы gStore. В сущности, литерале или предикатах данных и запросов не допускаются вкладки, '<' и '>'.
После того как вы скачаете и скомпилируете код системы gStore, автоматически будет создана база данных с именем system
(реальное имя каталога — system.db
).
Это база данных, которая управляет информацией о системной статистике, включая всех пользователей и все базы данных.
Вы можете запросить эту базу данных с помощью команды gquery
, но вам запрещено изменять её с помощью редакторов.
gbuild используется для создания новой базы данных из файла формата RDF-тройки.
# bin/gbuild db_name rdf_triple_file_path
Например, мы создаём базу данных из lubm.nt, которую можно найти в папке data.
[bookug@localhost gStore]$ bin/gbuild lubm ./data/lubm/lubm.nt
gbuild...
argc: 3 DB_store:lubm RDF_data: ./data/lubm/lubm.nt
begin encode RDF from : ./data/lubm/lubm.nt ...
Обратите внимание:
— Вы не должны создавать пустую базу данных, потому что это вызовет проблемы.
gquery используется для запроса существующей базы данных файлами, содержащими запросы SPARQL (каждый файл содержит ровно один запрос SPARQL).
Введите bin/gquery db_name query_file
, чтобы выполнить запрос SPARQL, полученный из query_file в базе данных с именем db_name.
Используйте bin/gquery --help
для получения подробной информации об использовании gquery.
Чтобы войти в консоль gquery, введите bin/gquery db_name
. Программа покажет командную строку («gsql>»), и вы сможете ввести здесь команду. Используйте help
, чтобы увидеть основную информацию обо всех командах, а help command_t
показывает детали указанной команды.
Введите quit
, чтобы выйти из консоли gquery.
Для команды sparql
введите путь к файлу, который содержит один запрос SPARQL. (Ответ перенаправления в файл поддерживается)
Когда программа завершает ответ на запрос, она снова показывает командную строку.
gStore2.0 поддерживает только простые запросы «select» (не для предикатов).
Мы также берём lubm.nt в качестве примера.
[bookug@localhost gStore]$ bin/gquery lubm
gquery...
argc: 2 DB_store:lubm/
loadTree...
LRUCache initial...
LRUCache initial finish
finish loadCache
finish loadEntityID2FileLineMap
open KVstore
finish load
finish loading
Type `help` for information of all commands
Type `help command_t` for detail of command_t
gsql>sparql ./data/lubm/lubm_q0.sql
... ...
Total time used: 4ms.
final result is :
<http://www.Department0.University0.edu/FullProfessor0>
<http://www.Department1.University0.edu/FullProfessor0>
<http://www.Department2.University0.edu/FullProfessor0>
<http://www.Department3.University0.edu/FullProfessor0>
<http://www.Department4.University0.edu/FullProfessor0>
<http://www.Department5.University0.edu/FullProfessor0>
<http://www.Department6.University0.edu/FullProfessor0>
<http://www.Department7.University0.edu/FullProfessor0>
<http://www.Department8.University0.edu/FullProfessor0>
<http://www.Department9.University0.edu/FullProfessor0>
<http://www.Department10.University0.edu/FullProfessor0>
<http://www.Department11.University0.edu/FullProfessor0>
<http://www.Department12.University0.edu/FullProfessor0>
<http://www.Department13.University0.edu/FullProfessor0>
<http://www.Department14.University0.edu/FullProfessor0>
Обратите внимание:
— «[empty Использование библиотеки readline
Используется библиотека readline, поэтому в вашей клавиатуре можно использовать клавишу со стрелкой вверх для просмотра истории команд, а также клавиши со стрелками влево и вправо для перемещения и изменения всей команды.
Поддержка завершения пути для утилиты
Для утилиты поддерживается завершение пути. (Не встроенное завершение команд.)
Чтобы вывести результат в файлы на диске, используйте команду sparql ${YOUR_QUERY} > ${YOUR_FILE}
в консоли.
ghttp запускает gStore как HTTP-сервер с портом 9000 (вам нужно открыть этот порт в своей среде, рекомендуется использовать инструмент iptables
). Посетите сервер из браузера по предварительному URL, после чего gStore выполнит соответствующую операцию.
Тип:
bin/ghttp db_name serverPort
или bin/ghttp serverPort db_name
, чтобы запустить сервер с serverPort и изначально загрузить базу данных с именем db_name.
Внимание: аргумент serverPort или db_name можно опустить.
Если вы опустите аргумент serverPort в команде, соответствующее значение будет установлено по умолчанию равным 9000.
Если вы опускаете аргумент db_name в команде, сервер запустится без загруженной базы данных.
Операция: сборка, загрузка, выгрузка, пользователь, showUser, запрос, удаление, мониторинг, показ, контрольная точка, getCoreVersion, getAPIVersion.
// инициализация
GstoreConnector gc("127.0.0.1", 9000, "root", "123456");
// создать новую базу данных из файла RDF.
gc.build("lubm", "data/lubm/lubm.nt");
// загрузить созданную базу данных.
gc.load("lubm");
// добавить пользователя (с именем пользователя: Jack, паролем: 2)
gc.user("add_user", "Jack", "2");
// предоставить привилегии пользователю Jack (add_query, add_load, add_unload)
gc.user("add_query", "Jack", "lubm");
// удалить привилегии пользователя Jack (delete_query, delete_load, delete_unload)
gc.user("delete_query", "Jack", "lubm");
//удалить пользователя (с именем пользователя: Jack, паролем: 2)
gc.user("delete_user", "Jack", "2");
// показать всех пользователей
gc.showUser();
// запрос
res = gc.query("lubm", "json", sparql);
std::cout << res << std::endl;
// сохранить обновления загруженной базы данных
gc.checkpoint("lubm");
// показать статистическую информацию о загруженной базе данных
gc.monitor("lubm");
// показать все уже созданные базы данных и загружены ли они
gc.show();
// выгрузить эту базу данных.
gc.unload("lubm");
// полностью удалить уже созданную базу данных
gc.drop("lubm", false);
// удалить уже созданную базу данных, но оставить резервную копию.
gc.drop("lubm", true);
// получить CoreVersion и APIVersion
gc.getCoreVersion();
gc.getAPIVersion();
db_name: имя базы данных, например lubm format: html, json, txt, csv sparql: select ?s where { ?s ?p ?o . } ds_path на сервере: например /home/data/test.n3 операция: тип операции: например, загрузка, выгрузка, запрос... тип: тип операции, которую вы выполняете над пользователем, например: add_user, delete_user, add_query, add_load... имя пользователя: имя пользователя, который выполняет операцию пароль: пароль пользователя, который выполняет операцию
ghttp
поддерживает запросы типа GET и POST.
ghttp
поддерживает одновременные запросы только для чтения, но когда приходят запросы, содержащие обновления, вся база данных будет заблокирована.
Рекомендуется, чтобы количество одновременно выполняемых запросов было меньше 300 на машине с десятками потоков ядра, хотя в наших экспериментах мы можем выполнять 13 000 запросов одновременно.
Чтобы использовать функцию параллелизма, вам лучше изменить системные настройки «открытых файлов» и «максимальных процессов» на 65 535 или больше.
В папке setup размещены три скрипта, которые помогут вам изменить настройки в различных дистрибутивах Linux.
Если запросы, содержащие обновления, отправляются через ghttp
, вам лучше часто отправлять команду checkpoint
в консоль ghttp
. В противном случае обновления могут не синхронизироваться с диском и будут потеряны, если сервер ghttp
остановится ненормально (например, введите «Ctrl+C»).
Внимание: лучше не останавливать ghttp простым вводом команды «Ctrl+C», потому что это небезопасно.
Чтобы остановить сервер ghttp, вы можете ввести bin/shutdown serverPort
.
Это сейчас не поддерживается.
gserver — это демон. Его следует запускать первым при доступе к gStore через gclient или... API
API взаимодействует с клиентом через сокет.
[bookug@localhost gStore]$ bin/gserver -s
Сервер запущен на порту 3305.
Вы также можете назначить пользовательский порт для прослушивания.
[bookug@localhost gStore]$ bin/gserver -s -p 3307
Сервер запущен на порту 3307.
Остановить сервер можно:
[bookug@localhost gStore]$ bin/gserver -t
Сервер остановлен на порту 3305.
Примечание: gserver не поддерживает несколько потоков. Если вы запустите gclient более чем в одном терминале одновременно, gserver упадёт.
В настоящее время не поддерживается.
gclient предназначен как клиент для отправки команд и получения обратной связи.
[bookug@localhost gStore]$ bin/gclient
ip=127.0.0.1 port=3305
gsql>
Вы также можете указать IP-адрес и порт gserver.
[bookug@localhost gStore]$ bin/gclient 172.31.19.15 3307
ip=172.31.19.15 port=3307
gsql>
Теперь мы можем использовать следующие команды:
help
показывает информацию обо всех командах;
import db_name rdf_triple_file_name
создаёт базу данных из файла троек RDF;
load db_name
загружает существующую базу данных;
unload db_name
выгружает базу данных, но не удаляет её с диска, вы можете загрузить её в следующий раз;
sparql "query_string"
запрашивает текущую базу данных с помощью строки запроса SPARQL (в кавычках);
show
отображает имя текущей загруженной базы данных.
Примечание:
в консоли gclient может быть загружена только одна база данных;
вы можете использовать ' ' или '\t' между различными частями команды, но не используйте такие символы, как ';';
не следует размещать пробел или табуляцию перед началом любой команды.
В настоящее время не поддерживается.
gconsole — это основная консоль gStore, которая интегрируется со всеми функциями для работы с gStore, а также некоторыми системными командами. Предоставляются завершение имени команд, функции редактирования строк и доступ к списку истории. Не стесняйтесь попробовать, и у вас может получиться замечательное путешествие! (Пробелы или табуляции в начале или конце допустимы, и нет необходимости вводить какие-либо специальные символы в качестве разделителей).
Просто введите bin/gconsole
в корневом каталоге gStore, чтобы использовать эту консоль, и вы увидите подсказку gstore>
, которая указывает, что вы находитесь в собственном режиме и теперь можете вводить собственные команды. Существует ещё один режим этой консоли, который называется удалённым режимом. Просто введите connect
в собственном режиме, чтобы войти в удалённый режим, и введите disconnect
, чтобы выйти в собственный режим. (Консоль подключается к серверу gStore с IP-адресом '127.0.0.1' и портом 3305, вы можете указать их, набрав connect gStore_server_ip gStore_server_port
).
В собственном или удалённом режиме вы можете использовать help
или ?
, чтобы просмотреть справочную информацию, или ввести help command_name
или ? command_name
, чтобы увидеть информацию о данной команде. Обратите внимание, что существуют некоторые различия между командами в собственном и удалённом режимах. Например, системные команды, такие как ls
, cd
и pwd
, предоставляются в собственном режиме, но не в удалённом. Также обратите внимание, что не все команды, содержащиеся на странице справки, полностью реализованы, и мы можем изменить некоторые функции консоли в будущем.
Того, что мы сделали, достаточно, чтобы обеспечить вам большое удобство использования gStore, просто наслаждайтесь!
gadd используется для вставки троек в файл в существующую базу данных.
Использование: bin/gadd db_name rdf_triple_file_path
[bookug@localhost gStore]$ bin/gadd lubm ./data/lubm/lubm.nt
...
argc: 3 DB_store:lubm insert file:./data/lubm/lubm.nt
get important pre ID
...
insert rdf triples done.
inserted triples num: 99550
gsub используется для удаления троек в файле из существующей базы данных.
Использование: bin/gsub db_name rdf_triple_file_path
[bookug@localhost gStore]$ bin/gsub lubm ./data/lubm/lubm.nt
...
argc: 3 DB_store:lubm remove file: ./data/lubm/lubm.nt
...
remove rdf triples done.
removed triples num: 99550
После запуска ghttp введите bin/gmonitor ip port db_name
, чтобы проверить текущее состояние базы данных db_name в gStore. bin/gmonitor 127.0.0.1 9000 lubm
*parameter: ?operation=monitor&db_name=lubm*
*request: http://127.0.0.1:9000/%3Foperation%3Dmonitor%26db_name%3Dlubm*
*null--->[HTTP/1.1 200 OK]*
*Content-Length--->[127]*
*database: lubm*
*triple num: 99550*
*entity num: 28413*
*literal num: 0*
*subject num: 14569*
*predicate num: 17*
*connection num: 7*
После запуска ghttp введите bin/gshow ip port, чтобы проверить загруженную базу данных.
*[bookug@localhost gStore]$ bin/gshow 127.0.0.1 9000*
*parameter: ?operation=show*
*request: http://127.0.0.1:9000/%3Foperation%3Dshow*
*null--->[HTTP/1.1 200 OK]*
*Content-Length--->[4]*
*database: lubm*
Чтобы удалить базу данных, не следует просто вводить rm -r db_name.db, потому что это не обновит встроенную базу данных с именем system. Вместо этого введите bin/gdrop db_name.
После запуска ghttp введите bin/shutdown port, чтобы остановить сервер, вместо того чтобы просто ввести команду «Ctrl+C».
Если вы хотите восстановить исходную конфигурацию сервера ghttp, введите bin/ginit, чтобы перестроить system.db.
Серия тестовых программ находится в папке scripts, и мы представим несколько полезных: full_test.sh, basic_test.sh, update_test.cpp, parser_test.sh, dataset_test.cpp и gtest.cpp.
full_test.sh используется для сравнения производительности gStore и других систем баз данных на нескольких наборах данных и запросах.
Для использования утилиты full_test.sh необходимо загрузить систему базы данных, которую вы хотите протестировать и сравнить, и установить точное положение систем баз данных и наборов данных в этом скрипте. Стратегия именования должна быть такой же, как требования gtest, а также стратегия журналов.
В этом сценарии тестируются и сравниваются только gStore и Jena, но легко добавить другие системы баз данных, если вы захотите потратить некоторое время на чтение этого сценария. Вы можете перейти к отчёту об испытаниях (pdf/gstore测试报告.pdf) или часто задаваемым вопросам (FAQ.md), если у вас возникнут проблемы.
basic_test.sh используется для проверки правильности сборки/запроса/добавления/вычитания/удаления на нескольких небольших наборах данных.
Просто запустите bash scripts/basic_test.sh, чтобы использовать этот скрипт.
На самом деле make test проведёт basic_test.sh выше, update_test.cpp и parser_test.sh ниже.
Рекомендуется завершать эту проверку каждый раз после добавления некоторых модификаций и повторной компиляции (включая случай обновления кода с помощью git pull).
update_test.cpp используется для проверки корректности многократной вставки/удаления.
Чтобы использовать эту утилиту, вы найдёте исполняемый файл update_test в каталоге scripts после компиляции всего проекта с помощью make.
Запустите scripts/update_test > /dev/null, чтобы завершить этот тест, и вы увидите вывод в конце, указывающий, успешно он выполнен или нет.
Эта команда проверит 10 000 групп вставок/удалений и 1–5 троек для каждой группы по умолчанию. Чтобы изменить количество групп и размер группы, можно запустить следующим образом:
bin/update_test ${YOUR_GROUP_NUMBER} > /dev/null
bin/update_test ${YOUR_GROUP_NUMBER} ${YOUR_GROUP_SIZE} > /dev/null
parser_test.sh используется для проверки корректности парсера.
Просто запустите bash scripts/parser_test.sh, чтобы использовать этот сценарий.
dataset_test.cpp используется для проверки корректности сборки/запроса на нескольких больших наборах данных.
Если вы хотите проверить правильность сборки/запроса для больших наборов данных, вы можете найти исполняемый файл dataset_test в каталоге scripts после компиляции всего проекта с помощью make.
Запустите scripts/dataset_test ${DB_NAME} ${DATASET_PATH} ${QUERY_PATH} ${ANSWER_PATH}> /dev/null, чтобы закончить этот тест, и вы увидите вывод в конце, указывающий, успешно ли он выполнен.
Обратите внимание:
— Вы должны разместить запросы и ответы следующим образом:
${YOUR_DATA_PATH}*.sql
${YOUR_DATA_PATH}*.txt
— ${QUERY_PATH} и ${ANSWER_PATH} должны заканчиваться символом '/'.
— Запрос и его ответ должны иметь одинаковое имя, для Для тестирования gStore с использованием различных наборов данных и запросов применяется gtest.
Чтобы использовать утилиту gtest, сначала скомпилируйте программу gtest с помощью команды make gtest
. Программа gtest представляет собой инструмент тестирования, который генерирует структурированные логи для наборов данных. Подробные сведения можно получить, введя команду ./gtest --help
в рабочем каталоге.
При необходимости измените пути в файле test/gtest.cpp.
Наборы данных и запросы следует размещать следующим образом:
DIR/WatDiv/database/*.nt
DIR/WatDir/query/*.sql
Обратите внимание, что DIR — это корневой каталог, куда помещаются все наборы данных, которые будут использоваться gtest. WatDir — класс наборов данных, как и lubm. Внутри WatDir (или lubm и т. д.) разместите все наборы данных (с расширением .nt) в папке database/, а все запросы (соответствующие наборам данных, с расширением .sql) — в папке query/.
Затем вы можете запустить программу gtest с заданными параметрами. Выходные данные будут разделены на три лога в корневом каталоге gStore: load.log (время и размер загрузки базы данных), time.log (время запроса) и result.log (результаты всех запросов, не полные выходные строки, а информация о том, совпадают ли две выбранные системы баз данных).
Все логи, созданные этой программой, имеют формат TSV (разделены символом '\t'), их можно загрузить непосредственно в Calc/Excel/Gnumeric. Обратите внимание, что единица измерения времени — мс, единица измерения пространства — кб.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )