У меня есть сценарий использования, когда мне нужно классифицировать траектории людей в большой комнате.
С точки зрения производительности и лучших практик Neo4j, какой вариант будет лучше, если я хочу классифицировать эти данные, чтобы потом возможность поиска / выборки, используя любую комбинацию типов этих классификаций?
Различные классификации:
- Пол (FEMALE, MALE)
- PersonType (STAFF, CUSTOMER )
- AgeGroup (11-20, 21-30, 31-40 и др. c)
Траектория содержит набор точек (time, x, y, motion_type ) это в основном говорит, куда человек пошел. Точка говорит вам точное местоположение человека в комнате в данный момент времени, и если это было жилье, ходьба или бег (это тип движения).
Например, получить все траектории, которые были ЖЕНЩИНОЙ, ЗАКАЗЧИКОМ с возрастом от 21 до 30
Вариант 1:
// Here I get the set of trajectories that fall within a certain time range (:Trajectory(at) is indexed)
MATCH (trajectory:Trajectory)
WHERE datetime("2020-01-01T00:00:00.000000+13:00") <= trajectory.at < datetime("2020-01-11T00:00:00.000000+13:00")
// Once I have all the trajectories I start filtering by the different criteria
MATCH (trajectory)-[:GENDER]->(:Female)
MATCH (trajectory)-[:PERSON_TYPE]->(:Customer)
// AgeGroup could have quite a lot of groups depending on how accurate the data is. At this stage we have 8 groups.
// Knowing that we have 8 groups, should I filter by property or should I have 8 different labels, one per age group? Is there any other option?
MATCH (trajectory)-[:AGE]->(age:AgeGroup)
WHERE age.group = "21-30"
RETURN COUNT(trajectory)
Вариант 2:
Узел траектории будет иметь вид доступно множество суб-меток в качестве категорий. Например, если я хочу получить тот же результат, что и в варианте 1, я сделаю что-то вроде:
MATCH (trajectory:Trajectory:Female:Customer)
WHERE datetime("2020-01-01T00:00:00.000000+13:00") <= trajectory.at < datetime("2020-01-11T00:00:00.000000+13:00")
MATCH (trajectory)-[:AGE]->(age:AgeGroup)
WHERE age.group = "21-30"
RETURN COUNT(trajectory)
// Or assuming I have a label per each age group:
MATCH (trajectory:Trajectory:Female:Customer:Age21-30)
WHERE datetime("2020-01-01T00:00:00.000000+13:00") <= trajectory.at < datetime("2020-01-11T00:00:00.000000+13:00")
RETURN COUNT(trajectory)
Поэтому я хочу знать:
- Как справиться с возрастом группы, если они представляют собой отдельные свойства, как разные метки или если есть лучший вариант.
- Как обрабатывать различные категории траектории: как метки или как отношения, указывающие на метку с информацией.
Как примечание, не каждая траектория будет иметь каждую категорию. Например, если наша система распознавания лиц не может определить, является ли человек женщиной или мужчиной, эта категория не будет существовать для этой конкретной траектории.