データの読取り
表からデータを読み取る方法について学習します。
ノート:
まず、クライアント・ドライバを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
フィールドを使用して、単一のリクエストで変更できます。
- すべての読取り操作のデフォルトの整合性を変更します。
cfg:= nosqldb.Config{ RequestConfig: nosqldb.RequestConfig{ Consistency: types.Absolute, ... }, ... } client, err:=nosqldb.NewClient(cfg)
- 単一読取り操作の整合性を変更します。
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
}