Firebase Data Connect به شما امکان میدهد برای نمونههای PostgreSQL خود که با Google Cloud SQL مدیریت میشوند، کانکتور ایجاد کنید. این کانکتورها ترکیبی از کوئریها و جهشها برای استفاده از دادههای شما از طرحوارهتان هستند.
راهنمای شروع به کار، یک طرحواره برنامه نقد فیلم برای PostgreSQL معرفی کرد.
آن راهنما همچنین عملیات مدیریتی قابل استقرار و موقت، از جمله جهشها، را معرفی کرد.
- جهشهای قابل استقرار، جهشهایی هستند که شما پیادهسازی میکنید تا از برنامههای کلاینت در یک کانکتور فراخوانی شوند، و نقاط پایانی API را که شما تعریف میکنید، در آن قرار دهید. Data Connect احراز هویت و مجوز را در این جهشها ادغام میکند و SDKهای کلاینت را بر اساس API شما تولید میکند.
- جهشهای مدیریتی موقت (ad hoc administrative mutations) از محیطهای دارای امتیاز بالا برای پر کردن و مدیریت جداول اجرا میشوند. میتوانید آنها را در کنسول Firebase ، از محیطهای دارای امتیاز بالا با استفاده از Firebase Admin SDK و در محیطهای توسعه محلی با استفاده از افزونه Data Connect VS Code ما ایجاد و اجرا کنید.
این راهنما نگاه عمیقتری به جهشهای قابل استقرار (deployable mutations) میاندازد.
ویژگیهای جهشهای Data Connect
Data Connect به شما امکان میدهد جهشهای اولیه را به تمام روشهایی که از یک پایگاه داده PostgreSQL انتظار دارید، انجام دهید:
- انجام عملیات CRUD
- مدیریت عملیات چند مرحلهای با تراکنشها
اما با افزونههای Data Connect برای GraphQL، میتوانید جهشهای پیشرفتهای را برای برنامههای سریعتر و کارآمدتر پیادهسازی کنید:
- از کلیدهای اسکالر برگردانده شده توسط بسیاری از عملیات برای سادهسازی عملیات تکراری روی رکوردها استفاده کنید
- از مقادیر سرور برای پر کردن دادهها با عملیات ارائه شده توسط سرور استفاده کنید
- در جریان عملیات جهش چند مرحلهای برای جستجوی دادهها، کوئریهایی را انجام دهید و خطوط کد و رفت و برگشت به سرور را ذخیره کنید.
استفاده از فیلدهای تولید شده برای پیادهسازی جهشها
عملیات Data Connect شما مجموعهای از فیلدها را که به طور خودکار توسط Data Connect بر اساس انواع و روابط نوع در طرحواره شما ایجاد میشوند، گسترش میدهد. این فیلدها هر زمان که طرحواره خود را ویرایش میکنید، توسط ابزارهای محلی ایجاد میشوند.
شما میتوانید از فیلدهای تولید شده برای پیادهسازی جهشها، از ایجاد، بهروزرسانی و حذف رکوردهای تکی در جداول تکی گرفته تا بهروزرسانیهای پیچیدهتر چند جدولی، استفاده کنید. فرض کنید طرحواره شما شامل یک نوع Movie و یک نوع Actor مرتبط است. Data Connect فیلدهای movie_insert ، movie_update ، movie_delete و موارد دیگر را تولید میکند.
جهش با
فیلد movie_insert
فیلد | از این فیلد برای ایجاد یک فیلم واحد استفاده کنید. mutation CreateMovie($data: Movie_Data!) { movie_insert(data: $data) { key } } |
جهش با
فیلد movie_update
فیلد | از این فیلد برای بهروزرسانی یک فیلم واحد با استفاده از کلید آن استفاده کنید. mutation UpdateMovie($myKey: Movie_Key!, $data: Movie_Data!) { movie_update(key: $myKey, data: $data) { key } } |
جهش با
فیلد movie_delete
فیلد | از این فیلد برای حذف یک فیلم با استفاده از کلید آن استفاده کنید. mutation DeleteMovie($myKey: Movie_Key!) { movie_delete(key: $myKey) { key } } |
عناصر ضروری یک جهش
جهشهای Data Connect، جهشهای GraphQL با افزونههای Data Connect هستند. درست مانند یک جهش GraphQL معمولی، میتوانید یک نام عملیات و لیستی از متغیرهای GraphQL تعریف کنید.
Data Connect کوئریهای GraphQL را با دستورالعملهای سفارشی مانند @auth و @transaction گسترش میدهد.
بنابراین جهش زیر دارای:
- تعریف نوع
mutation - نام عملیات
SignUp(جهش) - یک آرگومان عملیاتی تک متغیره
$username - یک دستورالعمل واحد،
@auth - یک فیلد تکی به
user_insert.
mutation SignUp($username: String!) @auth(level: USER) {
user_insert(data: {
id_expr: "auth.uid"
username: $username
})
}
هر آرگومان جهش نیاز به یک اعلان نوع، یک نوع داخلی مانند String یا یک نوع سفارشی تعریفشده توسط طرحواره مانند Movie دارد.
جهشهای اساسی را بنویسید
شما میتوانید شروع به نوشتن جهشهایی برای ایجاد، بهروزرسانی و حذف رکوردهای منفرد از پایگاه داده خود کنید.
ایجاد کردن
بیایید کارهای اولیه را انجام دهیم.
# Create a movie based on user input
mutation CreateMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
movie_insert(data: {
title: $title
releaseYear: $releaseYear
genre: $genre
rating: $rating
})
}
# Create a movie with default values
mutation CreateMovie2 {
movie_insert(data: {
title: "Sherlock Holmes"
releaseYear: 2009
genre: "Mystery"
rating: 5
})
}
یا یک جمله تاکیدی.
# Movie upsert using combination of variables and literals
mutation UpsertMovie($title: String!) {
movie_upsert(data: {
title: $title
releaseYear: 2009
genre: "Mystery"
rating: 5
genre: "Mystery/Thriller"
})
}
انجام بهروزرسانیها
در اینجا بهروزرسانیهایی ارائه شده است. تهیهکنندگان و کارگردانان مطمئناً امیدوارند که این رتبهبندیهای متوسط رو به رشد باشند.
فیلد movie_update شامل یک آرگومان id مورد انتظار برای شناسایی یک رکورد و یک فیلد data است که میتوانید برای تنظیم مقادیر در این بهروزرسانی از آن استفاده کنید.
mutation UpdateMovie(
$id: UUID!,
$genre: String!,
$rating: Int!,
$description: String!
) {
movie_update(id: $id,
data: {
genre: $genre
rating: $rating
description: $description
})
}
برای انجام چندین بهروزرسانی، از فیلد movie_updateMany استفاده کنید.
# Multiple updates (increase all ratings of a genre)
mutation IncreaseRatingForGenre($genre: String!, $rating: Int!) {
movie_updateMany(
where: { genre: { eq: $genre } },
data:
{
rating: $rating
})
}
استفاده از عملیات افزایش، کاهش، افزودن و اضافه کردن به ابتدای متغیر با _update
در حالی که در جهشهای _update و _updateMany میتوانید صریحاً مقادیر را در data: تنظیم کنید، اغلب اعمال عملگری مانند increment برای بهروزرسانی مقادیر منطقیتر است.
برای اصلاح مثال بهروزرسانی قبلی، فرض کنید میخواهید امتیاز یک فیلم خاص را افزایش دهید. میتوانید از سینتکس rating_update به همراه عملگر inc استفاده کنید.
mutation UpdateMovie(
$id: UUID!,
$ratingIncrement: Int!
) {
movie_update(id: $id, data: {
rating_update: {
inc: $ratingIncrement
}
})
}
Data Connect از عملگرهای زیر برای بهروزرسانی فیلدها پشتیبانی میکند:
-
incبرای افزایش انواع دادهInt،Int64،Float،DateوTimestamp -
decبرای کاهش اعداد از نوع دادهInt،Int64،Float،DateوTimestamp
برای لیستها، میتوانید با استفاده از موارد زیر، مقادیر تکی یا لیستی از مقادیر را بهروزرسانی کنید:
- اگر آیتم(ها) از قبل در انواع لیست وجود ندارند، به جز لیستهای برداری، آنها را اضافه یا اضافه
add -
removeبرای حذف همه موارد، در صورت وجود، از انواع لیست، به جز لیستهای برداری - برای اضافه کردن آیتم(ها) به انواع لیست، به جز لیستهای برداری،
append. - برای اضافه کردن آیتم(ها) به انواع لیست، به جز لیستهای برداری،
prepend.
انجام حذفها
البته میتوانید دادههای فیلم را حذف کنید. متخصصان حفاظت از فیلم قطعاً میخواهند که فیلمهای فیزیکی تا حد امکان حفظ شوند.
# Delete by key
mutation DeleteMovie($id: UUID!) {
movie_delete(id: $id)
}
در اینجا میتوانید از _deleteMany استفاده کنید.
# Multiple deletes
mutation DeleteUnpopularMovies($minRating: Int!) {
movie_deleteMany(where: { rating: { le: $minRating } })
}
جهشها را روی روابط بنویسید
نحوه استفاده از جهش ضمنی _upsert در یک رابطه مشاهده کنید.
# Create or update a one to one relation
mutation MovieMetadataUpsert($movieId: UUID!, $director: String!) {
movieMetadata_upsert(
data: { movie: { id: $movieId }, director: $director }
)
}
طرحوارههای طراحی برای جهشهای کارآمد
Data Connect دو ویژگی مهم ارائه میدهد که به شما امکان میدهد جهشهای کارآمدتری بنویسید و عملیات رفت و برگشت را ذخیره کنید.
اسکالرهای کلیدی، شناسههای شیء مختصری هستند که Data Connect به طور خودکار از فیلدهای کلیدی در طرحوارههای شما جمعآوری میکند. اسکالرهای کلیدی در مورد کارایی هستند و به شما امکان میدهند در یک فراخوانی واحد، اطلاعاتی در مورد هویت و ساختار دادههای خود پیدا کنید. آنها به ویژه زمانی مفید هستند که میخواهید اقدامات متوالی را روی رکوردهای جدید انجام دهید و به یک شناسه منحصر به فرد برای انتقال به عملیاتهای بعدی نیاز دارید، و همچنین زمانی که میخواهید به کلیدهای رابطهای برای انجام عملیات پیچیدهتر دسترسی داشته باشید.
با استفاده از مقادیر سرور ، میتوانید به طور مؤثر به سرور اجازه دهید تا فیلدهای جداول شما را با استفاده از مقادیر ذخیره شده یا به راحتی قابل محاسبه، مطابق با عبارات CEL سمت سرور خاص در آرگومان expr ، به صورت پویا پر کند. به عنوان مثال، میتوانید فیلدی را با یک مهر زمانی تعریف کنید که هنگام دسترسی به فیلد با استفاده از زمان ذخیره شده در یک درخواست عملیات، updatedAt: Timestamp! @default(expr: "request.time") اعمال میشود.
جهشهای پیشرفته بنویسید: اجازه دهید Data Connect با استفاده از سینتکس field_expr مقادیر را ارائه دهد
همانطور که در بخش اسکالرهای کلیدی و مقادیر سرور بحث شد، میتوانید طرح خود را طوری طراحی کنید که سرور در پاسخ به درخواستهای کلاینت، مقادیر مربوط به فیلدهای رایج مانند id ها و تاریخها را پر کند.
علاوه بر این، میتوانید از دادههایی مانند شناسههای کاربری که در اشیاء request Data Connect از برنامههای کلاینت ارسال میشوند، استفاده کنید.
هنگام پیادهسازی جهشها، از سینتکس field_expr برای راهاندازی بهروزرسانیهای تولید شده توسط سرور یا دسترسی به دادههای درخواستها استفاده کنید. برای مثال، برای ارسال شناسه کاربری uid ذخیره شده در یک درخواست به عملیات _upsert ، "auth.uid" را در فیلد userId_expr وارد کنید.
# Add a movie to the user's favorites list
mutation AddFavoritedMovie($movieId: UUID!) @auth(level: USER) {
favorite_movie_upsert(data: { userId_expr: "auth.uid", movieId: $movieId })
}
# Remove a movie from the user's favorites list
mutation DeleteFavoritedMovie($movieId: UUID!) @auth(level: USER) {
favorite_movie_delete(key: { userId_expr: "auth.uid", movieId: $movieId })
}
یا در یک برنامهی آشنای فهرست کارها، هنگام ایجاد یک فهرست کارهای جدید، میتوانید id_expr ارسال کنید تا به سرور دستور دهید که به طور خودکار یک UUID برای فهرست تولید کند.
mutation CreateTodoListWithFirstItem(
$listName: String!
) @transaction {
# Step 1
todoList_insert(data: {
id_expr: "uuidV4()", # <-- auto-generated. Or a column-level @default on `type TodoList` will also work
name: $listName,
})
}
برای اطلاعات بیشتر، به اسکالرهای _Expr در مرجع اسکالرها مراجعه کنید.
جهشهای پیشرفته بنویسید: عملیات چند مرحلهای
موقعیتهای زیادی وجود دارد که ممکن است بخواهید چندین فیلد نوشتن (مانند درج) را در یک جهش بگنجانید. همچنین ممکن است بخواهید در حین اجرای یک جهش، پایگاه داده خود را بخوانید تا قبل از انجام کارهایی مانند درج یا بهروزرسانی، دادههای موجود را جستجو و تأیید کنید. این گزینهها باعث صرفهجویی در عملیات رفت و برگشت و در نتیجه هزینهها میشوند.
Data Connect به شما امکان میدهد منطق چند مرحلهای را در جهشهای خود با پشتیبانی از موارد زیر انجام دهید:
چندین فیلد نوشتن
چندین فیلد خواندنی در جهشهای شما (با استفاده از کلمه کلیدی فیلد
query).دستورالعمل
@transactionکه پشتیبانی از تراکنشها را که در پایگاههای داده رابطهای آشنا هستند، فراهم میکند.دستورالعمل
@checkکه به شما امکان میدهد محتوای خواندهها را با استفاده از عبارات CEL و بر اساس نتایج چنین ارزیابی ارزیابی کنید:- با ایجاد، بهروزرسانی و حذفهای تعریفشده توسط یک جهش ادامه دهید
- ادامه دهید تا نتایج یک فیلد پرس و جو را برگردانید
- از پیامهای برگشتی برای انجام منطق مناسب در کد کلاینت خود استفاده کنید
دستورالعمل
@redactکه به شما امکان میدهد نتایج فیلد پرسوجو را از نتایج پروتکل سیم حذف کنید.اتصال
responseCEL، که نتایج انباشته شده از تمام جهشها و پرسوجوهای انجام شده در یک عملیات پیچیده و چند مرحلهای را ذخیره میکند. میتوانید به اتصالresponseدسترسی داشته باشید:- در دستورالعملهای
@check، از طریق آرگومانexpr: - با مقادیر سرور، با استفاده از سینتکس
field_expr
- در دستورالعملهای
دستورالعمل @transaction
پشتیبانی از جهشهای چند مرحلهای شامل مدیریت خطا با استفاده از تراکنشها میشود.
دستورالعمل @transaction الزام میکند که یک جهش - چه با یک فیلد نوشتن (مثلاً _insert یا _update ) و چه با چندین فیلد نوشتن - همیشه در یک تراکنش پایگاه داده اجرا شود.
جهشهای بدون
@transactionهر فیلد ریشه را یکی پس از دیگری و به ترتیب اجرا میکنند. این عملیات هرگونه خطا را به عنوان خطاهای جزئی فیلد نشان میدهد، اما اثرات اجراهای بعدی را نشان نمیدهد.جهشهایی که با
@transactionانجام میشوند، یا کاملاً موفق میشوند یا کاملاً شکست میخورند. اگر هر یک از فیلدهای درون تراکنش با شکست مواجه شود، کل تراکنش به حالت اولیه خود برمیگردد.
دستورالعملهای @check و @redact
دستور @check تأیید میکند که فیلدهای مشخص شده در نتایج پرسوجو وجود دارند. یک عبارت زبان عبارات مشترک (CEL) برای آزمایش مقادیر فیلدها استفاده میشود. رفتار پیشفرض این دستور، بررسی و رد گرههایی است که مقدار آنها null یا [] (لیستهای خالی) باشد.
دستور @redact بخشی از پاسخ دریافتی از کلاینت را حذف میکند. فیلدهای حذفشده همچنان برای بررسی عوارض جانبی (از جمله تغییرات دادهها و @check ) ارزیابی میشوند و نتایج همچنان برای مراحل بعدی در عبارات CEL در دسترس هستند.
از @check ، @check(message:) و @redact استفاده کنید
یکی از کاربردهای اصلی @check و @redact جستجوی دادههای مرتبط برای تصمیمگیری در مورد مجاز بودن یا نبودن عملیات خاص است که با استفاده از جستجو در منطق اما پنهان کردن آن از دید کلاینتها انجام میشود. کوئری شما میتواند پیامهای مفیدی را برای مدیریت صحیح در کد کلاینت برگرداند.
برای مثال، فیلد پرسوجوی زیر بررسی میکند که آیا درخواستکننده نقش "مدیر" مناسبی برای مشاهده کاربرانی که میتوانند یک فیلم را ویرایش کنند، دارد یا خیر.
query GetMovieEditors($movieId: UUID!) @auth(level: USER) {
moviePermission(key: { movieId: $movieId, userId_expr: "auth.uid" }) @redact {
role @check(expr: "this == 'admin'", message: "You must be an admin to view all editors of a movie.")
}
moviePermissions(where: { movieId: { eq: $movieId }, role: { eq: "editor" } }) {
user {
id
username
}
}
}
برای کسب اطلاعات بیشتر در مورد دستورالعملهای @check و @redact در بررسیهای مجوز، به بحث جستجوی دادههای مجوز مراجعه کنید.
برای اعتبارسنجی کلیدها از @check استفاده کنید
برخی از فیلدهای جهش، مانند _update ، ممکن است در صورت عدم وجود رکوردی با کلید مشخص، no-op شوند. به طور مشابه، جستجوها ممکن است null یا یک لیست خالی را برگردانند. این موارد خطا محسوب نمیشوند و بنابراین باعث rollback نمیشوند.
برای جلوگیری از این نتیجه، با استفاده از دستور @check بررسی کنید که آیا کلیدها یافت میشوند یا خیر.
# Delete by key, error if not found
mutation MustDeleteMovie($id: UUID!) @transaction {
movie_delete(id: $id) @check(expr: "this != null", message: "Movie not found, therefore nothing is deleted")
}
از اتصال response برای زنجیرهای کردن جهشهای چند مرحلهای استفاده کنید
رویکرد اساسی برای ایجاد رکوردهای مرتبط، برای مثال یک Movie جدید و یک ورودی MovieMetadata مرتبط، به شرح زیر است:
- یک جهش
_insertبرایMovieفراخوانی کنید - کلید برگردانده شده از فیلم ایجاد شده را ذخیره کنید
- سپس، یک جهش
_insertدوم را برای ایجاد رکوردMovieMetadataفراخوانی کنید.
اما با Data Connect ، میتوانید این مورد رایج را در یک عملیات چند مرحلهای با دسترسی به نتایج اولین _insert در دومین _insert مدیریت کنید.
ساختن یک اپلیکیشن نقد فیلم موفق کار زیادی میبرد. بیایید لیست کارهایمان را با یک مثال جدید بررسی کنیم.
استفاده از response برای تنظیم فیلدها با مقادیر سرور
در جهش لیست کارهای زیر:
- اتصال
response، شیء پاسخ جزئی تا کنون را نشان میدهد، که شامل تمام فیلدهای جهش سطح بالا قبل از فیلد فعلی است. - نتایج عملیات اولیه
todoList_insert، که فیلدid(کلید) را برمیگرداند، بعداً درresponse.todoList_insert.idقابل دسترسی هستند تا بتوانیم بلافاصله یک آیتم جدید برای انجام کار وارد کنیم.
mutation CreateTodoListWithFirstItem(
$listName: String!,
$itemContent: String!
) @transaction {
# Sub-step 1:
todoList_insert(data: {
id_expr: "uuidV4()", # <-- auto-generated. Or a column-level @default on `type TodoList` will also work
name: $listName,
})
# Sub-step 2:
todo_insert(data: {
listId_expr: "response.todoList_insert.id" # <-- Grab the newly generated ID from the partial response so far.
content: $itemContent,
})
}
استفاده از response برای اعتبارسنجی فیلدها با استفاده از @check
response در @check(expr: "...") نیز موجود است، بنابراین میتوانید از آن برای ساخت منطق سمت سرور پیچیدهتر استفاده کنید. با ترکیب مراحل query { … } در جهشها، میتوانید بدون هیچ رفت و برگشت اضافی بین کلاینت و سرور، به موارد بسیار بیشتری دست یابید.
در مثال زیر، توجه داشته باشید: @check از قبل به response.query دسترسی دارد زیرا @check همیشه بعد از مرحلهای که به آن متصل است اجرا میشود.
mutation CreateTodoInNamedList(
$listName: String!,
$itemContent: String!
) @transaction {
# Sub-step 1: Look up List.id by its name
query
@check(expr: "response.query.todoLists.size() > 0", message: "No such TodoList with the name!")
@check(expr: "response.query.todoLists.size() < 2", message: "Ambiguous listName!") {
todoLists(where: { name: $listName }) {
id
}
}
# Sub-step 2:
todo_insert(data: {
listId_expr: "response.todoLists[0].id" # <-- Now we have the parent list ID to insert to
content: $itemContent,
})
}
برای اطلاعات بیشتر در مورد اتصال response ، به مرجع CEL مراجعه کنید.
درک عملیاتهای متوقفشده با @transaction و query @check
جهشهای چند مرحلهای میتوانند با خطاهایی مواجه شوند:
- عملیات پایگاه داده ممکن است با شکست مواجه شود.
- منطق query
@checkممکن است عملیات را خاتمه دهد.
Data Connect توصیه میکند که از دستورالعمل @transaction با جهشهای چند مرحلهای خود استفاده کنید. این امر منجر به یک پایگاه داده سازگارتر و نتایج جهش میشود که مدیریت آنها در کد کلاینت آسانتر است:
- در اولین خطا یا
@checkناموفق، عملیات خاتمه مییابد، بنابراین نیازی به مدیریت اجرای فیلدهای بعدی یا ارزیابی CEL نیست. - رولبکها در پاسخ به خطاهای پایگاه داده یا منطق
@checkانجام میشوند و وضعیت پایگاه داده را به طور مداوم پایدار نگه میدارند. - یک خطای بازگشت به عقب همیشه به کد کلاینت برگردانده میشود.
ممکن است در برخی موارد استفاده، شما استفاده @transaction را انتخاب نکنید: اگر به عنوان مثال به توان عملیاتی، مقیاسپذیری یا در دسترس بودن بالاتر نیاز دارید، میتوانید سازگاری نهایی را انتخاب کنید. با این حال، برای دستیابی به نتایج، باید پایگاه داده و کد کلاینت خود را مدیریت کنید:
- اگر یک فیلد به دلیل عملیات پایگاه داده از کار بیفتد، فیلدهای بعدی به اجرای خود ادامه میدهند. با این حال،
@checkهای ناموفق همچنان کل عملیات را خاتمه میدهند. - رولبکها انجام نمیشوند، به این معنی که وضعیت پایگاه داده ترکیبی است و برخی بهروزرسانیها موفق و برخی دیگر ناموفق هستند.
- اگر منطق
@checkشما از نتایج خواندنها و/یا نوشتنها در مرحله قبل استفاده کند، عملیات شما با@checkممکن است نتایج متناقضتری ارائه دهد. - نتیجهای که به کد کلاینت برگردانده میشود، شامل ترکیبی پیچیدهتر از پاسخهای موفقیت و شکست خواهد بود که باید مدیریت شوند.
دستورالعملهای جهشهای Data Connect
علاوه بر دستورالعملهایی که در تعریف انواع و جداول استفاده میکنید، Data Connect دستورالعملهای @auth ، @check ، @redact و @transaction را برای بهبود رفتار عملیات ارائه میدهد.
| دستورالعمل | قابل اجرا برای | توضیحات |
|---|---|---|
@auth | پرسوجوها و جهشها | سیاست مجوزدهی برای یک پرسوجو یا جهش را تعریف میکند. به راهنمای مجوزدهی و گواهیدهی مراجعه کنید. |
@check | فیلدهای query در عملیات چند مرحلهای | تأیید میکند که فیلدهای مشخص شده در نتایج پرس و جو وجود دارند. یک عبارت زبان عبارات مشترک (CEL) برای آزمایش مقادیر فیلد استفاده میشود. به عملیات چند مرحلهای مراجعه کنید. |
@redact | پرسوجوها | بخشی از پاسخ دریافتی از کلاینت را حذف میکند. به عملیات چند مرحلهای مراجعه کنید. |
@transaction | جهشها | اجرای همیشگی یک جهش در تراکنش پایگاه داده را الزامی میکند. به عملیات چند مرحلهای مراجعه کنید. |
مراحل بعدی
ممکن است به موارد زیر علاقه داشته باشید:
- ایجاد جهش برای برنامههای شما با استفاده از ابزارهای کمکی هوش مصنوعی
- مجوزدهی جهشهای شما طبق راهنمای مجوز
- فراخوانی جهشها از کد کلاینت شما برای وب ، iOS ، اندروید و فلاتر .
- انجام عملیات دادههای حجیم با جهشها