Class: Google::Apis::SpannerV1::TransactionOptions
- Inherits:
-
Object
- Object
- Google::Apis::SpannerV1::TransactionOptions
- 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
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.
Instance Attribute Summary collapse
-
#partitioned_dml ⇒ Google::Apis::SpannerV1::PartitionedDml
Message type to initiate a Partitioned DML transaction.
-
#read_only ⇒ Google::Apis::SpannerV1::ReadOnly
Message type to initiate a read-only transaction.
-
#read_write ⇒ Google::Apis::SpannerV1::ReadWrite
Message type to initiate a read-write transaction.
Instance Method Summary collapse
-
#initialize(**args) ⇒ TransactionOptions
constructor
A new instance of TransactionOptions.
-
#update!(**args) ⇒ Object
Update properties of this object.
Constructor Details
#initialize(**args) ⇒ TransactionOptions
Returns a new instance of TransactionOptions.
4075 4076 4077 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4075 def initialize(**args) update!(**args) end |
Instance Attribute Details
#partitioned_dml ⇒ Google::Apis::SpannerV1::PartitionedDml
Message type to initiate a Partitioned DML transaction.
Corresponds to the JSON property partitionedDml
4062 4063 4064 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4062 def partitioned_dml @partitioned_dml end |
#read_only ⇒ Google::Apis::SpannerV1::ReadOnly
Message type to initiate a read-only transaction.
Corresponds to the JSON property readOnly
4067 4068 4069 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4067 def read_only @read_only end |
#read_write ⇒ Google::Apis::SpannerV1::ReadWrite
Message type to initiate a read-write transaction. Currently this transaction
type has no options.
Corresponds to the JSON property readWrite
4073 4074 4075 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4073 def read_write @read_write end |
Instance Method Details
#update!(**args) ⇒ Object
Update properties of this object
4080 4081 4082 4083 4084 |
# File 'lib/google/apis/spanner_v1/classes.rb', line 4080 def update!(**args) @partitioned_dml = args[:partitioned_dml] if args.key?(:partitioned_dml) @read_only = args[:read_only] if args.key?(:read_only) @read_write = args[:read_write] if args.key?(:read_write) end |