データの読取り
表からデータを読み取る方法について学習します。
ノート:
まず、クライアント・ドライバをOracle NoSQL Databaseに接続し、接続してから他のステップを実行します。このトピックでは、クライアント・ドライバの接続と表の作成に関するステップは省略しています。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
}
NosqlRepository findById()
、findAllById()
、findAll()
から、またはNosqlTemplate find()
、findAll()
、findAllById()
を使用してデータを読み取ります。詳細は、SDK for Spring Data APIリファレンスを参照してください。
ノート:
まず、Oracle NoSQL Databaseの接続詳細を指定するために、AbstractNosqlConfiguration
クラスを拡張するAppConfig
クラスを作成します。詳細は、「NoSQL接続の取得」を参照してください。
この項では、NosqlRepository findAll()
メソッドを使用します。
UsersRepository
インタフェースを作成します。このインタフェースは、NosqlRepository
インタフェースを拡張して、そのクラスの主キーのエンティティ・クラスとデータ型をパラメータ化された型としてNosqlRepository
インタフェースに提供します。このNosqlRepository
インタフェースは、データベースからデータの取得に使用されるメソッドを備えています。import com.oracle.nosql.spring.data.repository.NosqlRepository;
/* The Users is the entity class and Long is the data type of the primary key in the Users class.
This interface provides methods that return iterable instances of the Users class. */
public interface UsersRepository extends NosqlRepository<Users, Long> {
Iterable<Users> findAll();
}
Users
表からすべての行を選択し、反復可能なインスタンスに指定します。反復可能オブジェクトからの出力に値を出力します。@Autowired
private UsersRepository repo;
/* Select all the rows in the Users table and provides them into an iterable instance.*/
System.out.println("\nfindAll:");
Iterable < Users > allusers = repo.findAll();
/* Print the values to the output from the iterable object.*/
for (Users u: allusers) {
System.out.println(" User: " + u);
}
findAll:
User: Users{id=1, firstName=John, lastName=Doe}
User: Users{id=2, firstName=Angela, lastName=Willard}