اصول پرس و جو با Cypher در PostgreSQL با استفاده از Apache Age

معرفی
به دنیای پایگاه داده های گراف خوش آمدید! هنگامی که صحبت از مدل سازی داده های پیچیده و بسیار متصل به میان می آید، پایگاه داده های گراف ثابت کرده اند که یک راه حل کارآمد و شهودی هستند. و یکی از محبوب ترین پایگاه داده های گراف موجود، Neo4j است که از زبان پرس و جو به نام Cypher استفاده می کند.
اما اگر بتوانید از Cypher برای جستجوی داده ها در PostgreSQL استفاده کنید چه؟ خوب، حالا شما می توانید! به لطف پسوند Apache Age، میتوانید از Cypher برای پرس و جو کردن نموداری که در پایگاه داده PostgreSQL ذخیره شده است استفاده کنید. این ترکیب قدرتمند به شما امکان می دهد از مزایای پایگاه های داده گراف بهره ببرید و در عین حال از بلوغ و پایداری PostgreSQL استفاده کنید.
در این پست وبلاگ، شما را با اصول پرس و جو با Cypher در PostgreSQL با استفاده از پسوند Apache Age آشنا خواهم کرد. چه در پایگاه داده های نموداری تازه کار باشید و چه یک کاربر باتجربه، این پست به شما کمک می کند تا پرس و جو در Apache Age را شروع کنید. پس بیایید شروع کنیم! اگر در تنظیم محیط خود تردید دارید، پست قبلی من را در مورد فرآیند نصب برای PostgreSQL و Apache AGE بررسی کنید.
نحو سایفر
سینتکس Cypher به گونه ای طراحی شده است که خواندن و نوشتن آسان باشد و برای توسعه دهندگان و کاربران غیر فنی قابل دسترسی باشد. این زبان بر اساس مفهوم تطبیق الگو ساخته شده است، که به شما امکان می دهد روابط پیچیده بین گره ها و یال ها را در داده های نمودار خود توصیف کنید.
در Cypher، گره ها با پرانتز نشان داده می شوند ()
، در حالی که برچسب ها یا برچسب ها با دو نقطه نشان داده می شوند :
به دنبال آن نام برچسب قرار می گیرد که گره ها را بر اساس نقش یا نوع گروه بندی می کند. به عنوان مثال، یک گره که نشان دهنده فردی است که مذکر است می تواند به صورت زیر برچسب گذاری شود:
(:Person:Male)
گره ها همچنین می توانند ویژگی هایی داشته باشند که در بریس های فرفری محصور شده اند {}
و برچسب را دنبال کنید، مانند:
(:Person {name: 'Jake'})
از سوی دیگر، روابط با خط تیره نشان داده می شوند -
یا براکت []
و دو گره را به هم متصل کنید. جهت رابطه با استفاده مشخص می شود <
و >
برای نشان دادن جهت فلش. به عنوان مثال، اگر جیک از جین خوشش میآید، میتوانیم آن را با:
(:Person {name: 'Jake'})-[:LIKES]->(:Person {name: 'Jane'})
اگر روده بزرگ افتاد -[LIKES]->
، در عوض یک متغیر (نام مستعار) را به جای نوع رابطه نشان می دهد و همه انواع روابط جستجو خواهند شد.
مانند گره ها، روابط نیز می توانند ویژگی هایی داشته باشند که در بریس های فرفری محصور شده اند {}
و نوع رابطه را دنبال کنید، مانند:
-[:LIKES {type: 'as a friend'}]->
در نهایت، شایان ذکر است که نام مستعار را می توان برای ارجاع به گره ها و روابط در سراسر پرس و جوهای شما استفاده کرد. برای استفاده از نام مستعار، به سادگی گره یا رابطه را قبل از برچسب نامگذاری کنید، مانند the a
از جانب (a:Person)
، r
از جانب [r:LIKES]
و b
از جانب (b:Person)
. این موارد را می توان بعداً در جستجوی خود با استفاده از نام مستعارهایی که تعریف کرده اید ارجاع داد، مانند:
(a)-[r:LIKES {type: 'as a friend'}]->(b)
پرس و جوهای اساسی
در Apache AGE، Cypher را نمی توان در یک عبارت استفاده کرد و پرس و جو باید در SQL وجود داشته باشد FROM
بند یک پرس و جو به عنوان مثال، برای اجرای یک کوئری Cypher، طرح معمولی به صورت زیر خواهد بود:
SELECT *
FROM cypher('graph_name', $$
/* Cypher query here, for example:
MATCH (a:Person)
RETURN a
*/
$$) AS (person agtype);
پرس و جوهای سایفر در بین علائم دلار نوشته می شوند $$ $$
از cypher()
دستور، که در ابتدا به نام گراف نیاز دارد تا مشخص کند روی کدام گراف کار می شود. نام مستعار باید برای آن مشخص شود RETURN
خروجی از پرس و جو Cypher. نحو را می توان به صورت تعمیم داد cypher(graph_name, query_string, parameters)
. AGE از یک نوع داده سفارشی به نام استفاده می کند agtype
، که تنها نوع داده ای است که توسط AGE برگردانده شده است.
برای شروع کار با نمودارها در Apache Age با استفاده از Cypher، اولین قدم ایجاد یک نمودار است. این را می توان با استفاده از create_graph
تابعی که نام گراف را به عنوان آرگومان می گیرد:
SELECT create_graph('graph_name');
برای حذف یک نمودار، استفاده کنید drop_graph
، که نام گراف را نیز به عنوان آرگومان می گیرد:
SELECT drop_graph('graph_name', true);
هنگامی که یک نمودار برای کار با آن دارید، می توانید با استفاده از عبارت CREATE شروع به ایجاد گره ها یا رئوس کنید. برای ایجاد یک گره ساده، استفاده کنید CREATE (n)
. برای ایجاد یک گره با یک برچسب، استفاده کنید CREATE (:Person)
. همچنین میتوانید با استفاده از نحو پرانتز، ویژگیها را به گرهها اضافه کنید CREATE (:Person {name: Jack})
همانطور که در قسمت قبل دیدیم. در اینجا نمونه ای از یک پرس و جو کامل آمده است:
SELECT *
FROM cypher('People', $$
CREATE (:Person {name: Jack}),
(:Person {name: Jane})
$$) AS (person agtype);
عبارت MATCH برای تعیین الگوهایی که Cypher در پایگاه داده جستجو می کند استفاده می شود. برای به دست آوردن تمام رئوس در نمودار، استفاده کنید MATCH (n)
. برای به دست آوردن تمام رئوس با یک برچسب خاص، استفاده کنید MATCH (n:Person)
. برای بدست آوردن رئوس مرتبط، استفاده کنید MATCH (:Person {name: 'Jack'})-[]-(:Person)
، جایی که نماد -[]-
به معنی مربوط به، بدون توجه به نوع یا جهت رابطه است. همچنین میتوانید با استفاده از متغیری با انواع لبههای خاص مطابقت دهید MATCH (:Person {name: 'Jack'})-[:LIKES]->(:Person {name: 'Jane'})
. یک پرس و جو کامل چیزی شبیه به این خواهد بود:
SELECT *
FROM cypher('People', $$
MATCH (a:Person {name: 'Jack'})-[r:LIKES {type: 'as a friend'}]->(b:Person {name: 'Jane'})
RETURN a.name, r.type, b.name
$$) AS (he agtype, likes agtype, her agtype);
برای حذف عناصر نمودار، DELETE
می توان از بند استفاده کرد. برای حذف یک راس، استفاده کنید DELETE n
. برای حذف تمام رئوس و یال های نمودار، از:
SELECT *
FROM cypher('People', $$
MATCH (n:People)
DETACH DELETE n
$$) as (n agtype);
فقط برای حذف لبه ها، از:
SELECT *
FROM cypher('People', $$
MATCH (:People {name: 'Jack'})-[r:LIKES]->()
DELETE r
$$) AS (n agtype);
را SET
بند برای بهروزرسانی برچسبها در گرهها و ویژگیها در رئوس و لبهها استفاده میشود. برای تنظیم یک ویژگی، استفاده کنید SET n.age = 25
:
SELECT *
FROM cypher('People', $$
MATCH (a:Person {name: 'Jack'})
SET a.age = 25
$$) AS (n agtype);
از عبارت REMOVE می توان برای حذف ویژگی ها از رئوس و لبه ها مانند REMOVE استفاده کرد. n.age
:
SELECT *
FROM cypher('People', $$
MATCH (a:Person {name: 'Jack'})
REMOVE a.age
$$) AS (n agtype);
در نهایت، RETURN
بند به شما اجازه می دهد تا مشخص کنید به کدام بخش از الگو علاقه دارید. این می تواند گره ها، روابط یا ویژگی های هر یک از اینها باشد. هنگامی که می خواهید تمام رئوس، لبه ها و مسیرهای موجود در یک پرس و جو را برگردانید، می توانید از آن استفاده کنید *
سمبل:
SELECT *
FROM cypher('People', $$
MATCH (a: Person {name: 'Jack'})-[r]->(b)
RETURN *
$$) AS (person1 agtype, relationship agtype, person2 agtype);
در این بخش، نحوه انجام کوئری های اولیه Cypher در Apache Age را یاد گرفتیم. ما ایجاد و حذف نمودارها و همچنین ایجاد، حذف و اصلاح گره ها و روابط را پوشش دادیم. با این دانش، میتوانیم شروع به ساخت پرس و جوهای پیچیدهتر برای استخراج بینش و دانش از دادههای خود کنیم. برای کسب اطلاعات بیشتر در مورد هر بند و سایر بندهای ذکر نشده، و همچنین توابع موجود در Apache AGE، اسناد رسمی موجود به صورت آنلاین را بررسی کنید.
نتیجه
با یادگیری این مفاهیم و دستورات اساسی، می توانید از قدرت پایگاه داده های گراف استفاده کنید و بینش و دانش ارزشمندی را از داده های خود استخراج کنید. با Cypher و Apache Age، میتوانید دادههای خود را بهعنوان یک نمودار مدلسازی کنید و با استفاده از یک نحو آشنا و بصری، آنها را جستجو کنید. فرقی نمیکند در شبکههای اجتماعی، موتورهای توصیه، تشخیص تقلب یا هر مشکل دیگری که بتوان آن را به صورت نمودار مدلسازی کرد، کار میکنید، Apache Age میتواند به شما کمک کند تا دادههای خود را به طور کارآمد و مؤثر ذخیره، مدیریت و جستجو کنید.
امیدوارم این پست وبلاگ برای شروع کار با جستجوهای Cypher در Apache Age مفید بوده باشد. به یاد داشته باشید، این تازه آغاز راه است، زیرا ویژگیها و تکنیکهای پیشرفتهتری وجود دارد که میتوانید در استفاده از این ابزار قدرتمند مهارت بیشتری پیدا کنید. بنابراین به یادگیری ادامه دهید، به تمرین ادامه دهید و به کشف بینش های جدید با Cypher و Apache Age ادامه دهید.
این پست بر اساس راهنمای شروع Neo4j و مستندات اصلی Apache AGE نوشته شده است.