Установка режима выполнения транзакции
Для выполнения запросов в YDB SDK необходимо указывать режим выполнения транзакции.
Ниже приведены примеры кода, которые используют встроенные в YDB SDK средства создания объекта режим выполнения транзакции.
Примечание
Материал статьи дополняется.
Serializable
Go (native)
PHP
package main
import (
"context"
"os"
"github.com/ydb-platform/ydb-go-sdk/v3"
"github.com/ydb-platform/ydb-go-sdk/v3/table"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, err := ydb.Open(ctx,
os.Getenv("YDB_CONNECTION_STRING"),
ydb.WithAccessTokenCredentials(os.Getenv("YDB_TOKEN")),
)
if err != nil {
panic(err)
}
defer db.Close(ctx)
txControl := table.TxControl(
table.BeginTx(table.WithSerializableReadWrite()),
table.CommitTx(),
)
err := driver.Table().Do(scope.Ctx, func(ctx context.Context, s table.Session) error {
_, _, err := s.Execute(ctx, txControl, "SELECT 1", nil)
return err
})
if err != nil {
fmt.Printf("unexpected error: %v", err)
}
}
<?php
use YdbPlatform\Ydb\Ydb;
$config = [
// Database path
'database' => '/ru-central1/b1glxxxxxxxxxxxxxxxx/etn0xxxxxxxxxxxxxxxx',
// Database endpoint
'endpoint' => 'ydb.serverless.yandexcloud.net:2135',
// Auto discovery (dedicated server only)
'discovery' => false,
// IAM config
'iam_config' => [
// 'root_cert_file' => './CA.pem', Root CA file (uncomment for dedicated server only)
],
'credentials' => new AccessTokenAuthentication('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA') // use from reference/ydb-sdk/auth
];
$ydb = new Ydb($config);
$ydb->table()->retryTransaction(function(Session $session){
$session->query('SELECT 1;');
})
Online Read-Only
Go (native)
PHP
package main
import (
"context"
"os"
"github.com/ydb-platform/ydb-go-sdk/v3"
"github.com/ydb-platform/ydb-go-sdk/v3/table"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, err := ydb.Open(ctx,
os.Getenv("YDB_CONNECTION_STRING"),
ydb.WithAccessTokenCredentials(os.Getenv("YDB_TOKEN")),
)
if err != nil {
panic(err)
}
defer db.Close(ctx)
txControl := table.TxControl(
table.BeginTx(table.WithOnlineReadOnly(table.WithInconsistentReads())),
table.CommitTx(),
)
err := driver.Table().Do(scope.Ctx, func(ctx context.Context, s table.Session) error {
_, _, err := s.Execute(ctx, txControl, "SELECT 1", nil)
return err
})
if err != nil {
fmt.Printf("unexpected error: %v", err)
}
}
Примечание
Возможность не реализована или документация в процессе разработки.
Stale Read-Only
Go (native)
PHP
package main
import (
"context"
"os"
"github.com/ydb-platform/ydb-go-sdk/v3"
"github.com/ydb-platform/ydb-go-sdk/v3/table"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, err := ydb.Open(ctx,
os.Getenv("YDB_CONNECTION_STRING"),
ydb.WithAccessTokenCredentials(os.Getenv("YDB_TOKEN")),
)
if err != nil {
panic(err)
}
defer db.Close(ctx)
txControl := table.TxControl(
table.BeginTx(table.WithStaleReadOnly()),
table.CommitTx(),
)
err := driver.Table().Do(scope.Ctx, func(ctx context.Context, s table.Session) error {
_, _, err := s.Execute(ctx, txControl, "SELECT 1", nil)
return err
})
if err != nil {
fmt.Printf("unexpected error: %v", err)
}
}
Примечание
Возможность не реализована или документация в процессе разработки.
Snapshot Read-Only
Go (native)
PHP
package main
import (
"context"
"os"
"github.com/ydb-platform/ydb-go-sdk/v3"
"github.com/ydb-platform/ydb-go-sdk/v3/table"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, err := ydb.Open(ctx,
os.Getenv("YDB_CONNECTION_STRING"),
ydb.WithAccessTokenCredentials(os.Getenv("YDB_TOKEN")),
)
if err != nil {
panic(err)
}
defer db.Close(ctx)
txControl := table.TxControl(
table.BeginTx(table.WithSnapshotReadOnly()),
table.CommitTx(),
)
err := driver.Table().Do(scope.Ctx, func(ctx context.Context, s table.Session) error {
_, _, err := s.Execute(ctx, txControl, "SELECT 1", nil)
return err
})
if err != nil {
fmt.Printf("unexpected error: %v", err)
}
}
Примечание
Возможность не реализована или документация в процессе разработки.