Казанский (приволжский) федеральный университет высшая школа информационных технологий и




Скачать 309.66 Kb.
Название Казанский (приволжский) федеральный университет высшая школа информационных технологий и
страница 7/8
Тип Реферат
rykovodstvo.ru > Руководство эксплуатация > Реферат
1   2   3   4   5   6   7   8




3.3.1 Написание запроса Cypher




В общем виде, запрос на поиск всех путей между двумя аэропортами выглядит следующим образом:
MATCH (a:Airport{code:'SVO'})-[route:Flight*..3]->(b:Airport{code:'LED'}) RETURN route
В данном случае происходит поиск всех маршрутов между аэропортами Шереметьево и Пулково, где длина пути не более 3 (не более 2 пересадок). К сожалению, данный запрос учитывает также циклические пути, например, SVO->LED->SVO->LED. Формально, данный маршрут является валидным относительно поставленной задачи. Однако, следует исключить подобные результаты из выборки. Для этого воспользуемся алгоритмом для поиска только простых путей [7] (путей, где каждая вершина графа встречается не более 1 раза) в графе. Данный алгоритм уже реализован в дополнительном наборе функций Neo4j и распространяется в пакете “apoc.algo”11 под именем allSimplePaths.

Функция allSimplePaths принимает 4 параметра: стартовая вершина, конечная вершина, отношение и направление, максимальное количество ребер в пути. Применим данный алгоритм для нашего запроса:
MATCH (from:Airport{code:'SVO'}),(to:Airport{code:'LED'})

CALL apoc.algo.allSimplePaths(from,to,'Flight>',3) YIELD path AS route

RETURN route
Для каждого пути посчитаем его стоимость и продолжительность. Для этого воспользуемся функциями rels(для получения списка отношений в пути) и reduce(функция свертки):
reduce(cost = 0, f in rels(route) | cost + f.cost) AS cost,

(rels(route)[length(rels(route))-1].arrivalDate - rels(route)[0].departureDate) AS duration,

rels(route) AS flights
Добавим условия в запрос. Первый вылет должен быть совершен в определенную дату:
WHERE (length(flights) > 0)

AND (flights[0].departureDate >= 1495654020180)

AND (flights[0].departureDate < 1495654020180 + 86400000)
Каждый рейс должен быть позже предыдущего, разница между временем прилета рейса и временем вылета следующего за ним рейса должна быть больше заданного значения:
((length(flights) = 1) OR all(p in apoc.coll.pairs(flights)

WHERE p[1].departureDate > p[0].arrivalDate + (30* 60000)))
Запишем запрос целиком, с сортировкой по количеству пересадок (ребер в пути):
MATCH (from:Airport{code:'SVO'}),(to:Airport{code:'LED'})

CALL apoc.algo.allSimplePaths(from,to,'Flight>',3) YIELD path AS route

WITH route, rels(route) AS flights,

reduce(cost = 0, f in rels(route) | cost + f.cost) AS cost, (rels(route)[length(rels(route))-1].arrivalDate - rels(route)[0].departureDate) AS duration

WHERE (length(flights) > 0) AND (flights[0].departureDate >= 1495654020180)

AND (flights[0].departureDate < 1495654020180 + 86400000)

AND ((length(flights) = 1) OR all(p in apoc.coll.pairs(flights)

WHERE p[1].departureDate > p[0].arrivalDate + (30* 60000)))

AND cost >= 1000 AND cost <= 6000 AND duration < 20000000

RETURN flights, cost, duration

ORDER BY length(flights)

3.3.2 Разработка репозитория




Для реализации репозитория, создадим метод, принимающий следующие параметры:

  • String departureAirport - код аэропорта вылета

  • String arrivalAirport - код аэропорта прилета

  • long date - дата вылета (мс)

  • int maxFlightCount - максимальное кол-во сегментов

  • int minPause - минимальное время межд пересадками

  • int minCost - минимальная стоимость перелета

  • int maxCost - максимальная стоимость перелета

  • int maxDuration - максимальная длительность перелета

  • String sorting - сортировка результатов



Рис 21. Интерфейс FlightRepository
Метод будет возвращать список объектов класса Route (рис. 22), представляющих собой маршруты перелетов.



Рис 22. Классы Route, Flight и Airport
Для выполнения полученного ранее запроса Cypher из среды выполнения Java, имплементируем класс Neo4jDriverRepository. Изобразим полученную структуру классов в виде схемы (рис. 23).



Рис 23. реализация FlightRepositoryImpl.
В СУБД Neo4j включен встроенный механизм кэширования запросов, т.е. план выполнения запроса не будет генерироваться при каждом обращении к базе данных, что, в свою очередь, ускорит обработку запросов. Для использования данного механизма, используется специальный синтаксис, где знаком $(доллар) помечаются части запроса, которые являются переменными параметрами, например:

MATCH (from:Airport{code:$dep}),(to:Airport{code:$arr})
Исправим разработанный запрос согласно приведенному синтаксису и вызовем метод executeQuery класса Neo4jDriverRepository:
Optional result = executeQuery(query,

"dep", departureAirport,

"arr", arrivalAirport,

"sort", sorting,

"cnt", maxFlightCount,

"minPause", minPause,

"minCost", minCost,

"maxCost", maxCost,

"maxDur", maxDuration,

"date", date);
Данный метод возвращает объект StatementResult. Вызвав метод list() данного класса, можно получить список записей (Record), возвращенных данным запросом. Напишем функцию-трансформер для преобразования объектов Record в объекты Route.

@Component

@Scope("singleton")

public class RouteTransformer implements Function {

@Autowired

private FlightTransformer flightTransformer;

@Override

public Route apply(Record record) {

Route route = new Route();

route.setTotalCost(record.get("cost").asInt());

route.setTotalDuration(record.get("duration").asInt());

record.get("route").asPath().forEach(segment ->

route.getFlights().add(flightTransformer.apply(segment)));

return route;

}

}
Разработанный запрос возвращает три объекта: cost, duration и route. Типы объектов cost и duration - простые и содержат в себе числовые значения, однако route представляет собой объект класса Path(Путь), хранящий в себе список сегментов (Segment), которые в нашем случае представляют собой ни что иное, как авиарейсы. Напишем ещё одну функцию-трансформер для преобразования объектов Segment в объекты Flight:
@Component

@Scope("singleton")

public class FlightTransformer implements Function
{


@Autowired

private AirportTransformer airportTransformer;

@Override

public Flight apply(Path.Segment segment) {

Flight flight = new Flight();

flight.setDeparture(airportTransformer.apply(segment.start()));

flight.setArrival(airportTransformer.apply(segment.end()));

Relationship relationship = segment.relationship();

flight.setCost(relationship.get("cost").asInt());

flight.setDuration(relationship.get("duration").asInt());

flight.setDepartureDate(new Date(relationship.get("departureDate").asLong()));

flight.setArrivalDate(new Date(relationship.get("arrivalDate").asLong()));

return flight;

}

}
Каждый сегмент хранит в себе ссылки на две вершины (Node) - начальную и конечную. Получить доступ к этим вершинам можно, соответственно вызвав метод start() или end() у объекта-сегмента. Данные вершины в нашем случае представляют собой аэропорты вылета и прилета. Напишем заключающую функцию-трансформер для преобразования объектов Node в объекты Airport:


@Component

@Scope("singleton")

public class AirportTransformer implements Function {

@Override

public Airport apply(Node node) {

Airport airport = new Airport();

airport.setCode(node.get("code").asString());

airport.setName(node.get("name").asString());

return airport;

}

}
Таким образом, разработан необходимый набор классов для осуществления поиска авиарейсов и последующей трансформации результатов. Программный код данных классов полностью представлен в приложении № 1.

1   2   3   4   5   6   7   8

Похожие:

Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Казанский (приволжский) федеральный университет высшая школа информационных технологий и
Автоматизация построения интерактивной 3D-карты «Паспорт безопасности» в образовательных учреждениях
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Казанский (приволжский) федеральный университет высшая школа информационных технологий и
Разработка мобильного клиента на ос андроид для системы предсказания характеристик химических веществ и реакций
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Казанский (приволжский) федеральный университет высшая школа информационных технологий и
С каждым годом появляется огромное количество разнообразного нового функционала для мобильных устройств, которые сегодня во много...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Казанский (приволжский) федеральный университет высшая школа информационных технологий и
Деркачев Н. В., Деркачев В. И., Быльев Ю. В., Медведева А. Н., Афанасьев Р. В. Расчет зон разрушений зданий и сооружений при взрывах...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Казанский (приволжский) федеральный университет высшая школа информационных технологий и
Казани побывало 2 миллиона туристов [2]. Численность туристов будет продолжать расти, так как уже летом 2018 года Казань примет 21-ый...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Казанский (приволжский) федеральный университет высшая школа информационных технологий и
Примерами таких компаний являются интернет магазины; предприятия, в которых есть специальный системы, работающие в режиме реального...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Национальный исследовательский университет "Высшая школа экономики"...
Разработка предметно-ориентированного языка описания структуры и содержания электронных документов
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Фгаоувпо «казанский (приволжский) федеральный университет» утверждаю...
Вопросы экзамена по специальности 12. 00. 08 – Уголовное право и криминология; уголовно-исполнительное право
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Уважаемые абитуриенты, планирующие поступать в кфу в 2017 году! Спасибо,...
Казанский (Приволжский) Федеральный Университет – один из лучших классических университетов России
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Правила внутреннего распорядка общежитий Общие положения
Правила) федерального государственного автономного образовательного учреждения высшего профессионального образования «Казанский (Приволжский)...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Руководство пользователя электронной торговой площадки федерального...
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon О центре информационных технологий
Центр информационных технологий (далее — цит) является структурным подразделением федерального государственного бюджетного образовательного...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Учебно-методическое пособие к лабораторным занятиям по курсу «Основы кристаллооптики»
Практическое руководство по работе с поляризационным микроскопом для исследования петрографических объектов: Учебно-методическое...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Отчет о самообследовании программы высшего образования по направлению...
«микробиология», специализация «микробиология» и «молекулярная биология», реализуемого в федеральном государственном образовательном...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Отчет о самообследовании программы подготовки специалистов среднего...
«Автоматизация технологических процессов и производств (в строительстве)», реализуемой в федеральном государственном образовательном...
Казанский (приволжский) федеральный университет высшая школа информационных технологий и icon Отчет о самообследовании программы подготовки специалистов среднего...
«Автоматизация технологических процессов и производств (в машиностроении)», реализуемой в федеральном государственном образовательном...

Руководство, инструкция по применению






При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск