亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
鑰匙要點
用戶饋送控制器和Cypher查詢
用戶時間軸路由
>在時間軸上添加帖子
中可視化時間表數(shù)據(jù)。該工具使您可以創(chuàng)建交互式,動態(tài)和視覺吸引力的時間表。您可以自定義時間表以適應您的需求,添加活動,甚至將其鏈接到其他事件。這使得了解數(shù)據(jù)中的關系和模式變得更加容易。
>如何使用neo4j分析Twitter數(shù)據(jù)?
>
>如何遷移我現(xiàn)有的PHP應用程序以使用neo4j?
首頁 后端開發(fā) php教程 使用neo4j的PHP應用程序中有效的用戶時間表

使用neo4j的PHP應用程序中有效的用戶時間表

Feb 18, 2025 am 09:50 AM

使用neo4j的PHP應用程序中有效的用戶時間表

鑰匙要點

    由于查詢和性能影響的復雜性,使用常見的SQL或NOSQL數(shù)據(jù)庫實施用戶時間表可能會具有挑戰(zhàn)性。圖形數(shù)據(jù)庫,例如Neo4J,可以消除這些問題。
  • >
  • 圖形數(shù)據(jù)庫中用戶feed的通用建模技術是鏈接列表。這允許立即訪問用戶的最新帖子,而無需時間戳來檢索時間表。
  • >
  • >教程演示了如何擴展在Silex上構建的演示應用程序,以有效地對用戶進行建模。它涉及創(chuàng)建一條路由,以顯示特定用戶的提要,從Neo4J數(shù)據(jù)庫中獲取feed,并將它們與用戶節(jié)點一起傳遞到模板。。
  • 要顯示一個用戶時間表,需要獲取他/她關注的所有用戶,并將查詢擴展到每個用戶的last_post關系。然后,通過時間過濾這些帖子,以在用戶之間訂購它們。
  • >
  • >在時間表中添加帖子涉及創(chuàng)建帖子節(jié)點,將last_post關系從用戶刪除到舊的最新_post,在最后一個帖子節(jié)點和用戶之間創(chuàng)建新的關系,并在新舊的和舊的舊舊之間創(chuàng)建上一個_post的關系最后一個帖子節(jié)點。
  • >當今您遇到的任何社交應用程序都具有時間表,通常以降時間的時間順序顯示朋友或關注者的狀態(tài)。對于常見的SQL或NOSQL數(shù)據(jù)庫,實現(xiàn)此類功能從來都不是一件容易的事。
查詢的復雜性,績效的影響隨著朋友/追隨者的數(shù)量而增加,而難以發(fā)展您的社交模型是圖形數(shù)據(jù)庫消除的觀點。

> 在本教程中,我們將分別擴展有關Neo4J和PHP的兩個介紹文章使用的演示應用程序:

>

>使用neo4j和php

發(fā)現(xiàn)圖形數(shù)據(jù)庫
  • >將社交網(wǎng)絡功能添加到使用Neo4J

    的PHP應用程序中
  • 該應用程序是在Silex上構建的,并具有其他用戶的用戶。本文中的目標是有效地對feed的功能進行建模,以便檢索您遵循的人的最后兩個帖子并按時間訂購。

    >

    >您會發(fā)現(xiàn)一種特定的建模技術,稱為鏈接列表和一些帶有Cypher的高級查詢。
本文的源代碼可以在其自己的github存儲庫中找到。

>

在圖數(shù)據(jù)庫中對時間軸建模

習慣其他數(shù)據(jù)庫建模技術的人傾向于將每個帖子與用戶聯(lián)系起來。帖子將具有時間戳屬性,并且將對此屬性進行帖子的順序。>

這是一個簡單的表示:

>

>這樣的模型會毫無問題地工作,但有些不利:>
  • 對于每個用戶,您需要按時間訂購他的帖子才能獲取最后一個
  • 訂單操作將隨著您關注的帖子和用戶的數(shù)量線性增長
  • >它迫使數(shù)據(jù)庫執(zhí)行訂購的操作
利用圖數(shù)據(jù)庫的功能

圖數(shù)據(jù)庫中的一個節(jié)點包含對他所擁有的連接的引用,為圖形遍歷提供了快速的性能。

>用于用戶供稿的通用建模技術稱為鏈接列表。在我們的應用程序中,用戶節(jié)點將與用戶創(chuàng)建的最后一篇文章具有名為 last_post

的關系。這篇文章將與上一篇具有a

> prest_post的關系,該帖子在上一個上一篇文章等上也具有a preast_post等等。 >使用此模型,您可以立即訪問用戶的最新帖子。實際上,您甚至根本不需要時間戳來檢索其時間表(但是我們會保留它,以便對不同用戶進行分類)。

>更重要的是,用戶在圖形數(shù)據(jù)庫中以自然方式建模的用戶所做的事情。能夠以與該數(shù)據(jù)在數(shù)據(jù)庫之外的方式相對應的方式存儲數(shù)據(jù)是分析,查找和理解您的數(shù)據(jù)的真正好處。

使用neo4j的PHP應用程序中有效的用戶時間表初始設置

我建議您下載用于簡介文章的存儲庫,并將其重命名為社交臺式,例如:

>與上一篇文章一樣,我們將在GraphGen的幫助下加載數(shù)據(jù)庫。

。

>您需要擁有一個正在運行的數(shù)據(jù)庫(本地或遠程),轉到此鏈接,單擊“生成”,然后在“填充數(shù)據(jù)庫”上。>

如果使用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個用戶。每個用戶將有兩個博客文章,一個與用戶有l(wèi)ast_post關系,另一個與其他feed具有以前的_post關系。

>

如果您現(xiàn)在打開Neo4J瀏覽器,則可以查看用戶和帖子的建模:

使用neo4j的PHP應用程序中有效的用戶時間表

顯示用戶feed

該應用程序已經(jīng)具有一組控制器和模板。您可以通過單擊一個用戶來選擇一個用戶,它將顯示他們的關注者和一些人的建議。

用戶饋送路線

使用neo4j的PHP應用程序中有效的用戶時間表首先,我們將添加一條路由以顯示特定用戶的提要。將此代碼的一部分添加到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>

用戶饋送控制器和Cypher查詢

我們將在src/controller/webcontroller.php文件中將路由映射到操作。 在此操作中,我們將從NEO4J數(shù)據(jù)庫中獲取給定用戶的feed,并將它們與用戶節(jié)點一起傳遞到模板。

一些解釋:

<span>$app->get('/users/{user_login}/posts', 'Ikwattro\SocialNetwork\Controller\WebController::showUserPosts')
</span>    <span>->bind('user_post');</span>

我們首先以用戶的登錄名與用戶匹配。

然后,我們將用戶的最后一個供稿匹配,然后擴展到上一個_feed(使用 *0..2關系深度的使用將有效嵌入最新的_post節(jié)點在郵政節(jié)點集合中),我們將最大深度限制為2.
  • 我們返回在集合中找到的供稿。
  • >在模板中顯示feed
  • >我們將在用戶配置文件中首先添加鏈接以訪問其feed,只需在用戶信息塊的末尾添加此行:>

>現(xiàn)在,我們將創(chuàng)建模板顯示用戶時間軸(帖子)。我們設置了一個標題和一個循環(huán),以迭代我們的供稿集合,以在專用的HTML Div中顯示它們:

如果您現(xiàn)在選擇一個用戶,然后單擊
<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導入示例數(shù)據(jù)集,則您的每個用戶都會關注大約40個其他用戶。

>要顯示一個用戶時間表,您需要獲取他關注的所有用戶,并將查詢擴展到每個用戶的last_post關系。使用neo4j的PHP應用程序中有效的用戶時間表

>當您獲得所有這些帖子時,您需要按時間過濾它們,以在用戶之間訂購它們。

用戶時間軸路由

該過程與上一個過程相同 - 我們將路由添加到index.php,創(chuàng)建控制器操作,我們在用戶配置文件模板中的時間表中添加鏈接,并創(chuàng)建我們的用戶時間表模板。

>將路由添加到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個供稿中。

    在用戶feed鏈接之后,
  • 添加到用戶配置文件模板的鏈接:>
  • 并創(chuàng)建時間表模板:>
  • >我們現(xiàn)在有一個很酷的時間表,顯示了您關注的人的最后20個供稿,這對于數(shù)據(jù)庫很有效。

    使用neo4j的PHP應用程序中有效的用戶時間表

    >在時間軸上添加帖子

    為了將帖子添加到鏈接列表中,Cypher查詢更為 tricky 。您需要創(chuàng)建帖子節(jié)點,將last_post關系從用戶刪除到舊的最新_ post,在最后一個帖子節(jié)點和用戶之間創(chuàng)建新的關系,然后在新的和舊的最后一個帖子節(jié)點之間創(chuàng)建上一個_post的關系。 > 簡單,不是嗎?讓我們走!

    >像往常一樣,我們將為指向WebController操作的表單創(chuàng)建郵圖:

    接下來,我們將添加一個基本的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>

    >最后,我們創(chuàng)建了我們的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節(jié)點。>我們刪除用戶與他最近的最后一篇文章之間的關系。

      >
    • 我們創(chuàng)建了我們的新帖子(實際上是他在現(xiàn)實生活中的最后一篇文章)。
    • 我們創(chuàng)建用戶與他的“新”上一篇文章之間的關系。
    • 我們打破查詢并傳遞用戶,最后一篇文章和他舊的lestest_posts的集合。
    • 然后,我們在集合上迭代并在新的最后一篇文章和下一篇文章之間創(chuàng)建上一個_post的關系。
    • >
    • 在這里棘手的部分是,OldlatestPosts Collection將始終包含0或1個元素,這是我們查詢的理想選擇。
    • >
    • 結論
    在本文中,我們發(fā)現(xiàn)了一種稱為鏈接列表的建模技術,學習了如何在社交應用程序中實現(xiàn)它以及如何以有效的方式檢索節(jié)點和關系。我們還學會了一些新的Cypher子句,例如Skip和Limit,可用于分頁。

    >現(xiàn)實世界的時間表比我們在這里看到的要復雜得多,但我希望很明顯,像neo4j這樣的圖形數(shù)據(jù)庫確實是此類應用程序的最佳選擇。

    經(jīng)常詢問的問題(常見問題解答)關于使用NEO4J

    在PHP應用中有效的用戶時間表 使用neo4j的PHP應用程序中有效的用戶時間表>如何使用各種工具(例如Konograph)在neo4j?

    中可視化時間表數(shù)據(jù)。該工具使您可以創(chuàng)建交互式,動態(tài)和視覺吸引力的時間表。您可以自定義時間表以適應您的需求,添加活動,甚至將其鏈接到其他事件。這使得了解數(shù)據(jù)中的關系和模式變得更加容易。

    >

    >如何使用neo4j分析Twitter數(shù)據(jù)?

    neo4j可以通過創(chuàng)建視覺時間表來分析Twitter數(shù)據(jù)。這涉及從Twitter提取數(shù)據(jù),將其導入Neo4J,然后使用Cypher查詢來分析數(shù)據(jù)。視覺時間表可以幫助揭示數(shù)據(jù)中的模式和趨勢,例如特定用戶的活動或特定主題標簽的傳播。

    >

    >如何表示Neo4j中的時間表事件? NEO4J中的時間軸事件可以表示為節(jié)點和關系。每個事件都是一個節(jié)點,它們之間的關系代表事件的序列。您可以在節(jié)點和關系上使用屬性來存儲有關事件的其他信息,例如它們發(fā)生的時間或持續(xù)時間。

    >

    >

    neo4j支持哪些版本的PHP。廣泛的PHP版本。但是,始終建議使用最新的穩(wěn)定版本的PHP來獲得最佳性能和安全性。您可以查看官方PHP網(wǎng)站以獲取有關當前支持版本的信息。多年來,PHP是如何發(fā)展的?

    PHP自成立以來就已經(jīng)顯著發(fā)展。它最初是一種簡單的腳本語言,用于Web開發(fā),但已發(fā)展成為一種完整的編程語言,并支持面向對象的編程,功能編程等。每種新版本的PHP都會改善性能,安全性和功能。

    >如何使用neo4j??幾種策略。這些包括優(yōu)化您的Cypher查詢,使用索引來加快數(shù)據(jù)檢索并有效地管理數(shù)據(jù)庫連接。此外,您應該始終將最新版本的PHP和Neo4J用于最佳性能。

    >如何使用neo4j?

    >

    >使用NEO4J確保PHP應用程序涉及多個步驟。其中包括使用安全的數(shù)據(jù)庫連接,對用戶輸入進行消毒以防止注射攻擊以及實施適當?shù)腻e誤處理。此外,您應始終保持PHP和NEO4J軟件的最新狀態(tài),以從最新的安全補丁中受益。

    >我如何使用Neo4j?

    在我的PHP應用程序中處理錯誤使用NEO4J的PHP應用程序可以使用Try-Catch塊進行。這使您可以捕獲執(zhí)行代碼期間發(fā)生的任何例外,并適當處理它們。您還可以使用錯誤記錄來跟蹤發(fā)生的任何問題。

    >如何通過Neo4J?

    縮放我的PHP應用程序,可以通過各種策略來實現(xiàn)使用neo4j的PHP應用程序。其中包括使用Neo4J的群集功能在多個服務器上分配您的數(shù)據(jù),優(yōu)化數(shù)據(jù)庫模式和查詢以進行性能,并使用緩存來減少數(shù)據(jù)庫負載。

    >如何遷移我現(xiàn)有的PHP應用程序以使用neo4j?

    >遷移現(xiàn)有的PHP應用程序使用NEO4J涉及多個步驟。首先,您需要將數(shù)據(jù)建模為圖形并將其導入Neo4J。然后,您需要更新應用程序代碼,以將NEO4J的PHP驅動程序用于數(shù)據(jù)庫操作。最后,您需要徹底測試您的應用程序,以確保其與Neo4J合作正常。

以上是使用neo4j的PHP應用程序中有效的用戶時間表的詳細內容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

PHP變量范圍解釋了 PHP變量范圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數(shù)內部無法訪問全局變量,需使用global關鍵字或參數(shù)傳入;2.靜態(tài)變量用static聲明,只初始化一次并在多次調用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數(shù)需通過use關鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規(guī)則有助于避免錯誤并提升代碼穩(wěn)定性。

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗證來源與類型、控制文件名與路徑、設置服務器限制并二次處理媒體文件。1.驗證上傳來源通過token防止CSRF并通過finfo_file檢測真實MIME類型使用白名單控制;2.重命名文件為隨機字符串并根據(jù)檢測類型決定擴展名存儲至非Web目錄;3.PHP配置限制上傳大小及臨時目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評論代碼 在PHP中評論代碼 Jul 18, 2025 am 04:57 AM

PHP注釋代碼常用方法有三種:1.單行注釋用//或#屏蔽一行代碼,推薦使用//;2.多行注釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧注釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時需注意閉合符號和避免嵌套。

發(fā)電機如何在PHP中工作? 發(fā)電機如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP注釋的關鍵在于明確目的與規(guī)范,注釋應解釋“為什么”而非“做了什么”,避免冗余或過于簡單。1.使用統(tǒng)一格式,如docblock(/*/)用于類、方法說明,提升可讀性與工具兼容性;2.強調邏輯背后的原因,如說明為何需手動輸出JS跳轉;3.在復雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標記待辦事項與問題,便于后續(xù)追蹤與協(xié)作。好的注釋能降低溝通成本,提升代碼維護效率。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

如何通過php中的索引訪問字符串中的字符 如何通過php中的索引訪問字符串中的字符 Jul 12, 2025 am 03:15 AM

在PHP中獲取字符串特定索引字符可用方括號或花括號,但推薦方括號;索引從0開始,超出范圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結果;實際應用中循環(huán)訪問前應檢查字符串長度,動態(tài)字符串需驗證有效性,多語言項目建議統(tǒng)一使用多字節(jié)安全函數(shù)。

學習PHP:初學者指南 學習PHP:初學者指南 Jul 18, 2025 am 04:54 AM

易于效率,啟動啟動tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

See all articles