Могу ли я прервать (без тайм-аута) длительный запрос в Orientdb?

Если мое приложение инициирует длительный (минуты) запрос в Orientdb, может ли он быть (программно) прерван или прерван по моему усмотрению - и без остановки сервера?

Я искал документацию orientdb, группу Google и Интернет, но не смог подтвердить, существует ли эта функция или нет. Иногда такая функция существует, но ее нелегко обнаружить.

Некоторые базы данных графов имеют конфигурацию «TIMEOUT»; однако даже это не удовлетворило бы моему требованию прервать запрос по моему усмотрению (в любое время).

В моем приложении (и многих других, я думаю?) пользователь может передумать и выбрать какую-то другую функцию, которая фактически требует нового запроса (большого) графа и делает первый запрос ненужным. Мы не хотим, чтобы этот запрос выполнялся и потреблял ресурсы. Мы также не хотим терять другие ожидающие запросы или перезапускать сервер.


person user3376544    schedule 11.03.2014    source источник


Ответы (1)


Недавно мы представили новую HTTP-команду (пока не задокументирована, поскольку используется внутри Studio, но ваш вопрос демонстрирует, что она может быть полезна и пользователям):

HTTP POST against /connection/<command>/<id>

Где:

  • command can be:
    • kill to kill a connection
    • interrupt, чтобы прервать операцию (если возможно)
  • id в качестве идентификатора соединения. Чтобы узнать все соединения, используйте GET /connections/[‹db›]

Вы должны выполнить эту команду, аутентифицированную в области сервера OrientDB (без области базы данных), поэтому получите пароль root из файла config/orientdb-server-config.xml (последний раздел).

В вашем случае используйте interrupt.

person Lvca    schedule 12.03.2014
comment
Большое спасибо за ответ и предложение. Работает ли «прерывание» при обходах, запросах и транзакциях? Вы имеете в виду «прерывание» в REST API, но, насколько я понимаю, я теряю гарантии ACID, если транзакция или операция использует удаленный протокол и команды? Означает ли это, что прерывание, вызванное через REST, может повредить базу данных? Можно ли вызвать «прерывание» через собственный интерфейс Java? И будет ли это поддерживать ACID? - person user3376544; 14.03.2014
comment
Прерывание работает при выборе, перемещении, удалении и обновлении. Транзакции откатываются, поэтому база данных остается согласованной. - person Lvca; 14.03.2014