Neo4j: свойство узла против узла - PullRequest
0 голосов
/ 17 сентября 2018

Я занимаюсь разработкой базы данных Neo4j, которая будет содержать геномные и клинические данные для онкологических больных.Общей проблемой проектирования при разработке графовых баз данных является то, должен ли элемент данных представляться узлом или свойством в узле.В моем случае пациенты будут иметь сотни клинических и демографических измерений (например, пол, лекарства, размер опухоли).Некоторые из этих данных будут постоянными (например, пол), в то время как другие будут меняться с каждым посещением пациента.Ответы, которые я видел на предыдущие вопросы о свойствах узлов и свойств, рекомендовали использовать ожидаемые запросы к данным для принятия решения.Я думаю, что могу определить некоторые свойства, которые будут общими критериями поиска и должны быть узлами (например, история курения, пол, тип рака), но это все еще оставляет мне сотни других свойств.Есть ли практический предел в Neo4j для количества свойств, которые должен содержать Node?Кроме того, гибридный подход, при котором некоторые данные являются свойствами, а другие - узлами, может усложнить загрузку данных из исходных файлов и последующие запросы.

1 Ответ

0 голосов
/ 17 сентября 2018

Основная идея «взгляните на ваши запросы, чтобы решить», заключается в том, что то, как данные связаны друг с другом, влияет на то, лучше ли узел или свойство.Действительно, основная задача графовой базы данных состоит в том, чтобы упростить запрос при ходьбе.Таким образом, реальный вопрос, который вы должны задать себе: «Имеет ли (а) -> () <- (б) какое-либо существенное значение?»Другими словами, нужно ли мне иметь возможность находить другие узлы, которые разделяют это свойство? </p>

Вот несколько быстрых практических рекомендаций

Узел

  • Имеет свои собственные подчиненные значения или отношения
  • Несколько узлов, совместно использующих это значение, имеют смысл, и вы должны иметь возможность пройти по этому общему значению между ними
  • Изменениянечасто
  • Если одновременно может применяться более 1 значения

Свойства

  • Имеет большой диапазон возможных значений
  • Изменения во времени
  • Если может применяться более 1 значения, значения обычно обновляются как набор (а не по отдельности)

Метка

  • Имеет небольшой конечный диапазон взаимоисключающих значений
  • Почти никогда не меняется

Итак, давайте рассмотрим процесс мышления нескольких вашихсвойства ...

Секс

Будут или "мужчина" или "женщина", и каждыйбудет подключен к одному из двух, так что оба они станут супер узлами (перегруженными).Кроме того, если вам в конечном итоге понадобится найти двух людей одного пола, почти любой другой метод будет более эффективным, чем поиск их через суперузел.Однако это взаимоисключающие, неизменные, генетические признаки, поэтому сделать этот ярлык также вполне приемлемым (а иногда и предпочтительным).

Адрес

Это переменное значение спод-свойства не будут разделены очень многими узлами, и переход от одного человека к другому по одному и тому же адресу (или, как следствие, проживание в области) имеет ценное значение.Таким образом, это почти наверняка должен быть узел.

Рост и вес

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

Тип крови

Хотя у него больше параметров, чем у Пола, применяется та же логика, за исключением того, что отношение имеет значение сейчас (потому что люди должны разделить группу крови, чтобы пожертвовать).Проблема в том, что это значение будет настолько перегружено, что вам нужно будет сначала выполнить фильтрацию по области, а не просто проверить группу крови.Может быть свойство или метка.Случай для узла, если вы включаете отношение «Can_Donate_To» или «Can_Accept» между типами крови.Хотя вы, скорее всего, не пройдете эти отношения, чтобы найти потенциального донора (поскольку они слишком перегружены, и вам придется сначала отфильтровать по области), вы можете использовать их, чтобы убедиться, что кто-то может быть донором.

Номер социального страхования

Очень чувствителен, и ожидается судебный процесс.Хранить в БД, если это вообще возможно.Если вам абсолютно необходимо;это свойство является неизменным, но оно будет уникальным для каждого человека, поэтому из-за отсутствия повторного использования является плохим ярлыком и будет бессмысленным как узел.Определенно собственность.(Но должен быть засолен + хеширован, если только для целей проверки)

Девичья фамилия матери

Возможные значения бесконечны, и два узла, совместно использующие это значение, не имеют реальногоимея в виду.Определенно, это свойство.

Перворожденный ребенок

Поскольку дочерний элемент уже является собственным узлом со своими собственными подчиненными свойствами, просто создайте связь между ними.Хотя ценность этой информации сомнительна, в любое время, когда вам нужно сослаться на другой узел, всегда используйте для него связь.Определенно узел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...