انتشار AgensGraph 2.18؛ پشتیبانی گسترده‌تر از ISO GQL روی PostgreSQL 18.6

چرا مهم است

اگر با query‌های graph در کنار SQL کار می‌کنی، این انتشار هم clause‌های قابل استفاده را گسترش می‌دهد و هم اجرای query‌ها و کنترل دسترسی را تغییر می‌دهد. برای ارتقا از 2.17 هم نمی‌توانی data directory قبلی را مستقیم استفاده کنی.

قبل از خواندن، این‌ها را بدان۵ مفهوم
transaction

مجموعه‌ای از عملیات database که به‌صورت یک واحد انجام می‌شوند؛ تغییرات آن‌ها با هم ثبت می‌شود یا در صورت لغو، کنار گذاشته می‌شود.

بیشتر درباره این مفهوم

index

ساختاری در database برای پیدا کردن داده‌ها بدون نیاز به بررسی تمام رکوردها؛ می‌تواند در filtering و sorting به کار رود.

بیشتر درباره این مفهوم

embedding

نمایش عددی داده به شکل vector که ویژگی‌های آن را بازنمایی می‌کند و می‌توان از فاصله میان این vector‌ها برای سنجش شباهت استفاده کرد.

بیشتر درباره این مفهوم

Graph Traversal

حرکت میان vertex‌های یک graph از طریق edge‌ها برای پیدا کردن ارتباط‌ها یا مسیرها. هر گام در این حرکت یک hop است.

در حال نگارش

Row-level Security

سازوکاری برای اعمال سیاست دسترسی روی هر row در database که تعیین می‌کند کدام داده‌ها برای یک کاربر قابل خواندن یا تغییر هستند.

در حال نگارش

تیم AgensGraph نسخه v2.18.6.1 را از مجموعه 2.18 منتشر کرد. این graph database که open-source است و بر PostgreSQL 18.6 تکیه دارد، اجرای SQL و query‌های graph را روی داده‌های یکسان، در یک transaction و حتی در یک statement ممکن می‌کند. محورهای این انتشار، گسترش پشتیبانی از ISO GQL و بهبود سرعت query‌ها هستند.

نسخه 2.18 نخستین مجموعه clause‌های GQL را در کنار openCypher اضافه می‌کند: LET،؜ FOR،؜ FILTER،؜ NEXT،؜ FINISH و INSERT،؜ به‌علاوه ORDER BY،؜ OFFSET و LIMIT مستقل. برای subquery‌های graph نیز CALL { }، OPTIONAL CALL،؜ EXISTS { }، COUNT { }، COLLECT { } و VALUE { } پشتیبانی می‌شوند. با CALL ... YIELD هم می‌توان function‌های PostgreSQL را از Cypher فراخواند.

در Graph Traversal با طول متغیر، اکنون در هر hop از index مربوط به edge label استفاده می‌شود؛ نسخه 2.17 در هر hop کل label را scan می‌کرد. طبق آزمایش تیم توسعه روی graph عمومی soc-Pokec با ۳۰ میلیون edge،؜ یک traversal دو-hop که در 2.17 پس از ۲۰ ثانیه تمام نمی‌شد، اکنون در حد میلی‌ثانیه کامل می‌شود. بهبودهای سرعت همچنین pattern matching،؜ مرتب‌سازی، شمارش vertex و edge و clause‌های SET و DELETE را در بر می‌گیرند.

قابلیت typed property column اجازه می‌دهد property‌های پرکاربرد در column‌های دارای نوع بومی ذخیره شوند و مانند سایر column‌های PostgreSQL،؜ index بگیرند تا filtering و sorting سریع‌تر شود. در بخش امنیت، عملیات نوشتن Cypher اکنون سیاست‌های Row-level Security را اعمال می‌کند. pattern‌های با طول ثابت نیز این سیاست‌ها و مجوزهای label‌هایی را رعایت می‌کنند که بدون ذکر نام با آن‌ها match می‌شوند.

درایور agensgraph-python 2.1 بر پایه psycopg 3 بازسازی شده و اجرای synchronous و asynchronous،؜ خروجی مستقیم به pandas،؜ Polars یا Arrow،؜ connection pooling و OpenTelemetry tracing دارد. بسته agensgraph-ai نیز integration‌هایی برای GraphRAG و knowledge graph ارائه می‌کند. با نصب جداگانه pgvector،؜ داده‌های graph و embedding‌های vector در یک database قرار می‌گیرند و یک query می‌تواند Graph Traversal را با vector similarity search ترکیب کند.

برای ارتقا از 2.17،؜ data directory مستقیماً قابل استفاده نیست؛ باید از pg_upgrade یا dump با pg_dump نسخه 2.18 و سپس restore استفاده شود. نصب‌های 2.18.6.0 فقط به جایگزینی binary‌ها و restart نیاز دارند.

نکته کلیدی

پیش از ارتقا، تغییرات نسبت به 2.17 را مرور کن و مسیر pg_upgrade یا dump و restore را در نظر بگیر. نتیجه میلی‌ثانیه‌ای اعلام‌شده را هم به همان آزمایش دو-hop نسبت بده، نه به همه query‌های برنامه‌ات.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)