


- Melaksanakan garis masa pengguna untuk aplikasi sosial boleh mencabar dengan pangkalan data SQL atau NoSQL biasa kerana kerumitan pertanyaan dan kesan prestasi. Pangkalan data graf, seperti NEO4J, boleh menghapuskan isu -isu ini.
- Teknik pemodelan biasa untuk suapan pengguna dalam pangkalan data graf adalah senarai yang dipautkan. Ini membolehkan akses segera ke jawatan terkini pengguna, tanpa memerlukan cap waktu untuk mengambil garis masa.
- Tutorial menunjukkan bagaimana untuk memperluaskan aplikasi demo yang dibina di atas Silex untuk memodelkan suapan pengguna dengan cekap. Ia melibatkan membuat laluan untuk memaparkan suapan pengguna tertentu, mengambil suapan dari pangkalan data NEO4J, dan lulus mereka ke templat bersama dengan nod pengguna.
- Untuk memaparkan garis masa pengguna, seseorang perlu mengambil semua pengguna yang dia ikuti dan mengembangkan pertanyaan kepada hubungan last_post dari setiap pengguna. Siaran kemudian ditapis oleh masa untuk memerintahkan mereka di antara pengguna.
- Menambah jawatan ke garis masa melibatkan membuat nod pos, menghapuskan hubungan last_post dari pengguna ke Latest_post lama, mewujudkan hubungan baru antara node post terakhir dan pengguna, dan mewujudkan hubungan sebelumnya_post antara yang baru dan lama Node Post Last.
Kerumitan pertanyaan, kesan prestasi meningkat dengan bilangan rakan/pengikut dan kesukaran untuk mengembangkan model sosial anda adalah titik yang data grafik menghapuskan.
Dalam tutorial ini, kami akan melanjutkan aplikasi demo yang digunakan oleh dua artikel pengenalan mengenai Neo4J dan PHP, masing -masing:
- Cari pangkalan data graf dengan neo4j dan php
- Menambah ciri rangkaian sosial ke aplikasi PHP dengan Neo4j
Anda akan menemui teknik pemodelan tertentu yang dipanggil senarai yang dipautkan dan beberapa pertanyaan lanjutan dengan cypher.
Kod sumber untuk artikel ini boleh didapati dalam repositori GitHub sendiri.
memodelkan garis masa dalam pangkalan data graf
Orang yang digunakan untuk teknik pemodelan pangkalan data lain cenderung mengaitkan setiap jawatan kepada pengguna. Jawatan akan mempunyai harta cap waktu dan perintah jawatan akan dilakukan terhadap harta ini.
Berikut adalah perwakilan yang mudah:
Walaupun model sedemikian akan berfungsi tanpa sebarang masalah, terdapat beberapa kelemahan kepadanya:
- Bagi setiap pengguna, anda perlu memesan jawatannya mengikut masa untuk mendapatkan yang terakhir
- Operasi pesanan akan berkembang secara linear dengan jumlah jawatan dan pengguna yang anda ikuti
- ia memaksa pangkalan data untuk melaksanakan operasi untuk pesanan
memanfaatkan kuasa pangkalan data graf
Node dalam pangkalan data graf memegang rujukan kepada sambungan yang dia ada, menyediakan prestasi cepat untuk traversals graf.
Teknik pemodelan biasa untuk suapan pengguna dipanggil senarai yang dipautkan. Dalam aplikasi kami, nod pengguna akan mempunyai hubungan yang dinamakan last_post ke jawatan terakhir yang dibuat oleh pengguna. Catatan ini akan mempunyai hubungan sebelumnya_post dengan yang sebelumnya yang juga mempunyai sebelumnya_post ke jawatan terdahulu kedua dan lain -lain ...
Lebih penting lagi, apa yang pengguna lakukan dalam masa dimodelkan secara semulajadi dalam pangkalan data graf. Mampu menyimpan data dengan cara yang sepadan dengan bagaimana data ini tinggal di luar pangkalan data adalah manfaat sebenar untuk analisis, mencari dan memahami data anda.
Persediaan Awal
Saya cadangkan anda memuat turun repositori yang digunakan untuk artikel pengenalan dan menamakannya semula kepada masa sosial sebagai contoh:
<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>Seperti dalam artikel sebelumnya, kami akan memuatkan pangkalan data dengan dataset dummy yang dihasilkan dengan bantuan Graphgen.
Anda perlu mempunyai pangkalan data yang sedang berjalan (tempatan atau jauh), pergi ke pautan ini, klik pada Generate dan kemudian pada "Populasi pangkalan data anda".
Jika anda menggunakan NEO4J 2.2, anda perlu menyediakan nama pengguna NEO4J dan kata laluan anda dalam kotak populator Graphgen:
Ini akan mengimport 50 pengguna dengan log masuk, nama pertama dan nama belakang. Setiap pengguna akan mempunyai dua catatan blog, satu dengan hubungan last_post dengan pengguna dan satu dengan hubungan sebelumnya_post dengan suapan yang lain.
Jika anda kini membuka penyemak imbas NEO4J, anda dapat melihat bagaimana pengguna dan jawatan dimodelkan:
memaparkan suapan pengguna
Laluan suapan pengguna
Pertama, kami akan menambah laluan untuk memaparkan suapan pengguna tertentu. Tambahkan bahagian kod ini ke hujung fail 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>
Pengawal suapan pengguna dan pertanyaan cypher
kami akan memetakan laluan ke tindakan dalam fail SRC/CONTROLLER/WEBCONTROLLER.PHP.
Dalam tindakan ini, kami akan mengambil suapan pengguna yang diberikan dari pangkalan data NEO4J dan lulus mereka ke templat bersama dengan nod pengguna.
<span>$app->get('/users/{user_login}/posts', 'Ikwattro\SocialNetwork\Controller\WebController::showUserPosts') </span> <span>->bind('user_post');</span>
beberapa penjelasan:
- kita mula -mula sepadan dengan pengguna dengan nama loginnya.
- kami kemudian sepadan dengan suapan terakhir pengguna dan berkembang ke sebelumnya_feed (penggunaan kedalaman hubungan *0..2 akan berkuat kuasa untuk membenamkan nod terbaru_post di dalam koleksi nod pos) dan kami mengehadkan kedalaman maksimum ke 2.
- kami mengembalikan suapan yang ditemui dalam koleksi.
kami terlebih dahulu akan menambah pautan dalam profil pengguna untuk mengakses suapan mereka, dengan hanya menambah baris ini selepas pada akhir blok maklumat pengguna:
<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>Kami kini akan membuat templat kami yang menunjukkan garis masa pengguna (jawatan). Kami menetapkan tajuk dan gelung yang melancarkan koleksi suapan kami untuk memaparkannya dalam div HTML yang berdedikasi:
<span><span><span><p>></p></span><span><span><a> href<span>="{{ path('user_post', {user_login: user.property('login') }) }}"</span>></a></span>Show posts<span><span></span>></span><span><span></span>></span></span></span></span>Jika anda kini memilih pengguna dan klik pada pautan
Pameran Pengguna , anda dapat melihat bahawa siaran kami dipaparkan dengan baik dan diperintahkan dengan menurun masa tanpa menentukan harta tarikh.
memaparkan garis masa
Untuk memaparkan garis masa pengguna, anda perlu mengambil semua pengguna yang dia ikuti dan mengembangkan pertanyaan ke hubungan last_post dari setiap pengguna.
Apabila anda mendapat semua siaran ini, anda perlu menapisnya dengan masa untuk memerintahkan mereka antara pengguna.
Laluan Garis Masa Pengguna
Proses ini adalah sama dengan yang sebelumnya - kami menambah laluan ke index.php, kami membuat tindakan pengawal kami, kami menambah pautan ke garis masa dalam templat profil pengguna dan kami membuat templat garis masa pengguna kami.
Tambahkan laluan ke fail web/index.php
Tindakan pengawal:
{% extends "layout.html.twig" %} {% block content %} <span><span><span><h1 id="gt">></h1></span>Posts for {{ user.property('login') }}<span><span></span>></span> </span> {% for post in posts %} <span><span><span><div> class<span>="row"</span>> <span><span><span><h4 id="gt">></h4></span>{{ post.properties.title }}<span><span></span>></span> </span> <span><span><span><div>>{{ post.properties.body }}<span><span></span></span> </div></span>></span> </span> <span><span><span></span></span></span></span> </div></span>></span> </span> <span><span><span><hr>/></span> </span> {% endfor %} {% endblock %}</span></span>
penjelasan mengenai pertanyaan:
<span>$app->get('/user_timeline/{user_login}', 'Ikwattro\SocialNetwork\Controller\WebController::showUserTimeline') </span> <span>->bind('user_timeline');</span>
pertama kita sepadan dengan pengguna kita.
- maka kita sepadan dengan jalan antara pengguna ini, pengguna lain yang dia ikuti dan suapan terakhir mereka (lihat di sini bagaimana Cypher benar -benar ekspresif tentang apa yang anda mahu ambil).
- kami memesan suapan dengan timestamp mereka.
- kami mengembalikan suapan dalam koleksi yang mengandungi pengarang dan suapan.
- Kami mengehadkan hasilnya kepada 20 suapan.
- tambahkan pautan ke templat profil pengguna, hanya selepas pautan suapan pengguna:
dan buat templat garis masa:
<span>public function showUserTimeline(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 = {user_login} </span><span> MATCH (user)-[:FOLLOWS]->(friend)-[:LAST_POST]->(latest_post)-[:PREVIOUS_POST*0..2]->(post) </span><span> WITH user, friend, post </span><span> ORDER BY post.timestamp DESC </span><span> SKIP 0 </span><span> LIMIT 20 </span><span> RETURN user, collect({friend: friend, post: post}) as timeline'; </span> <span>$params = ['user_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>$user = $result->getSingle('user'); </span> <span>$timeline = $result->get('timeline'); </span> <span>return $application['twig']->render('show_timeline.html.twig', array( </span> <span>'user' => $result->get('user'), </span> <span>'timeline' => $timeline, </span> <span>)); </span> <span>}</span>
kami kini mempunyai garis masa yang cukup sejuk yang menunjukkan 20 suapan terakhir orang yang anda ikuti yang cekap untuk pangkalan data.
Untuk menambah jawatan ke senarai yang dipautkan, pertanyaan cypher sedikit lebih
ricky . Anda perlu membuat nod pos, keluarkan hubungan last_post dari pengguna ke Latest_Post lama, buat hubungan baru antara node post yang terakhir dan pengguna dan akhirnya membuat hubungan sebelumnya_post antara node post yang baru dan lama.
mudah, bukan? Mari kita pergi!Seperti biasa, kami akan membuat laluan pos untuk borang yang menunjuk kepada tindakan WebController:
<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>Seterusnya, kami akan menambah borang HTML asas untuk memasukkan tajuk pos dan teks dalam templat pengguna:
<span>$app->get('/users/{user_login}/posts', 'Ikwattro\SocialNetwork\Controller\WebController::showUserPosts') </span> <span>->bind('user_post');</span>Dan akhirnya, kami membuat tindakan baru kami:
<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>beberapa penjelasan:
Kami mula -mula sepadan dengan pengguna, maka kami secara pilihan memadankan nod last_postnya.
- kami memadam hubungan antara pengguna dan jawatan terakhirnya yang paling baru.
- Kami mencipta jawatan baru kami (yang sebenarnya adalah jawatan terakhirnya dalam garis masa kehidupannya yang sebenar).
- Kami mewujudkan hubungan antara pengguna dan jawatan terakhirnya yang "baru".
- Kami memecahkan pertanyaan dan lulus pengguna, jawatan terakhir dan koleksi Latest_posts lama.
- Kami kemudian melangkah ke atas koleksi dan mencipta hubungan sebelumnya_post antara jawatan terakhir yang baru dan yang seterusnya.
- Bahagian yang rumit di sini, ialah koleksi OldLatestPosts akan selalu mengandungi 0 atau 1 elemen, yang sesuai untuk pertanyaan kami.
Kesimpulan
Walaupun garis masa dunia sebenar agak lebih kompleks daripada apa yang kita lihat di sini, saya harap ia jelas bagaimana pangkalan data grafik seperti NEO4J benar -benar adalah pilihan terbaik untuk jenis aplikasi ini.
Soalan Lazim (Soalan Lazim) Mengenai Garis Masa Pengguna yang cekap dalam Aplikasi PHP dengan Neo4J
Bagaimanakah saya dapat memvisualisasikan data garis masa saya di Neo4J? Alat ini membolehkan anda membuat garis masa interaktif, dinamik, dan visual yang menarik. Anda boleh menyesuaikan garis masa untuk memenuhi keperluan anda, menambah acara, dan juga menghubungkannya dengan acara lain. Ini memudahkan untuk memahami hubungan dan corak dalam data anda.
Bagaimana saya boleh menggunakan NEO4J untuk menganalisis data Twitter? Ini melibatkan pengekstrakan data dari Twitter, mengimportnya ke NEO4J, dan kemudian menggunakan pertanyaan cypher untuk menganalisis data. Garis masa visual dapat membantu mendedahkan corak dan trend dalam data, seperti aktiviti pengguna tertentu atau penyebaran hashtag tertentu. Peristiwa garis masa di NEO4J boleh diwakili sebagai nod dan hubungan. Setiap acara adalah nod, dan hubungan di antara mereka mewakili urutan peristiwa. Anda boleh menggunakan sifat pada nod dan hubungan untuk menyimpan maklumat tambahan mengenai peristiwa -peristiwa, seperti masa mereka berlaku atau tempohnya. Pelbagai versi PHP. Walau bagaimanapun, ia sentiasa disyorkan untuk menggunakan versi stabil PHP terkini untuk prestasi dan keselamatan terbaik. Anda boleh menyemak laman web PHP rasmi untuk maklumat mengenai versi yang disokong sekarang.
Bagaimana PHP berkembang selama bertahun -tahun? Ia bermula sebagai bahasa skrip mudah untuk pembangunan web tetapi telah berkembang menjadi bahasa pengaturcaraan penuh dengan sokongan untuk pengaturcaraan berorientasikan objek, pengaturcaraan berfungsi, dan banyak lagi. Setiap versi baru PHP membawa penambahbaikan prestasi, keselamatan, dan ciri -ciri. beberapa strategi. Ini termasuk mengoptimumkan pertanyaan cypher anda, menggunakan indeks untuk mempercepat pengambilan data, dan menguruskan sambungan pangkalan data anda dengan cekap. Di samping itu, anda harus sentiasa menggunakan versi terkini PHP dan NEO4J untuk prestasi terbaik. Ini termasuk menggunakan sambungan pangkalan data yang selamat, membersihkan input pengguna untuk mencegah serangan suntikan, dan melaksanakan pengendalian ralat yang betul. Di samping itu, anda harus sentiasa menyimpan perisian PHP dan Neo4J anda sehingga kini mendapat manfaat daripada patch keselamatan terkini. Aplikasi PHP dengan NEO4J boleh dilakukan dengan menggunakan blok percubaan. Ini membolehkan anda menangkap apa -apa pengecualian yang berlaku semasa pelaksanaan kod anda dan mengendalikannya dengan sewajarnya. Anda juga boleh menggunakan pembalakan ralat untuk menjejaki sebarang isu yang berlaku. Ini termasuk menggunakan ciri kluster NEO4J untuk mengedarkan data anda merentasi pelbagai pelayan, mengoptimumkan skema pangkalan data anda dan pertanyaan untuk prestasi, dan menggunakan caching untuk mengurangkan beban pangkalan data.
Bagaimana saya boleh memindahkan aplikasi PHP saya yang sedia ada untuk menggunakan Neo4J? Pertama, anda perlu memodelkan data anda sebagai graf dan mengimportnya ke NEO4J. Kemudian, anda perlu mengemas kini kod aplikasi anda untuk menggunakan pemacu PHP NEO4J untuk operasi pangkalan data. Akhirnya, anda perlu menguji permohonan anda dengan teliti untuk memastikan ia berfungsi dengan betul dengan neo4j.
Atas ialah kandungan terperinci Garis masa pengguna yang cekap dalam aplikasi PHP dengan NEO4J. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

URL panjang, sering berantakan dengan kata kunci dan parameter penjejakan, boleh menghalang pelawat. Skrip pemendekan URL menawarkan penyelesaian, mewujudkan pautan ringkas yang sesuai untuk media sosial dan platform lain. Skrip ini sangat berharga untuk laman web individu a

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Ini adalah bahagian kedua dan terakhir siri untuk membina aplikasi React dengan back-end Laravel. Di bahagian pertama siri ini, kami mencipta API RESTful menggunakan Laravel untuk aplikasi penyenaraian produk asas. Dalam tutorial ini, kita akan menjadi dev

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Tinjauan Landskap PHP 2025 menyiasat trend pembangunan PHP semasa. Ia meneroka penggunaan rangka kerja, kaedah penempatan, dan cabaran, yang bertujuan memberi gambaran kepada pemaju dan perniagaan. Tinjauan ini menjangkakan pertumbuhan dalam PHP Versio moden

Dalam artikel ini, kami akan meneroka sistem pemberitahuan dalam rangka kerja web Laravel. Sistem pemberitahuan di Laravel membolehkan anda menghantar pemberitahuan kepada pengguna melalui saluran yang berbeza. Hari ini, kami akan membincangkan bagaimana anda boleh menghantar pemberitahuan ov


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Dreamweaver CS6
Alat pembangunan web visual

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa
