実際の複雑なシナリオでは、アプリケーションは多くの場合、主キーを介して検索するのではなく、特定の属性に基づいてデータをフェッチする必要があります。 SQL を使用してデータをクエリすると、実行時にカスタム ロジックに基づいてデータベースからデータを簡単に取得できます。
NCache は、指定された基準に従ってキャッシュを検索し、必要な結果セットを返すことができる SQL クエリ メカニズムをサポートしています。 NCache ネイティブSQL構造化言語に非常に近いクエリ言語を使用しているため、インデックスに登録されたキャッシュデータを簡単にクエリできます。
NCache ADO.NETインターフェイスと同様のクエリインターフェイスを使用して、キャッシュからデータを検索または削除するためのさまざまなクエリメソッドをサポートします。 でサポートされている最も重要なクエリメソッドのいくつかを次に示します。 NCache.
string query = "SELECT * FROM FQN.Product WHERE ProductID > ?";
var queryCommand = new QueryCommand(query);
queryCommand.Parameters.Add("ProductID",50000);
ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand, false, 0);
if (reader.FieldCount > 0)
{
while (reader.Read())
{
string result = reader.GetValue<string>(0);
}
}
String query = "SELECT * FROM FQN.Product WHERE ProductID > ?";
QueryCommand queryCommand = new QueryCommand(query);
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("ProductID", 50000);
queryCommand.getParameters().putAll(parameters);
CacheReader cacheReader = cache.getSearchService().executeReader(queryCommand);
if (cacheReader.getFieldCount() > 0) {
while (cacheReader.read()) {
cacheReader.getString(0);
}
NCache SQL クエリに対して投影する列を指定できます。 以下に挙げるのは、以下でサポートされる基本的で最も一般的に使用される投影です。 NCache.
SELECT COUNT(*) FROM FQN.Product WHERE UnitsInStock > ?
参照する オブジェクトのSQL検索 。
これらの演算子は、データの処理と操作のために SQL データベース全体で使用および再利用されます。 NCache 目的の結果を効率的に取得できるようにするさまざまなSQL演算子をサポートします。 これらの関数は次のとおりです。
string query = "SELECT OrderID FROM FQN.Order WHERE OrderDate = ?";
var queryCommand = new QueryCommand(query);
DateTime orderDate = new DateTime(2022, 01, 01);
queryCommand.Parameters.Add("OrderDate", orderDate);
ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand);
if (reader.FieldCount > 0)
{
while (reader.Read())
{
int orderID = reader.GetValue<int>("OrderID");
Console.WriteLine($"Order: {orderID} was placed on 1st January, 2022.");
}
}
else
{
Console.WriteLine($"No orders were placed on 1st January 2022.");
}
String query = "SELECT OrderID FROM FQN.Order WHERE OrderDate = ?";
QueryCommand queryCommand = new QueryCommand(query);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date orderDate;
orderDate = sdf.parse("2022-01-01");
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("OrderDate", orderDate);
queryCommand.getParameters().putAll(parameters);
CacheReader cacheReader = cache.getSearchService().executeReader(queryCommand);
if (cacheReader.getFieldCount() > 0) {
while (cacheReader.read()) {
int orderID = cacheReader.getInt(cacheReader.getOrdinal("OrderID"));
System.out.println("Order: " + orderID + " was placed on 1st January, 2022.");
}
} else {
System.out.println("No orders were placed on 1st January 2022.");
}
SQL演算子は、論理演算と比較演算を実行するためのWHERE句の予約キーワードです。 NCache では、カスタム条件に従ってデータをクエリするための次の SQL 演算子のサポートが提供されます。
SELECT ProductName, UnitsAvailable From FQN.Product WHERE Category IN ('Beverages', 'Confections')