順序の作成

順序を作成するには、Operationオブジェクトの配列を作成します。オブジェクトごとに、オブジェクトのONDB_OPERATIONキーに指定されたOperationTypeオブジェクトを使用して必要な操作情報を指定します。配列の各要素は、ストアでの1つの操作を表します。

たとえば、次のように定義された表を使用しているとします。

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)
) 

次のようなデータを含む表:

  • 行1:

    • itemType: Hats

    • itemCategory: baseball

    • itemClass: longbill

    • itemColor: red

    • itemSize: small

    • price: 12.07

    • inventoryCount: 127

  • 行2:

    • itemType: Hats

    • itemCategory: baseball

    • itemClass: longbill

    • itemColor: red

    • itemSize: medium

    • price: 13.07

    • inventoryCount: 201

  • 行3:

    • itemType: Hats

    • itemCategory: baseball

    • itemClass: longbill

    • itemColor: red

    • itemSize: large

    • price: 14.07

    • inventoryCount: 39

さらに、この表には更新が必要な行(価格、在庫更新など)があり、すべての行について一貫して更新が行われるようにするとします。

次のように順序を作成します。

from nosqldb import Factory
from nosqldb import IllegalArgumentException
from nosqldb import Operation
from nosqldb import OperationType
from nosqldb import ProxyConfig
from nosqldb import Row
from nosqldb import StoreConfig

import logging
import os
import sys

### Constants needed for operations
from nosqldb import ONDB_OPERATION
from nosqldb import ONDB_OPERATION_TYPE
from nosqldb import ONDB_TABLE_NAME
from nosqldb import ONDB_ROW
from nosqldb import ONDB_ABORT_IF_UNSUCCESSFUL

op_array = []

...
## Skipped setup and logging functions for brevity
...

def add_op(op_t, table_name, if_unsuccess,
           item_type, item_cat, item_class,
           item_color, item_size, price, inv_count):

    global op_array

    row_d  = { 'itemType' : item_type,
               'itemCategory' : item_cat,
               'itemClass' : item_class,
               'itemColor' : item_color,
               'itemSize'  : item_size,
               'price'     : price,
               'inventoryCount' : inv_count
               }
    op_row = Row(row_d)

    op_type = OperationType({ONDB_OPERATION_TYPE : op_t})
    op = Operation({
                    ONDB_OPERATION : op_type,
                    ONDB_TABLE_NAME : table_name,
                    ONDB_ROW : op_row,
                    ONDB_ABORT_IF_UNSUCCESSFUL : True
                   })
    op_array.append(op)

...

if __name__ == '__main__':

    ...

    add_op('PUT', 'myTable', True,
            "Hats", "baseball", "longbill",
            "red", "small", 13.07, 107)
    add_op('PUT', 'myTable', True,
            "Hats", "baseball", "longbill",
            "red", "medium", 14.07, 198)
    add_op('PUT', 'myTable', True,
            "Hats", "baseball", "longbill",
            "red", "large", 15.07, 140)

...

前述の例では、同じシャード・キーを共有する行のみを更新することに注意してください。この場合、シャード・キーにはitemTypeitemCategoryおよびitemClassフィールドが含まれます。これらのフィールドの値が他のフィールドと異なる場合、順序は正常に実行されません。