Позвольте мне объяснить, что я хочу, чтобы моделировать с помощью Neo4j (v2)дизайн Neo4j граф базы данных и эффективный запрос
Пусть предполагать п-мерный массив данных о форме:
val1Dim1, ... , val1Dimn, classValue1
val2Dim2, ... , val2Dimn, classValue2
....
Каждое измерение имеет иерархию (скажем, дерево). Общее количество «узлов измерения» составляет около 1 Кб или немного выше в зависимости от набора данных.
Подход данных (link to the scientific paper) запущен над набором данных, и огромное количество шаблонов извлекается из набора данных.
В принципе, каждый шаблон на форме:
{a set of value of Dim1} {a set of value of Dim2} ... {a set of class values}
Существуют, по крайней мере, около 11M добывали узоры.
Мой выбор дизайн
2 типа узлов (метки):
DATA (например val1Dim1 является узлом DATA) => около 1К узлов. Эти узлы имеют три свойства: LABEL (само значение), идентификатор размера, DIMENSION и встроенное свойство KEY, которое является «DIMENSION_LABEL». Индекс был определен в KEY.
ОБРАЗЕЦ (по одному на каждый шаблон) => по крайней мере узлов 11M
2 типа отношений:
ЯВЛЯЕТСЯ для представления связи обобщения/специализации для навигации по иерархии
COMPOSED_BY, чтобы связать шаблон с каждым его членом (например, если P = {val1dim1, val2Dim1} {val1Dim2} - это шаблон, то 3 ссылки т. е. P-> va11Dim1, P-> val2Dim1 и val1Dim1.
Вот это игрушка graphDb, чтобы сделать свой выбор дизайна ясно
вставки данных и спецификации
Я использовал партии вставки и ее работы довольно быстро (около 40 минут). Размер БД составляет около 50 ГБ и состоит из 11М узлов и 1В (!!) отношений. На данный момент я запускаю код на своей машине (8 ГБ оперативной памяти, Intel i7 и 500 ГБ SSD HD). Я использую Java.
То, что я хотел бы сделать
Учитывая значение каждого измерения, я хотел бы знать, какие модели такие, что все значения размеров участвуют в шаблоне.
В настоящее время, при условии, 2 размеров запроса я использую для достижения своей цели является:
match (n:DATA {KEY:'X'})-[r:COMPOSED_BY]-(p:PATTERN)-[r2:COMPOSED_BY]-(m:DATA {KEY:'Y'})
return p;
В настоящем время, это очень-очень медленно ... И использование памяти процесса Java 2 Гб (максимум)
Мои вопросы
- как вы думаете, graphDb присваивается для такого сценария?
- Являются ли мои варианты дизайна хорошо?
- Как насчет индексов? Должен ли я определить еще немного?
- Можно ли запросить db в порядке?
- Есть ли какие-то настройки для ускорения фазы запроса?
- Каковы будут характеристики сервера, которые удовлетворяют моим приложениям?
Заранее спасибо
Йоанна
Вы можете разместить фиктивную схему вашего графика, так что я могу представить себе лучшую модель, прежде чем положить в комментариях? –
@SumeetSharma Я отредактировал мое сообщение. Благодарю. –