>
在本教程中,我們將分別擴展有關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具有以前的關係。
>如果您現在打開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中文網其他相關文章!