Какие существуют методы создания индексов?

Каждый пример, который мне удалось найти в документации Titan, создает индексы с использованием консоли Rexster. Вы входите в один узел Titan, создаете свои индексы и совершаете коммит. Через некоторое время весь кластер знает об индексе и его можно использовать.

Мне интересно, есть ли другие способы сделать это. Есть некоторые преимущества при создании индексов из кода, например. в расширении Rexster: я использую ENUM для ключей свойств и меток ребер, которые предлагают toString методы, которые я могу использовать при создании индекса. Таким образом, можно не беспокоиться об измененных значениях.

Еще один аспект, который следует упомянуть, заключается в том, что я тестирую Титан и, таким образом, довольно часто повторно инициализирую кластер. Удобнее позволить коду сделать всю работу за меня, чем заходить на узел и делать это вручную.

Однако создание индексов из кода кажется беспорядочным и вызывает множество исключений при использовании в конечном итоге согласованного бэкэнда хранилища. Я думаю, что из-за моего одновременного запуска узла несколько узлов пытались создать индексы. Подробности см. в разделе Titan node не появляется.

Есть ли правильный способ решения этих проблем? Есть ли другие методы, о которых я не знаю?


person Sebastian Schlicht    schedule 23.01.2015    source источник


Ответы (1)


На практике я не думаю, что многие люди создают свою схему, вручную вводя данные в консоль. Обычно я создаю класс Schema, у которого есть несколько методов для выполнения этой работы. Таким образом, я могу использовать перечисления, статические строковые переменные и т. д. так, как вы описываете. Этот класс Schema действительно полезен, потому что он представляет собой версионный экземпляр того, как моя схема Titan выглядит в любой момент времени, и я могу повторно использовать его во многих местах (для инициализации производственного экземпляра вручную, построения схемы между модульными тестами, работы его в отличный скрипт для автоматизации на вашем сервере сборки и т. д.)

Для Titan класс Schema занимает центральное место в концепции разработки и поддержки собственной DSL Gremlin. Вы можете найти этот сообщение в блоге по теме интересно, если еще не читали.

person stephen mallette    schedule 23.01.2015
comment
Не могли бы вы сказать об этом немного конкретнее? Сообщение в блоге действительно интересное, но я не могу понять, на каком языке написан этот класс или куда его поместить/как его использовать. Есть ли документация по этому поводу? - person Sebastian Schlicht; 24.01.2015
comment
Я всегда пишу такой код в Groovy, так как обычно вы также пишете обходы с ним, однако я не понимаю, почему вы не можете написать его на любом языке JVM, который вы выберете, создать банку и зависеть от нее по мере необходимости. - person stephen mallette; 26.01.2015
comment
Я надеялся, что будет метод инициализации, который выполняется один раз при создании графа. Это было бы идеальной точкой для создания схемы. Во всех остальных случаях необходимо следить за тем, чтобы узлы не пытались создать схему одновременно, что, похоже, произошло с использованием Cassandra. Можно создать расширение Rexster createGraphSchema и убедиться, что оно вызывается один раз, но мне это кажется излишним. - person Sebastian Schlicht; 26.01.2015
comment
Я не знаю такого метода. Я обычно использовал класс Schema, о котором я говорил, вне кода, развернутого на отдельных узлах, чтобы не сталкиваться с такими проблемами. Если вы пытаетесь автоматизировать запуск и инициализацию своего кластера, может показаться, что в рамках запуска cassandra вы можете просто вызвать groovy-скрипт, который вызывает класс Schema для выполнения своей работы. После этого запустите Rexster и любые другие запущенные приложения. Для меня определение схемы — это то, что лучше всего делать вне кода приложения. - person stephen mallette; 26.01.2015