>
在本教程中,我们将分别扩展有关Neo4J和PHP的两个介绍文章使用的演示应用程序:
>
>使用neo4j和php发现图形数据库的PHP应用程序中
>
>您会发现一种特定的建模技术,称为链接列表和一些带有Cypher的高级查询。>
在图数据库中对时间轴建模习惯其他数据库建模技术的人倾向于将每个帖子与用户联系起来。帖子将具有时间戳属性,并且将对此属性进行帖子的顺序。
这是一个简单的表示:
>>这样的模型会毫无问题地工作,但有些不利:
>用于用户供稿的通用建模技术称为链接列表。在我们的应用程序中,用户节点将与用户创建的最后一篇文章具有名为
> prest_post的关系,该帖子在上一个上一篇文章等上也具有a preast_post等等。 >使用此模型,您可以立即访问用户的最新帖子。实际上,您甚至根本不需要时间戳来检索其时间表(但是我们会保留它,以便对不同用户进行分类)。
>更重要的是,用户在图形数据库中以自然方式建模的用户所做的事情。能够以与该数据在数据库之外的方式相对应的方式存储数据是分析,查找和理解您的数据的真正好处。
初始设置
我建议您下载用于简介文章的存储库,并将其重命名为社交台式,例如:
>与上一篇文章一样,我们将在GraphGen的帮助下加载数据库。
如果使用Neo4J 2.2,则需要在GraphGen Populator框中提供Neo4J用户名和密码:
><span>git clone git@github.com:sitepoint-editors/social-network </span><span>mv social-network social-timeline </span> <span>cd social-timeline </span><span>rm -rf .git </span><span>composer install </span>bower <span>install</span>
>这将以登录名,名字和姓氏为例导入50个用户。每个用户将有两个博客文章,一个与用户有last_post关系,另一个与其他feed具有以前的_post关系。
>如果您现在打开Neo4J浏览器,则可以查看用户和帖子的建模:
显示用户feed
该应用程序已经具有一组控制器和模板。您可以通过单击一个用户来选择一个用户,它将显示他们的关注者和一些人的建议。
用户馈送路线
首先,我们将添加一条路由以显示特定用户的提要。将此代码的一部分添加到Web/index.php文件的末尾
<span>git clone git@github.com:sitepoint-editors/social-network </span><span>mv social-network social-timeline </span> <span>cd social-timeline </span><span>rm -rf .git </span><span>composer install </span>bower <span>install</span>
我们将在src/controller/webcontroller.php文件中将路由映射到操作。 在此操作中,我们将从NEO4J数据库中获取给定用户的feed,并将它们与用户节点一起传递到模板。
一些解释:
<span>$app->get('/users/{user_login}/posts', 'Ikwattro\SocialNetwork\Controller\WebController::showUserPosts') </span> <span>->bind('user_post');</span>
我们首先以用户的登录名与用户匹配。
然后,我们将用户的最后一个供稿匹配,然后扩展到上一个_feed(使用 *0..2关系深度的使用将有效嵌入最新的_post节点在邮政节点集合中),我们将最大深度限制为2.如果您现在选择一个用户,然后单击
<span>public function showUserPosts(Application $application, Request $request) </span> <span>{ </span> <span>$login = $request->get('user_login'); </span> <span>$neo = $application['neo']; </span> <span>$query = 'MATCH (user:User) WHERE user.login = {login} </span><span> MATCH (user)-[:LAST_POST]->(latest_post)-[PREVIOUS_POST*0..2]->(post) </span><span> RETURN user, collect(post) as posts'; </span> <span>$params = ['login' => $login]; </span> <span>$result = $neo->sendCypherQuery($query, $params)->getResult(); </span> <span>if (null === $result->get('user')) { </span> <span>$application->abort(404, 'The user $login was not found'); </span> <span>} </span> <span>$posts = $result->get('posts'); </span> <span>return $application['twig']->render('show_user_posts.html.twig', array( </span> <span>'user' => $result->getSingle('user'), </span> <span>'posts' => $posts, </span> <span>)); </span> <span>}</span>显示用户帖子
链接,您可以看到我们的帖子通过下降时间很好地显示和订购,而无需指定日期属性。
<span><span><span><p</span>></span><span><span><a</span> href<span>="{{ path('user_post', {user_login: user.property('login') }) }}"</span>></span>Show posts<span><span></a</span>></span><span><span></p</span>></span></span>
显示时间表
如果您已使用GraphGen导入示例数据集,则您的每个用户都会关注大约40个其他用户。>要显示一个用户时间表,您需要获取他关注的所有用户,并将查询扩展到每个用户的last_post关系。
该过程与上一个过程相同 - 我们将路由添加到index.php,创建控制器操作,我们在用户配置文件模板中的时间表中添加链接,并创建我们的用户时间表模板。
>将路由添加到Web/index.php文件
控制器动作:
>
首先,我们匹配我们的用户。
然后,我们匹配此用户,他关注的其他用户和他们的最后一个feed之间的路径(请参阅此处的Cypher如何真正表达您要检索的内容)。{% extends "layout.html.twig" %} {% block content %} <span><span><span><h1</span>></span>Posts for {{ user.property('login') }}<span><span></h1</span>></span> </span> {% for post in posts %} <span><span><span><div</span> class<span>="row"</span>></span> </span> <span><span><span><h4</span>></span>{{ post.properties.title }}<span><span></h4</span>></span> </span> <span><span><span><div</span>></span>{{ post.properties.body }}<span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><hr</span>/></span> </span> {% endfor %} {% endblock %}>
我们通过其时间戳订购供稿。
<span>$app->get('/user_timeline/{user_login}', 'Ikwattro\SocialNetwork\Controller\WebController::showUserTimeline') </span> <span>->bind('user_timeline');</span>我们返回包含作者和供稿的收藏中的提要。
我们将结果限制在20个供稿中。
为了将帖子添加到链接列表中,Cypher查询更为
>像往常一样,我们将为指向WebController操作的表单创建邮图:
接下来,我们将添加一个基本的HTML表单,用于在用户模板中插入帖子标题和文本
<span>git clone git@github.com:sitepoint-editors/social-network </span><span>mv social-network social-timeline </span> <span>cd social-timeline </span><span>rm -rf .git </span><span>composer install </span>bower <span>install</span>
>最后,我们创建了我们的newPost动作:
<span>$app->get('/users/{user_login}/posts', 'Ikwattro\SocialNetwork\Controller\WebController::showUserPosts') </span> <span>->bind('user_post');</span>
一些解释:
<span>public function showUserPosts(Application $application, Request $request) </span> <span>{ </span> <span>$login = $request->get('user_login'); </span> <span>$neo = $application['neo']; </span> <span>$query = 'MATCH (user:User) WHERE user.login = {login} </span><span> MATCH (user)-[:LAST_POST]->(latest_post)-[PREVIOUS_POST*0..2]->(post) </span><span> RETURN user, collect(post) as posts'; </span> <span>$params = ['login' => $login]; </span> <span>$result = $neo->sendCypherQuery($query, $params)->getResult(); </span> <span>if (null === $result->get('user')) { </span> <span>$application->abort(404, 'The user $login was not found'); </span> <span>} </span> <span>$posts = $result->get('posts'); </span> <span>return $application['twig']->render('show_user_posts.html.twig', array( </span> <span>'user' => $result->getSingle('user'), </span> <span>'posts' => $posts, </span> <span>)); </span> <span>}</span>
我们首先匹配用户,然后我们选择匹配他的last_post节点。 >现实世界的时间表比我们在这里看到的要复杂得多,但我希望很明显,像neo4j这样的图形数据库确实是此类应用程序的最佳选择。
在PHP应用中有效的用户时间表
> > >迁移现有的PHP应用程序使用NEO4J涉及多个步骤。首先,您需要将数据建模为图形并将其导入Neo4J。然后,您需要更新应用程序代码,以将NEO4J的PHP驱动程序用于数据库操作。最后,您需要彻底测试您的应用程序,以确保其与Neo4J合作正常。>
在本文中,我们发现了一种称为链接列表的建模技术,学习了如何在社交应用程序中实现它以及如何以有效的方式检索节点和关系。我们还学会了一些新的Cypher子句,例如Skip和Limit,可用于分页。
>如何使用各种工具(例如Konograph)在neo4j?
中可视化时间表数据。该工具使您可以创建交互式,动态和视觉吸引力的时间表。您可以自定义时间表以适应您的需求,添加活动,甚至将其链接到其他事件。这使得了解数据中的关系和模式变得更加容易。
>>如何使用neo4j分析Twitter数据?
neo4j可以通过创建视觉时间表来分析Twitter数据。这涉及从Twitter提取数据,将其导入Neo4J,然后使用Cypher查询来分析数据。视觉时间表可以帮助揭示数据中的模式和趋势,例如特定用户的活动或特定主题标签的传播。>
>如何表示Neo4j中的时间表事件? NEO4J中的时间轴事件可以表示为节点和关系。每个事件都是一个节点,它们之间的关系代表事件的序列。您可以在节点和关系上使用属性来存储有关事件的其他信息,例如它们发生的时间或持续时间。>如何迁移我现有的PHP应用程序以使用neo4j?
以上是使用neo4j的PHP应用程序中有效的用户时间表的详细内容。更多信息请关注PHP中文网其他相关文章!