پرس و جو داده های بلادرنگ با GraphQL و پایگاه داده جریانی

در توسعه برنامه های کاربردی مدرن، پرس و جو و بازیابی کارآمد داده ها در زمان واقعی برای ساختن سیستم های قوی و کارآمد بسیار مهم است. با استفاده از نماهای تحقق یافته می توانیم عملکرد پرس و جو را بهبود ببخشیم. هنگامی که با GraphQL و یک پایگاه داده بخار ترکیب میشود، توسعهدهندگان میتوانند درخواستهای خود را برای استفاده از این نماهای تحقق یافته برای دادههایی که دائماً تغییر میکنند، تعریف کنند و به آنها اجازه میدهد تا برنامههای بسیار واکنشگرا و تعاملی بسازند.
به عنوان مثال، پلتفرم های رسانه های اجتماعی مانند توییتر در هر ثانیه حجم عظیمی از داده ها را تولید می کنند. این داده ها برای تحلیل روندها و رفتار کاربر ارزشمند هستند. در این مقاله، بررسی خواهیم کرد که چگونه یکپارچه سازی GraphQL، نماهای واقعی، و پایگاه داده های جریانی مانند RisingWave می تواند ما را قادر سازد به طور کارآمد توییت ها را پرس و جو کنیم و داغ ترین هشتگ ها را در زمان واقعی کشف کنیم.
قبل از پرداختن به پیاده سازی، درک این 3 مفهوم (GraphQL، نمای مادی، و پایگاه داده جریان) مهم است. من معتقدم شما آنقدر باهوش هستید که از Google یا ChatGPT برای پیدا کردن این اطلاعات استفاده کنید. با این حال، من قصد دارم به زودی توضیح دهم که چرا این یکپارچگی می تواند مفید باشد و نقش هر یک در بخش بعدی.
نماهای مادی شده به عنوان حافظه پنهان از پیش محاسبه شده
با یک نمای تحقق یافته، می توانیم نتایج پرس و جوهای SQL را که اغلب اجرا می شوند از قبل محاسبه و ذخیره کنیم. این یک نمایش غیرعادی شده از داده ها است، به این معنی که پیوندها و تجمیع های پیچیده قبلاً انجام شده و در پایگاه داده ای مانند PostgreSQL ذخیره می شوند. این منطق پرس و جو مورد نیاز برای بازیابی داده ها را ساده می کند و نیازی به مدیریت دستی عملیات اتصال را از بین می برد. در مورد توییتر، از نماهای واقعی میتوان برای محاسبه خلاصههای فعالیت کاربر، مانند تعداد دنبالکنندگان، هشتگ استفادهشده، لایکها یا نظرات استفاده کرد.
GraphQL برای بازیابی دقیق داده هایی که نیاز داریم
GraphQL به ما این امکان را می دهد که دقیقا مشخص کنیم به چه داده هایی نیاز داریم و آن ها را دریافت کنیم در یک درخواست واحد بدون استفاده از چارچوب پردازش داده خاص زبان برنامه نویسی اضافی یا تعریف دسته ای از اشیاء موجودیت و نقاط پایانی در مورد REST (انتقال وضعیت نمایندگی). برخلاف REST، GraphQL به طور قابل توجهی تعداد رفت و برگشت ها را کاهش می دهد و در نتیجه واکشی داده ها سریعتر می شود. با GraphQL می توانیم مستقیماً به نماهای تحقق یافته دسترسی داشته باشید در پایگاه داده از طریق طرحواره تعریف شده، پیچیدگی های ساختار پایگاه داده اساسی را انتزاع می کند. یک پلت فرم تجزیه و تحلیل رسانه های اجتماعی می تواند از GraphQL برای ارائه یک API انعطاف پذیر برای پرس و جو و تجزیه و تحلیل محتوای تولید شده توسط کاربر استفاده کند.
چندین سازنده و فریمورک محبوب GraphQL در دسترس هستند که می توانند در ساخت API های GraphQL کمک کنند. شما می توانید به منابع داده های مختلف متصل شوید و با پایگاه های داده محبوب مانند PostgreSQL و MySQL یکپارچه شوید. در اینجا برخی از موارد پرکاربرد آورده شده است:
StepZen پلتفرمی برای ساخت و استقرار GraphQL API است که داده ها را از منابع مختلف ادغام و جمع می کند. در بخش دمو، نحوه ساخت یک API GraphQL در کد اعلامی با استفاده از StepZen را نشان خواهم داد.
جریان پایگاه داده برای پردازش داده های زمان واقعی
برای استفاده از پتانسیل کامل پرس و جو داده ها در زمان واقعی با GraphQL می توان از یک پایگاه داده جریانی استفاده کرد. نماهای مادیشده ممکن است همیشه حاوی بهروزترین دادهها نباشند، زیرا به آنها وابسته هستند چه زمانی و هر چند وقت یکبار نما به روز می شود. پایگاه داده های سنتی مانند PostgreSQL از نماهای تحقق یافته پشتیبانی می کنند، اما برای مشاهده پرس و جو در طول زمان، باید همان پرس و جو را دوباره اجرا کنید – و دوباره. برای دریافت نتایج به روز شده، باید کوئری ها را به طور مکرر اجرا کنید. در حالی که یک پایگاه داده استریم مانند RisingWave تقریباً تمام کار خود را در زمان نوشتن انجام می دهد. این پست توضیح می دهد چگونه یک پایگاه داده جریان با یک پایگاه داده سنتی متفاوت است. هنگامی که داده ها به پایگاه داده جریان می روند، پردازش می شوند و بلافاصله برای به روز رسانی نماهای موجود استفاده می شوند. می تواند داده ها را از منابع داده های مختلف مانند کافکا یا پولسار دریافت کند. با ترکیب GraphQL با یک پایگاه داده استریم، میتوانیم به طور مداوم پستهای توییت دریافتی را وارد کنیم و نماهای تحققیافته را در زمان واقعی و تغییرات پرس و جو در دادهها را فوراً بهروزرسانی کنیم.
RisingWave با PostgreSQL سازگار است، می توانید از پشتیبانی StepZen موجود برای پایگاه داده Postgres به عنوان منبع داده برای GraphQL API خود استفاده کنید. می توانید منبع، جدول، و نمای ماتریال شده را از RisingWave استعلام کنید.
پرس و جو از رویدادهای نمایشی توییتر
هنگامی که اهمیت GraphQL، نماهای واقعی و یک پایگاه داده جریانی را درک کردیم، میتوانیم از این ترکیب برای ایجاد یک راه جدید برای دسترسی به دادههای توییت استفاده کنیم. با از پیش محاسبه خلاصههای دادهها و افشای آنها از طریق نقطه پایانی GraphQL، میتوانیم به سرعت به اطلاعات ارزشمندی از توییتها دست یابیم.
قبل از اینکه شروع کنی
در آموزش، ما از آن استفاده خواهیم کرد نسخه ی نمایشی مورد استفاده موجود RisingWave در وب سایتی به نام پردازش سریع رویدادهای توییتر. اطمینان حاصل کنید که آموزش را با شبیهسازی، راهاندازی پروژه آزمایشی در آنجا با استفاده از Docker، اتصال RisingWave به جریانهای داده کافکا و تعریف یک نمای مادیشده بهعنوان راهنمای آموزش تکمیل کردهاید.
سایر پیش نیازهای نصب عبارتند از:
وقتی آماده ای
حالا من فرض میکنم که شما RisingWave را پیکربندی کردهاید و ما یک نمای واقعی به نام داریم hot_hashtags
پردازش شده توسط RisingWave که ردیابی می کند هر هشتگ روزانه چقدر در توییتر استفاده می شود. در مراحل بعدی، ما StepZen را نصب و راهاندازی میکنیم، طرح GraphQL را طراحی میکنیم، کوئریهای GraphQL را به دادههای واقعی در نمای واقعی نگاشت میکنیم و در نهایت، نقطه پایانی GraphQL را در معرض نمایش قرار میدهیم.
مرحله 1: StepZen CLI را نصب کنید
توجه داشته باشید که برای نصب و اجرای آن می توانید دستورالعمل های وب سایت StepZen را نیز دنبال کنید. رابط خط فرمان StepZen (CLI) دستوراتی را برای راه اندازی و مدیریت StepZen ارائه می دهد. برای نصب StepZen CLI دستور زیر را اجرا کنید:
npm install -g stepzen
مرحله 2: StepZen را در Docker اجرا کنید
سپس با استفاده از StepZen CLI که در مرحله قبل نصب کردیم، سرویس StepZen را روی دستگاه محلی شما اجرا می کنیم:
stepzen service start
برای استفاده از StepZen CLI برای توسعه محلی، باید با اشاره به CLI روی پیکربندی محلی وارد شوید. به سادگی پس از شروع سرویس StepZen دستور زیر را اجرا کنید:
stepzen login --config ~/.stepzen/stepzen-config.local.yaml
مرحله 3: کلون کنید graphql-stepzen-risingwave پروژه نمایشی
مخزن من به نام را پیدا کنید graphql-stepzen-risingwave-demo در GitHub. Git این مخزن را روی دستگاه خود شبیه سازی کنید. این پروژه در حال حاضر همه چیز مورد نیاز شما را دارد. کد طرحواره در a نوشته شده است postgresql.graphql فایل GraphQL Schema Definition Language (SDL) با انواع و پرس و جوهای تعریف شده برای نمای واقعی hot_hashtags
در پایگاه داده RisingWave همچنین دارای یک فایل stepzen.config.json با نقطه پایانی GraphQL ما است.
git clone https://github.com/Boburmirzo/graphql-stepzen-risingwave-demo.git
cd graphql-stepzen-risingwave-demo
مرحله 4: ایجاد یک حساب ngrok و نصب ngrok (اختیاری)
توجه داشته باشید که اگر StepZen و RisingWave را اجرا می کنید، فقط یک مرحله اضافی است در محیط محلی شما. در مورد ابر یا نمونه های در حال اجرا در سرور شما که از طریق اینترنت قابل دسترسی هستند، می توانید آدرس مستقیم RisingWave را در پیکربندی پایگاه داده StepZen تنظیم کنید. اگر هم StepZen و هم RisingWave را در کانتینرهای Docker اجرا می کنید، می توانید آدرس آن را مشخص کنید
host.docker.internal
.
Ngrok ابزاری است که یک تونل امن بین یک آدرس اینترنتی عمومی و یک سرور محلی در حال اجرا بر روی دستگاه شما ایجاد می کند. یک حساب کاربری برای ngrok ایجاد کنید و مطمئن شوید که با تنظیم می توانید به آن دسترسی داشته باشید authtoken
. برای در دسترس قرار دادن پایگاه داده Risingwave برای سایر خدمات خارج از شبکه خصوصی خود، باید یک تونل TCP ایجاد کنید. برای این ngrok در پورتی که RisingWave در آن اجرا می شود استفاده می شود 4566
:
ngrok tcp 4566
پس از اجرای دستور، Ngrok آدرس ارسال را برای پایگاه داده محلی RisingWave برمی گرداند که چیزی شبیه به این خواهد بود: 0.tcp.eu.ngrok.io:14304
باید این را به فایل اضافه کنید ./config.yaml
در پروژه آزمایشی که باید جایگزین کنید {{ngrok_tunnel}}
با آدرس شما 0.tcp.ngrok.io:15650
:
configurationset:
- configuration:
name: postgresql_config
uri: postgresql://root:@0.tcp.eu.ngrok.io:15650/dev
مرحله 5: GraphQL Endpoint را اجرا کنید
با اجرای دستور stepzen start
، می توانید طرح GraphQL را که ما در آن داریم مستقر کنید postgresql.graphql فایل به StepZen این فوراً یک GraphQL API در لوکال هاست ایجاد می کند که از طریق نقطه پایانی پیکربندی شده قابل دسترسی است (api/twitter
) در فایل stepzen.config.json. اگر به http://localhost:5001/api/twitter بروید، کاوشگر داشبورد StepZen در مرورگر خود خواهید بود.
مرحله 6: نمای مادی شده را جستجو کنید
کاوشگر StepZen پرس و جوهای موجود را با ویژگی های آنها نشان می دهد. وقتی کوئری زیر را اجرا می کنید getHotHashtags
، داده ها را از نمای تحقق یافته RisingWave می کشد و داده های برگشتی را در کاوشگر نشان می دهد.
query MyQuery {
getHotHashtags {
hashtag
hashtag_occurrences
window_start
}
}
خروجی را ببینید:
اگر باز کنید postgresql.graphql فایل، خواهید دید که من چگونه از دستورالعمل GraphQL استفاده کردم @dbquery برای اتصال پایگاه داده و نوشتن پرس و جوی SQL برای انتخاب 10 هشتگ محبوب برتر.
type Query {
getHotHashtags: [hot_hashtags]
@dbquery(
type: "postgresql"
query: """
SELECT
*
FROM
hot_hashtags
ORDER BY
hashtag_occurrences DESC
LIMIT
10
"""
configuration: "postgresql_config"
)
}
مراحل بعدی
تا کنون، ما یک API GraphQL ساخته و اجرا کردهایم api/twitter
با باطن پایگاه داده در مرحله بعد، میتوانید نحوه مصرف بیدرنگ دادهها از منابع دیگر غیر از کافکا را با RisingWave مشاهده کنید، چندین جریان داده را ترکیب کنید، نماهای واقعی در جریانهای پیوسته ایجاد کنید، و دنبالهای از پرسوجوها را با StepZen ایجاد کنید.
نتیجه
با StepZen GraphQL API دسترسی به داده ها را بدون معرفی یک سرویس پشتیبان برای انجام این کار ساده کردیم و آن را با به روز رسانی های بلادرنگ ارائه شده توسط RisingWave ترکیب کردیم. به طور خلاصه، جستوجوی دادههای بلادرنگ با GraphQL و پایگاه داده استریم، فرصتهای جدیدی را برای ایجاد برنامههای کاربردی بسیار واکنشگرا و تعاملی باز میکند.
منابع مرتبط
محتوای پیشنهادی
انجمن
🙋 به انجمن Risingwave بپیوندید
درباره نویسنده