データの読取り

表からデータを読み取る方法について学習します。

言語固有のドライバに対して様々なAPIメソッドを使用して、アプリケーションからデータを読み取ることができます。単一の主キー値に基づいて、または問合せを使用してレコードを取得できます。

ノート:

まず、クライアント・ドライバをOracle NoSQL Database Cloud Serviceに接続し、ハンドルを取得してから他のステップを実行します。このトピックでは、クライアント・ドライバの接続と表の作成に関するステップは省略しています。

GetRequestクラスでは、簡単かつ強力な方法でデータを読み取ることができますが、より複雑な読取りリクエストには問合せを使用できます。表からデータを読み取るには、GetRequestクラスを使用してターゲット表とターゲット・キーを指定し、NoSQLHandle.get()を使用してリクエストを実行します。この操作の結果はGetResultで参照できます。

表からデータを読み取るには、次のようにします。

/* GET the row, first create the row key */
MapValue key = new MapValue().put("id", 1);
GetRequest getRequest = new GetRequest().setKey(key)
                                        .setTableName("users");
GetResult getRes = handle.get(getRequest);

/* on success, GetResult.getValue() returns a non-null value */
if (getRes.getValue() != null) {
  // success
} else {
  // failure
}

ノート:

デフォルトでは、すべての読取り操作で最終的に整合性が維持されます。NoSQLHandleインスタンスのデフォルトの整合性を変更するには、NoSQLHandleConfig.setConsistency(oracle.nosql.driver.Consistency)メソッドとGetRequest.setConsistency()メソッドを使用します。

GET APIの詳細は、Java APIリファレンス・ガイドを参照してください。

表からデータを読み取る方法について学習します。borneo.NoSQLHandle.get()メソッドを使用して単一行を読み取ることができます。このメソッドを使用すると、主キー値に基づいてレコードを取得できます。borneo.GetRequestクラスは、単純なget操作に使用されます。ターゲット行の主キー値が含まれ、borneo.GetResultのインスタンスを返します。
from borneo import GetRequest
# GetRequest requires a table name 
request = GetRequest().set_table_name('users')
# set the primary key to use request.set_key({'id': 1})
result = handle.get(request)
# on success the value is not empty
if result.get_value() is not None:
# success

デフォルトでは、borneo.Consistency.EVENTUALを使用して、すべての読取り操作で最終的に整合性が維持されます。このタイプの読取りは、絶対的な整合性borneo.Consistency.ABSOLUTEを使用する読取りよりもコストが低くなります。このデフォルトは、ハンドルを作成する前に、borneo.NoSQLHandleConfig.set_consistency()を使用してborneo.NoSQLHandleで変更できます。borneo.GetRequest.set_consistency()を使用して、単一のリクエストで変更できます。

Client.Get関数を使用して単一行を読み取ることができます。この関数を使用すると、主キー値に基づいてレコードを取得できます。nosqldb.GetRequestは、単純なget操作に使用されます。これにはターゲット行の主キー値が含まれ、nosqldb.GetResultのインスタンスを返します。get操作が成功すると、nil以外のGetResult.Versionが返されます。
key:=&types.MapValue{}
key.Put("id", 1)
req:=&nosqldb.GetRequest{
    TableName: "users",
    Key: key,
}
res, err:=client.Get(req)
デフォルトでは、types.Eventualを使用して、すべての読取り操作で最終的に整合性が維持されます。このタイプの読取りは、絶対的な整合性types.Absoluteを使用する読取りよりもコストが低くなります。このデフォルトは、クライアントを作成する前に、RequestConfig.Consistencyを使用してnosqldb.RequestConfigで変更できます。GetRequest.Consistencyフィールドを使用して、単一のリクエストで変更できます。
  1. すべての読取り操作のデフォルトの整合性を変更します。
    cfg:= nosqldb.Config{
      RequestConfig: nosqldb.RequestConfig{
            Consistency: types.Absolute,
            ...
        },
        ...
    }
    client, err:=nosqldb.NewClient(cfg)
  2. 単一読取り操作の整合性を変更します。
    req:=&nosqldb.GetRequest{
        TableName: "users",
        Key: key,
        Consistency: types.Absolute,
    }

getメソッドを使用して単一行を読み取ることができます。このメソッドを使用すると、主キー値に基づいてレコードを取得できます。整合性列挙を使用して、読取り操作の整合性を設定できます。デフォルトでは、Consistency.EVENTUALを使用して、すべての読取り操作で最終的に整合性が維持されます。このタイプの読取りは、絶対的な整合性Consistency.ABSOLUTEを使用する読取りよりもコストが低くなります。この読取り操作のデフォルトの整合性は、consistencyプロパティを使用してNoSQLClientインスタンスを作成するために使用される初期構成で設定できます。また、getメソッドのopt引数にconsistencyプロパティを設定して、単一の読取り操作でこれを変更することもできます。

getメソッドは、結果の行とそのバージョンを含むプレーンJavaScriptオブジェクトであるGetResultのPromiseを返します。指定された主キーが表に存在しない場合、rowプロパティの値はnullになります。指定された主キーのキー・オブジェクトのプロパティ名は、基礎となる表の列名と同じである必要があります。
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const Consistency = require('oracle-nosqldb').Consistency;
const client = new NoSQLClient('config.json'); 
async function getRowsFromUsersTable() { 
   const tableName = 'users'; 
   try {
      let result = await client.get(tableName,  
      { id: 1 });
      console.log('Got row: ' + result.row);
      // Use absolute consistency 
      result = await client.get(tableName, 'users', 
         { id: 1 }, { consistency: Consistency.ABSOLUTE }); 
      console.log('Got row with absolute consistency: ' + result.row);
   } 
   catch(error){
      //handle errors
   }
}

GetAsyncメソッドを使用して単一行を読み取ることができます。このメソッドを使用すると、主キー値に基づいて行を取得できます。このメソッドは、主キー値をMapValueとして取得します。フィールド名は、表の主キー列名と同じである必要があります。オプションをGetOptionsとして渡すこともできます。

Consistency列挙を使用して、読取り操作の整合性を設定できます。デフォルトでは、すべての読取り操作で最終的に整合性が維持されます。このタイプの読取りは、絶対的な整合性を使用する読取りよりもコストが低くなります。読取り操作のデフォルトの整合性は、NoSQLConfigのConsistencyプロパティとして設定できます。GetOptionsのConsistencyプロパティを使用して、単一のGet操作の一貫性を変更することもできます。

GetAsyncメソッドはTask<GetResult<RecordValue>>を返します。GetResultインスタンスには、返される行、行バージョンおよびその他の情報が含まれています。指定された主キーを持つ行が表に存在しない場合、行プロパティとバージョン・プロパティの両方の値がnullになります。
var client = new NoSQLClient("config.json");
..................................................
var tableName = "users";
try{
    var result = await client.GetAsync(tableName,
        new MapValue
        {
            ["id"] =1
        });
    // Continuing from the Put example, the expected output will be:
    // { "id": 1, "name": "Kim" }
    Console.WriteLine("Got row: {0}", result.row);
    // Use absolute consistency.
    result = await client.GetAsync(tableName,
        new MapValue
        {
            ["id"] =2
        }),
         new GetOptions
         {
            Consistency=Consistency.Absolute
         });
   // The expected output will be:
   // { "id": 2, "name": "Jack" }
   Console.WriteLine("Got row with absolute consistency: {0}",
        result.row);
  // Continuing from the Put example, the expiration time should be
  // 30 days from now.
  Console.WriteLine("Expiration time: {0}", result.ExpirationTime)
}
catch(Exception ex){
  // handle exceptions
}