enable query cache policy instead of prepare

This commit is contained in:
Konstantin Lebedev 2022-05-03 16:03:10 +05:00
parent 8342f651f3
commit cb3c7a3cdb
3 changed files with 21 additions and 31 deletions

View file

@ -23,16 +23,14 @@ const (
REPLACE INTO ` + asql.DEFAULT_TABLE + ` REPLACE INTO ` + asql.DEFAULT_TABLE + `
(dir_hash, name, directory, meta) (dir_hash, name, directory, meta)
VALUES VALUES
($dir_hash, $name, $directory, $meta) ($dir_hash, $name, $directory, $meta);`
COMMIT;`
deleteQuery = ` deleteQuery = `
DECLARE $dir_hash AS int64; DECLARE $dir_hash AS int64;
DECLARE $name AS Utf8; DECLARE $name AS Utf8;
DELETE FROM ` + asql.DEFAULT_TABLE + ` DELETE FROM ` + asql.DEFAULT_TABLE + `
WHERE dir_hash = $dir_hash AND name = $name; WHERE dir_hash = $dir_hash AND name = $name;`
COMMIT;`
findQuery = ` findQuery = `
DECLARE $dir_hash AS int64; DECLARE $dir_hash AS int64;
@ -47,8 +45,7 @@ const (
DECLARE $directory AS Utf8; DECLARE $directory AS Utf8;
DELETE FROM ` + asql.DEFAULT_TABLE + ` DELETE FROM ` + asql.DEFAULT_TABLE + `
WHERE dir_hash = $dir_hash AND directory = $directory; WHERE dir_hash = $dir_hash AND directory = $directory;`
COMMIT;`
listDirectoryQuery = ` listDirectoryQuery = `
DECLARE $dir_hash AS int64; DECLARE $dir_hash AS int64;

View file

@ -12,6 +12,7 @@ import (
"github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3"
"github.com/ydb-platform/ydb-go-sdk/v3/sugar" "github.com/ydb-platform/ydb-go-sdk/v3/sugar"
"github.com/ydb-platform/ydb-go-sdk/v3/table" "github.com/ydb-platform/ydb-go-sdk/v3/table"
"github.com/ydb-platform/ydb-go-sdk/v3/table/options"
"github.com/ydb-platform/ydb-go-sdk/v3/table/result" "github.com/ydb-platform/ydb-go-sdk/v3/table/result"
"github.com/ydb-platform/ydb-go-sdk/v3/table/result/named" "github.com/ydb-platform/ydb-go-sdk/v3/table/result/named"
"github.com/ydb-platform/ydb-go-sdk/v3/table/types" "github.com/ydb-platform/ydb-go-sdk/v3/table/types"
@ -104,17 +105,14 @@ func (store *YdbStore) initialize(dirBuckets string, dsn string, tablePathPrefix
func (store *YdbStore) doTxOrDB(ctx context.Context, query *string, params *table.QueryParameters, tc *table.TransactionControl, processResultFunc func(res result.Result) error) (err error) { func (store *YdbStore) doTxOrDB(ctx context.Context, query *string, params *table.QueryParameters, tc *table.TransactionControl, processResultFunc func(res result.Result) error) (err error) {
var res result.Result var res result.Result
if tx, ok := ctx.Value("tx").(table.Transaction); ok { if tx, ok := ctx.Value("tx").(table.Transaction); ok {
res, err = tx.Execute(ctx, *query, params) res, err = tx.Execute(ctx, *query, params, options.WithQueryCachePolicy(options.WithQueryCachePolicyKeepInCache()))
if err != nil { if err != nil {
return fmt.Errorf("execute transaction: %v", err) return fmt.Errorf("execute transaction: %v", err)
} }
} else { } else {
err = store.DB.Table().Do(ctx, func(ctx context.Context, s table.Session) (err error) { err = store.DB.Table().Do(ctx, func(ctx context.Context, s table.Session) (err error) {
stmt, err := s.Prepare(ctx, *query) _, res, err = s.Execute(ctx, tc, *query,
if err != nil { params, options.WithQueryCachePolicy(options.WithQueryCachePolicyKeepInCache()))
return fmt.Errorf("prepare: %v", err)
}
_, res, err = stmt.Execute(ctx, tc, params)
if err != nil { if err != nil {
return fmt.Errorf("execute statement: %v", err) return fmt.Errorf("execute statement: %v", err)
} }

View file

@ -3,6 +3,7 @@ package ydb
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/ydb-platform/ydb-go-sdk/v3/table/options"
"github.com/chrislusf/seaweedfs/weed/filer" "github.com/chrislusf/seaweedfs/weed/filer"
"github.com/chrislusf/seaweedfs/weed/filer/abstract_sql" "github.com/chrislusf/seaweedfs/weed/filer/abstract_sql"
@ -16,11 +17,9 @@ func (store *YdbStore) KvPut(ctx context.Context, key []byte, value []byte) (err
dirStr, dirHash, name := abstract_sql.GenDirAndName(key) dirStr, dirHash, name := abstract_sql.GenDirAndName(key)
fileMeta := FileMeta{dirHash, name, dirStr, value} fileMeta := FileMeta{dirHash, name, dirStr, value}
return store.DB.Table().Do(ctx, func(ctx context.Context, s table.Session) (err error) { return store.DB.Table().Do(ctx, func(ctx context.Context, s table.Session) (err error) {
stmt, err := s.Prepare(ctx, withPragma(store.getPrefix(ctx, dirStr), insertQuery)) _, _, err = s.Execute(ctx, rwTX, withPragma(store.getPrefix(ctx, dirStr), insertQuery),
if err != nil { fileMeta.queryParameters(),
return fmt.Errorf("kv put prepare %s: %v", util.NewFullPath(dirStr, name).Name(), err) options.WithQueryCachePolicy(options.WithQueryCachePolicyKeepInCache()))
}
_, _, err = stmt.Execute(ctx, rwTX, fileMeta.queryParameters())
if err != nil { if err != nil {
return fmt.Errorf("kv put execute %s: %v", util.NewFullPath(dirStr, name).Name(), err) return fmt.Errorf("kv put execute %s: %v", util.NewFullPath(dirStr, name).Name(), err)
} }
@ -32,13 +31,11 @@ func (store *YdbStore) KvGet(ctx context.Context, key []byte) (value []byte, err
dirStr, dirHash, name := abstract_sql.GenDirAndName(key) dirStr, dirHash, name := abstract_sql.GenDirAndName(key)
valueFound := false valueFound := false
err = store.DB.Table().Do(ctx, func(ctx context.Context, s table.Session) error { err = store.DB.Table().Do(ctx, func(ctx context.Context, s table.Session) error {
stmt, err := s.Prepare(ctx, withPragma(store.getPrefix(ctx, dirStr), findQuery)) _, res, err := s.Execute(ctx, roTX, withPragma(store.getPrefix(ctx, dirStr), findQuery),
if err != nil { table.NewQueryParameters(
return fmt.Errorf("kv get prepare %s: %v", util.NewFullPath(dirStr, name), err) table.ValueParam("$dir_hash", types.Int64Value(dirHash)),
} table.ValueParam("$name", types.UTF8Value(name))),
_, res, err := stmt.Execute(ctx, roTX, table.NewQueryParameters( options.WithQueryCachePolicy(options.WithQueryCachePolicyKeepInCache()))
table.ValueParam("$dir_hash", types.Int64Value(dirHash)),
table.ValueParam("$name", types.UTF8Value(name))))
if err != nil { if err != nil {
return fmt.Errorf("kv get execute %s: %v", util.NewFullPath(dirStr, name).Name(), err) return fmt.Errorf("kv get execute %s: %v", util.NewFullPath(dirStr, name).Name(), err)
} }
@ -65,13 +62,11 @@ func (store *YdbStore) KvGet(ctx context.Context, key []byte) (value []byte, err
func (store *YdbStore) KvDelete(ctx context.Context, key []byte) (err error) { func (store *YdbStore) KvDelete(ctx context.Context, key []byte) (err error) {
dirStr, dirHash, name := abstract_sql.GenDirAndName(key) dirStr, dirHash, name := abstract_sql.GenDirAndName(key)
return store.DB.Table().Do(ctx, func(ctx context.Context, s table.Session) (err error) { return store.DB.Table().Do(ctx, func(ctx context.Context, s table.Session) (err error) {
stmt, err := s.Prepare(ctx, withPragma(store.getPrefix(ctx, dirStr), insertQuery)) _, _, err = s.Execute(ctx, rwTX, withPragma(store.getPrefix(ctx, dirStr), insertQuery),
if err != nil { table.NewQueryParameters(
return fmt.Errorf("Prepare %s: %v", util.NewFullPath(dirStr, name).Name(), err) table.ValueParam("$dir_hash", types.Int64Value(dirHash)),
} table.ValueParam("$name", types.UTF8Value(name))),
_, _, err = stmt.Execute(ctx, rwTX, table.NewQueryParameters( options.WithQueryCachePolicy(options.WithQueryCachePolicyKeepInCache()))
table.ValueParam("$dir_hash", types.Int64Value(dirHash)),
table.ValueParam("$name", types.UTF8Value(name))))
if err != nil { if err != nil {
return fmt.Errorf("kv delete %s: %v", util.NewFullPath(dirStr, name).Name(), err) return fmt.Errorf("kv delete %s: %v", util.NewFullPath(dirStr, name).Name(), err)
} }