Gremlin Server: обслуживание нескольких графиков из таблицы hbase
Я использую сервер gremlin с hbase в качестве бэк-энда. Я читал, что для хранения нескольких графиков мы должны использовать разные таблицы, поэтому я храню несколько графиков в hbase под разными именами таблиц.
Свойство storage.hbase.tablename указывается в titan-hbase.properties . Но мне нужно предоставить график динамически в зависимости от группы, и я не могу указать имя таблицы в файле hbase.properties (может быть сотни графиков).
Как это сделать?
2 ответа
При использовании версий от TinkerPop до 3.2.4 вам нужно будет написать обертку вокруг Gremlin Server, где вы запустите его примерно так:
Settings settings = new Settings()
GremlinServer server = new GremlinServer(settings);
server.start().join();
Тогда вы бы манипулировали GraphManager
который вы можете получить от GremlinServer
экземпляр с:
GraphManager manager = server.getServerGremlinExecutor().getGraphManager()
GraphManager.getGraphs()
возвращает Map<String,Graph>
экземпляр, где вы можете динамически добавлять / удалять обслуживаемые графики. Я бы посчитал этот метод хаком / обходным решением для достижения того, чего вы хотите, но другого метода нет.
По состоянию на 3.2.5 (на момент написания статьи не выпущено) и вперед, GraphManager
это интерфейс, который вы можете реализовать самостоятельно для динамического предоставления списка графиков. На вашу реализацию можно ссылаться в файле конфигурации Gremlin Server, что позволяет динамически подключаться к серверу.
Однако ему все еще нужен способ создания ссылок на графы. А поскольку пользователь не хочет создавать / редактировать свой файл.properties, вы можете динамически создать объект конфигурации на основе файла общих свойств, добавить имя таблицы hbase в качестве свойства этого объекта конфигурации и использовать GraphFactory для создания экземпляра объекта графа. Затем вы можете сохранить график на карте GraphManager с именем таблицы или любым другим способом. Этот последний шаг не обязателен, однако сохраняемый там график приобретает функции автоматического принятия и отката в конце выполнения сценария Gremlin.