You create a sequence by using the TableOperationFactory
class to create TableOperation
class
instances, each of which represents exactly one operation in
the store. You obtain an instance of
TableOperationFactory
by using
TableAPI.getTableOperationFactory()
.
For example, suppose you are using a table defined like this:
CREATE TABLE myTable ( itemType STRING, itemCategory STRING, itemClass STRING, itemColor STRING, itemSize STRING, price FLOAT, inventoryCount INTEGER, PRIMARY KEY (SHARD(itemType, itemCategory, itemClass), itemColor, itemSize) )
With tables containing data like this:
Row 1:
itemType: Hats |
itemCategory: baseball |
itemClass: longbill |
itemColor: red |
itemSize: small |
price: 12.07 |
inventoryCount: 127 |
Row 2:
itemType: Hats |
itemCategory: baseball |
itemClass: longbill |
itemColor: red |
itemSize: medium |
price: 13.07 |
inventoryCount: 201 |
Row 3:
itemType: Hats |
itemCategory: baseball |
itemClass: longbill |
itemColor: red |
itemSize: large |
price: 14.07 |
inventoryCount: 39 |
And further suppose that this table has rows that require an update (such as a price and inventory refresh), and you want the update to occur in such a fashion as to ensure it is performed consistently for all the rows.
Then you can create a sequence in the following way:
package kvstore.basicExample; import java.util.ArrayList; import oracle.kv.KVStore; import oracle.kv.KVStoreConfig; import oracle.kv.KVStoreFactory; import oracle.kv.DurabilityException; import oracle.kv.FaultException; import oracle.kv.OperationExecutionException; import oracle.kv.RequestTimeoutException; import oracle.kv.table.PrimaryKey; import oracle.kv.table.Row; import oracle.kv.table.Table; import oracle.kv.table.TableAPI; import oracle.kv.table.TableOperationFactory; import oracle.kv.table.TableOperation; ... // kvstore handle creation omitted. ... TableAPI tableH = kvstore.getTableAPI(); Table myTable = tableH.getTable("myTable"); // We use TableOperationFactory to create items for our // sequence. TableOperationFactory tof = tableH.getTableOperationFactory(); // This ArrayList is used to contain each item in our sequence. ArrayList<TableOperation> opList = new ArrayList<TableOperation>(); // Update each row, adding each to the opList as we do. Row row = myTable.createRow(); row.put("itemType", "Hats"); row.put("itemCategory", "baseball"); row.put("itemClass", "longbill"); row.put("itemColor", "red"); row.put("itemSize", "small"); row.put("price", new Float(13.07)); row.put("inventoryCount", 107); opList.add(tof.createPut(row, null, true)); row = myTable.createRow(); row.put("itemType", "Hats"); row.put("itemCategory", "baseball"); row.put("itemClass", "longbill"); row.put("itemColor", "red"); row.put("itemSize", "medium"); row.put("price", new Float(14.07)); row.put("inventoryCount", 198); opList.add(tof.createPut(row, null, true)); row = myTable.createRow(); row.put("itemType", "Hats"); row.put("itemCategory", "baseball"); row.put("itemClass", "longbill"); row.put("itemColor", "red"); row.put("itemSize", "large"); row.put("price", new Float(15.07)); row.put("inventoryCount", 139); opList.add(tof.createPut(row, null, true));
Note in the above example that we update only those rows that
share the same shard key. In this case, the shard key includes
the itemType
, itemCategory
,
and itemClass
fields. If the value for any
of those fields is different from the others, we could not
successfully execute the sequence.