2016-10-07 8 views
2

В гремлине,и OLTP OLAP запросы в гремлине

  1. s = graph.traversal()

  2. г = graph.traversal (компьютер())

я знаю первая для OLTP и вторая для OLAP. Я знаю разницу между OLAP и OLTP в level.I определения имеют следующие запросы по этому поводу:

Как

  1. вышеуказанных запросов различаются в работе?
  2. Могу ли я использовать второй, используя'g ' в запросах в своем приложении для получения результатов (я знаю, что этот' g 'один дает дает результаты быстрее первого)?
  3. Разница между OLAP и OLTP с примером?

Заранее спасибо.

ответ

4

С точки зрения пользователя, с точки зрения результатов нет реальной разницы между OLAP и OLTP. Операции Gremlin одинаковы, кроме конфигурации TraversalSource, как вы показали, используя withComputer() и другие настройки.

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

Вы действительно не должны думать о OLTP против OLAP как «быстрее» и «медленнее». Это, вероятно, лучше думать о нем, как это описано в documentation:

  • OLTP: в режиме реального время, ограниченные данные доступны, произвольный доступ к данным, последовательной обработки, запрашивая
  • OLAP: давно работает, все данные установить доступ, последовательный доступ к данным, параллельной обработки, партия обработки

Там нет причин, почему вы не можете использовать OLAP обхода в приложениях, пока ваше приложение знает о требованиях этого обхода. Если у вас есть SLA, в котором говорится, что запросы REST должны быть заполнены менее чем за 0,5 секунды, и вы решили использовать обход OLAP для получения ответа, вы, несомненно, нарушите SLA. Предполагая, что вы выполняете задачу обхода OLAP поверх Spark, потребуется Spark 10-15 секунд, чтобы организовать организованную работу.

Я не уверен, как предоставить пример OLAP и OLTP, за исключением того, чтобы говорить о вариантах использования немного больше, поэтому должно быть ясно, когда использовать один, а не другой. В любом случае предположим, что у вас есть граф с 10 миллиардами краев.Вы хотите, чтобы ваши OLTP обходы всегда начинать с некоторой формой индекса поиска - как обходе, который показывает средний возраст друзей пользователя «stephenm»:

g.V().has('username','stephenm').out('knows').values('age').mean() 

но что, если я хочу знать, среднее возраст каждого пользователя в моей базе данных? В этом случае у меня нет никакого индекса, который я могу использовать для поиска «небольшого набора стартовых вершин» - мне приходится обрабатывать все миллионы/миллиарды вершин на моем графике. Это идеальный вариант использования для OLAP:

g.V().hasLabel('user').values('age').mean() 

OLAP также отлично подходит для понимания роста вашего графа и для поддержания вашего графика. С миллиардами краев и высокой скоростью приема данных, не зная, что ваш график растет ненадлежащим образом, является смертным приговором. Это хорошо, чтобы использовать OLAP, чтобы захватить глобальную статистику по всем данным в графе:

g.E().label().groupCount() 
g.V().label().groupCount() 

В приведенных выше примерах, вы получите распределение метки края/вершины. Если у вас есть идея о том, как растет ваш график, это может быть хорошим показателем того, работает ли ваш процесс приема данных правильно. На миллиардном краевом графике попытка выполнить хотя бы один из обходов займет «навсегда», если он когда-либо закончится без ошибок.

+0

большое вам спасибо @stephen – Ahi