برنامه نویسی

اصول پرس و جو با 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 نوشته شده است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا