Медленное время прохождения через Титан. Как улучшить производительность с учетом конкретного варианта использования?

Недавно я только начал пробовать Титан и не знаю, как улучшить производительность, если это возможно. Для простого примера использования, который мы создали, мы настроили пользователей, у каждого из которых были свои сообщения. В настоящее время у нас 20 пользователей, и все они распределены по 580 постам в данных бенчмаркинга. Наше фактическое приложение очень динамично, поэтому некоторые конфигурации могут не применяться, о чем я упомяну позже.

Перед фактической вставкой я создаю индекс свойств для уникального идентификатора данных (пользователь/сообщения), который в данном случае является именем ключа, «имя». Кроме того, включено автоматическое создание ключей/меток, поэтому разрешено создание других свойств/меток.

g.makeKey('name').dataType(String.class).indexed(Vertex.class).unique().make()

После создания индекса я вставляю вершины пользователей/сообщений с ребрами между ними, указывая, что указанный пользователь создал указанное сообщение.

Теперь, чтобы вызвать обход. Конкретный запрос, который я хочу сделать, - это список имен пользователей / вершин пользователей, найдите мне все их сообщения. Например, заданы пользователи с именами «user_1», «user_2» и пограничной меткой «user_posts_relationship».

g.V.copySplit(_().has('name', 'user_1'), _().has('name', 'user_2').exhaustMerge().out('user_posts_relationship')

Теперь, учитывая все 20 пользователей в наших поддельных данных, это занимает примерно 2 секунды. Это плохая производительность, учитывая количество сообщений? Это то, как я должен делать обход, учитывая список начальных вершин? Причина, по которой я не использую помощника MultiVertexQuery, заключается в том, что из-за нашего фактического приложения мы не знаем, сколько ребер нам нужно перепрыгнуть, и, согласно моим исследованиям, MultiVertexQuery опускается только на один уровень.

Наши текущие характеристики следующие:

  • Титан 0.4.4
  • Кассандра 2.0.9
  • 1 ЦП / 512 МБ
  • Убунту

Извините за мои ошибки, если я их делаю, и хотел бы получить помощь!


person Gavin Ching    schedule 04.12.2014    source источник


Ответы (1)


Я предполагаю, что свойство имени уже проиндексировано. copySplit не будет использовать индекс, попробуйте вместо этого:

g.V().has('name', T.in, ['user_1', 'user_2']).out('user_posts_relationship')
person Daniel Kuppitz    schedule 04.12.2014
comment
Спасибо за ответ. Я заметил некоторое увеличение производительности. Я мало что знаю о Титане, но на данный момент я сделаю это правильным ответом :). Если есть какие-либо другие комментарии от вас (или любых других) о повышении производительности с учетом этого варианта использования, пожалуйста, опубликуйте ответ здесь! - person Gavin Ching; 09.12.2014