2014-01-31 3 views
0

Я использую neo4jphp для разработки веб-приложения форума, где несколько пользователей будут комментировать одну и ту же тему, а также могут комментировать комментарии (например, вложенные комментарии).Лучшая практика хранения данных в neo4j

Итак, что лучше всего хранить эти данные в neo4j?

Я думал о следующих вариантах:

  1. Создать новый узел для каждого комментария, к югу от комментариев и создать связи между темами и комментариями и подразделами комментариями

  2. Создать узел по каждой теме, каждый комментарий и создать связь между ними и добавить все комментарии как свойства к одному узлу комментария.

Я думаю, что 1-й вариант лучше, но я беспокоюсь о количестве узлов, которые будут созданы, поскольку количество тем и комментариев будет увеличиваться.

Неужели производительность neo4j ухудшается по мере увеличения количества узлов?

Следует ли создать отдельный узел для каждой записи/строки в sql?

Какая практика?

ответ

1

Я сделал свой блог на trartsaris.gr полностью с php и Neo4j 2.0. Сделав много тестов и задумавшись о будущем, я решил включить комментарии в первый способ, которым вы описываете. Это означает, что в конце вашего дизайна схемы вашей базы данных должен выглядеть следующим образом

(м: сообщение "или темы") - [: COMMENT] - (п: Комментарий) - [: SUB_COMMENT] - (с: SubComment)

Таким образом, у нас есть узел, который является сообщение или тема, и этот узел связан с узлами Label: Комментарий и отношения: Комментарий и эти замечания могут иметь вложенные комментарии с ярлыком: SUB_COMMENTS. Вам не нужно беспокоиться о количестве узлов, которые будут созданы, и о том, как они будут получены, поскольку все будет достаточно быстро. Вы можете немного прочитать мой ответ по телефону this question. Давайте посмотрим, почему я предпочитаю первый путь, и я думаю о будущих потенциальных случаях использования. Вы можете иметь более позднюю версию примерно так: Я являюсь пользователем, который прокомментировал комментарий к теме другого пользователя. Основываясь на этом действии, я могу выполнить поиск в моей базе данных для связанных тем этим пользователем и внести предложения для дальнейшего чтения.

MATCH (n:User(ID))-[:WROTE_SUB_COMMENT]-(s:SubComment)-[:SUB_COMMENT]-(c:Comment)-[:COMMENT]-(p:Post)-[:WRITTEN_BY]-(k:User)-[:WRITTEN_BY]-(g:Post) WHERE blablabla RETURN g 

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

+0

Хорошо. Большое спасибо. Я попробую это. – user2725064

Смежные вопросы