Class: Google::Apis::SpannerV1::TransactionSelector
- Inherits:
-
Object
- Object
- Google::Apis::SpannerV1::TransactionSelector
- Includes:
- Core::Hashable, Core::JsonObjectSupport
- Defined in:
- lib/google/apis/spanner_v1/classes.rb,
lib/google/apis/spanner_v1/representations.rb,
lib/google/apis/spanner_v1/representations.rb
Overview
This message is used to select the transaction in which a Read or ExecuteSql call runs. See TransactionOptions for more information about transactions.
Instance Attribute Summary collapse
-
#begin ⇒ Google::Apis::SpannerV1::TransactionOptions
In addition, if TransactionOptions.read_only.return_read_timestamp is set to true, a special value of 2^63 - 2 will be returned in the Transaction message that describes the transaction, instead of a valid read timestamp.
-
#id ⇒ String
Execute the read or SQL query in a previously-started transaction.
-
#single_use ⇒ Google::Apis::SpannerV1::TransactionOptions
In addition, if TransactionOptions.read_only.return_read_timestamp is set to true, a special value of 2^63 - 2 will be returned in the Transaction message that describes the transaction, instead of a valid read timestamp.
Instance Method Summary collapse
-
#initialize(**args) ⇒ TransactionSelector
constructor
A new instance of TransactionSelector.
-
#update!(**args) ⇒ Object
Update properties of this object.
Constructor Details
#initialize(**args) ⇒ TransactionSelector
Returns a new instance of TransactionSelector.
4192 4193 4194 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4192 def initialize(**args) update!(**args) end |
Instance Attribute Details
#begin ⇒ Google::Apis::SpannerV1::TransactionOptions
In addition, if TransactionOptions.read_only.return_read_timestamp is set to
true, a special value of 2^63 - 2 will be returned in the Transaction message
that describes the transaction, instead of a valid read timestamp. This
special value should be discarded and not used for any subsequent queries.
Please see https://cloud.google.com/spanner/docs/change-streams for more
details on how to query the change stream TVFs. Partitioned DML transactions:
Partitioned DML transactions are used to execute DML statements with a
different execution strategy that provides different, and often better,
scalability properties for large, table-wide operations than DML in a
ReadWrite transaction. Smaller scoped statements, such as an OLTP workload,
should prefer using ReadWrite transactions. Partitioned DML partitions the
keyspace and runs the DML statement on each partition in separate, internal
transactions. These transactions commit automatically when complete, and run
independently from one another. To reduce lock contention, this execution
strategy only acquires read locks on rows that match the WHERE clause of the
statement. Additionally, the smaller per-partition transactions hold locks for
less time. That said, Partitioned DML is not a drop-in replacement for
standard DML used in ReadWrite transactions. - The DML statement must be fully-
partitionable. Specifically, the statement must be expressible as the union of
many statements which each access only a single row of the table. - The
statement is not applied atomically to all rows of the table. Rather, the
statement is applied atomically to partitions of the table, in independent
transactions. Secondary index rows are updated atomically with the base table
rows. - Partitioned DML does not guarantee exactly-once execution semantics
against a partition. The statement will be applied at least once to each
partition. It is strongly recommended that the DML statement should be
idempotent to avoid unexpected results. For instance, it is potentially
dangerous to run a statement such as UPDATE table SET column = column + 1 as
it could be run multiple times against some rows. - The partitions are
committed automatically - there is no support for Commit or Rollback. If the
call returns an error, or if the client issuing the ExecuteSql call dies, it
is possible that some rows had the statement executed on them successfully. It
is also possible that statement was never executed against other rows. -
Partitioned DML transactions may only contain the execution of a single DML
statement via ExecuteSql or ExecuteStreamingSql. - If any error is encountered
during the execution of the partitioned DML operation (for instance, a UNIQUE
INDEX violation, division by zero, or a value that cannot be stored due to
schema constraints), then the operation is stopped at that point and an error
is returned. It is possible that at this point, some partitions have been
committed (or even committed multiple times), and other partitions have not
been run at all. Given the above, Partitioned DML is good fit for large,
database-wide, operations that are idempotent, such as deleting old rows from
a very large table.
Corresponds to the JSON property begin
4137 4138 4139 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4137 def begin @begin end |
#id ⇒ String
Execute the read or SQL query in a previously-started transaction.
Corresponds to the JSON property id
NOTE: Values are automatically base64 encoded/decoded in the client library.
4143 4144 4145 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4143 def id @id end |
#single_use ⇒ Google::Apis::SpannerV1::TransactionOptions
In addition, if TransactionOptions.read_only.return_read_timestamp is set to
true, a special value of 2^63 - 2 will be returned in the Transaction message
that describes the transaction, instead of a valid read timestamp. This
special value should be discarded and not used for any subsequent queries.
Please see https://cloud.google.com/spanner/docs/change-streams for more
details on how to query the change stream TVFs. Partitioned DML transactions:
Partitioned DML transactions are used to execute DML statements with a
different execution strategy that provides different, and often better,
scalability properties for large, table-wide operations than DML in a
ReadWrite transaction. Smaller scoped statements, such as an OLTP workload,
should prefer using ReadWrite transactions. Partitioned DML partitions the
keyspace and runs the DML statement on each partition in separate, internal
transactions. These transactions commit automatically when complete, and run
independently from one another. To reduce lock contention, this execution
strategy only acquires read locks on rows that match the WHERE clause of the
statement. Additionally, the smaller per-partition transactions hold locks for
less time. That said, Partitioned DML is not a drop-in replacement for
standard DML used in ReadWrite transactions. - The DML statement must be fully-
partitionable. Specifically, the statement must be expressible as the union of
many statements which each access only a single row of the table. - The
statement is not applied atomically to all rows of the table. Rather, the
statement is applied atomically to partitions of the table, in independent
transactions. Secondary index rows are updated atomically with the base table
rows. - Partitioned DML does not guarantee exactly-once execution semantics
against a partition. The statement will be applied at least once to each
partition. It is strongly recommended that the DML statement should be
idempotent to avoid unexpected results. For instance, it is potentially
dangerous to run a statement such as UPDATE table SET column = column + 1 as
it could be run multiple times against some rows. - The partitions are
committed automatically - there is no support for Commit or Rollback. If the
call returns an error, or if the client issuing the ExecuteSql call dies, it
is possible that some rows had the statement executed on them successfully. It
is also possible that statement was never executed against other rows. -
Partitioned DML transactions may only contain the execution of a single DML
statement via ExecuteSql or ExecuteStreamingSql. - If any error is encountered
during the execution of the partitioned DML operation (for instance, a UNIQUE
INDEX violation, division by zero, or a value that cannot be stored due to
schema constraints), then the operation is stopped at that point and an error
is returned. It is possible that at this point, some partitions have been
committed (or even committed multiple times), and other partitions have not
been run at all. Given the above, Partitioned DML is good fit for large,
database-wide, operations that are idempotent, such as deleting old rows from
a very large table.
Corresponds to the JSON property singleUse
4190 4191 4192 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4190 def single_use @single_use end |
Instance Method Details
#update!(**args) ⇒ Object
Update properties of this object
4197 4198 4199 4200 4201 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4197 def update!(**args) @begin = args[:begin] if args.key?(:begin) @id = args[:id] if args.key?(:id) @single_use = args[:single_use] if args.key?(:single_use) end |