今日のすべての企業は、業務を管理するためにデータを必要としています。 よく整理されたデータのコレクションを格納するための最適なソリューションは、データベースです。 同様に、データベースにデータを格納および取得するために最も使用されているコンピューター言語は SQL (Structured Query Language) です。 このようなペースの速い現代の世界では、情報を迅速かつ効果的に見つけることができることが重要です。
NCache 主キーを使用してデータを検索する関連キーを指定することで、このニーズを満たします。 さらに、 NCache も採用 インデキシング 多くのモジュールで、キャッシュの検索パフォーマンスを向上させ、それを追跡します。 現実の状況と同様に、主キー以外の基準を使用して情報を検索できる柔軟な検索機能が必要です。
ただし、検索可能なすべての属性は、検索用に索引付けする必要があります。 インデックスを格納するために必要な追加の計算ストレージと、更新が発生するのに必要な時間は、情報取得中に節約される時間とバランスが取れています。
インデックスを定義する方法
インデックスを定義するには、 NCache は、大阪で 静的な および ダイナミック 索引付け。 どちらの場合も、カスタム クラスのクエリ インデックスは、キャッシュ内のそのクラスのアイテムを検索するために事前定義されている必要があります。 これにより、クエリを簡単に実行できるようにキャッシュに情報が格納されます。 を通じて静的インデックスを指定できます。 の監視 または定義することによって プログラムによる索引付け. ランタイム インデックスは、使用する前に構成する必要はありません。
プログラムによるインデックスのクエリ NCache
NCache いくつかの方法を使用してインデックスを構築する汎用性をユーザーに提供します。 必要に応じて、特定のフィールドまたはクラス全体のインデックスを生成できます。 NCache あなたがすることができます プログラムによるクエリ インデックス 次の注釈を使用します。
- クエリインデックス可能
- クエリインデックス付き
- QueryIndexed[“インデックス名”]
- 非クエリインデックス付き
クラスのクエリ インデックスを構成する
属性 QueryIndexable を使用して、クラスにインデックスを付けることができます。 クラス全体にインデックスを付けることができることを示すために、クラス レベルで定義されます。 クラスが QueryIndexable としてマークされると、すべてのパブリック プロパティとフィールドが自動的にインデックス化されます。 クラスのプライベート フィールドにインデックスを付ける必要がある場合は、QueryIndexed アノテーションを使用して明示的に示す必要があります。
次の例は、という名前のクラスのフィールドのインデックス付けを示しています プロダクト QueryIndexable 属性を使用します。 これでインデックスします ID、名前、数量、ManufacturerName、 および 単価.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[QueryIndexable] class Product { public int ID { get; set; } public string Name { get; set; } public string Quantity { get; set; } public string ManufacturerName { get; set; } public Decimal UnitPrice { get; set; } } |
索引付けされたクラスのオブジェクトがキャッシュに追加されます。 以下のコード例は、オブジェクトを取得する方法を示しています。 プロダクト クエリを介して上記のクラス。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// Pre-conditions: Cache is already connected // Products are already present in the cache // Provide Fully Qualified Name (FQN) of your Product class // Create a query string query = "SELECT $Value$ FROM FQN.Product WHERE Quantity < ?"; // Use QueryCommand for query execution QueryCommand queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("Quantity", 500); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Checking if the result set is not empty if (reader.FieldCount > 0) { // Getting all Products with Quantity less then 500 while (reader.Read()) { Product product = reader.GetValue<Product>(1); // Perform required operations } } else { // Null query result set retrieved } |
クラスの属性またはフィールドのすべてまたは大部分を照会して索引付けする場合にのみ、この戦略を使用する必要があります。 そうしないと、不要な特性をインデックス化する可能性があり、最終的に余分なメモリを消費する可能性があるため、推奨されません。
特定のプロパティのクエリ インデックスを構成する
クラスのいくつかのプロパティまたはフィールドのみにインデックスを付ける必要がある場合は、 QueryIndexed 属性 パフォーマンスとメモリのコストを節約できるためです。 マークされたプロパティまたはフィールドにインデックスを付けることができることを示すために、プリミティブ プロパティまたはフィールド レベルで定義されます。 注釈付きのフィールドまたは属性は、自動的に索引付けされます。
クラス フライト 以下に示す例は、クラス全体にインデックスを付けずに、QueryIndexed を使用して目的の属性にインデックスを付ける方法を示しています。 ID フィールドと TotalPassengers フィールドについては、 NCache 自動的にインデックスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Flight { [QueryIndexed] public int ID { get; set; } [QueryIndexed] public int TotalPassangers { get; set; } public string FlightType; private string DepartAirport { get; set; } public AirLine Airline { get; set; } } |
クラス内の少数のプロパティまたはフィールドのみにインデックスを付ける必要がある場合は、このメソッドを使用してインデックスを作成できます。 必要なプロパティまたはフィールドを選択し、それらのみにインデックスを付けるオプションが提供されます。 この注釈により、クラス全体をクエリした結果として発生する可能性があるメモリの問題を回避できますが、クラスからいくつかの属性をクエリするだけで済みます。
ユーザー提供のクエリ インデックス構成
選択的なインデックス作成に QueryIndexed プロパティを使用すると、このデフォルトの動作が発生するため、インデックス名はフィールド名と同じになります。 QueryIndexed(“indexName”) アノテーションを介して、 NCache では、インデックスが作成されるフィールドまたはプロパティに一意の名前を設定できます。 その場合、コンストラクターからのユーザー指定の名前を使用してインデックスが作成されます。 これは、複数の言語でアプリケーション コードを記述し、フィールド名が異なる可能性がある場合に役立ちます。
クラスで 職員、 フィールド EmployeeId、DateOfBirth, および 給与 QueryIndexed 属性でマークされているため、インデックスが作成されます。 ただし、フィールドを包含するインデックスを作成するには、 EmployeeId と DateOfBirth、 コンストラクターでのユーザー指定の名前 「ID」 および 「DOB」 使用されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Employee { public string Name { get; set; } [QueryIndexed("ID")] public int EmployeeId { get; set; } [QueryIndexed("DOB")] public string DateOfBirth { get; set; } [QueryIndexed] public double Salary { get; set; } public string Position { get; set; } } |
インデックス作成からのフィールドの除外
クラスがインデックス化されている場合、NonQueryIndexed 属性を使用して、オプションのプロパティまたはフィールドのインデックス化を停止できます。 クラスが QueryIndexable として宣言されている場合、属性は 非クエリインデックス付き プロパティまたはフィールドにインデックスを付けないことを指定するために、プリミティブ プロパティまたはフィールドのレベルで定義されます。 パブリック フィールドとプロパティはすべて、自動的にインデックスが作成されます。 NonQueryIndexed 属性は、インデックスを作成しないフィールドを示します。
次の例は、フィールドを明示的に宣言する方法を示しています 顧客名 NonQueryIndexed として 注文 クラスは索引付けされています。 これにより、注釈付きフィールドのインデックス作成が無視されます。
1 2 3 4 5 6 7 8 9 10 11 12 |
[QueryIndexable] class Order { public int OrderId { get; set; } public DateTime OrderDate { get; set; } public string OrderDestination { get; set; } [NonQueryIndexed] public string CustomerName { get; set; } } |
フィールド 顧客名 キャッシュには追加されません。 クエリを実行すると、次の値が取得されます 顧客名 null として、他のすべてのフィールドを明示的に取得する必要があります。
一部のプロパティを除くすべてのプロパティにインデックスを付ける必要がある場合は、QueryIndexable と NonQueryIndexed を組み合わせることができます。 これは、大きなデータがあり、パフォーマンスを損なわないように小さな部分だけを除外したい場合に役立つ可能性があります。
まとめ
NCache 確立された基準に従ってインデックスをクエリできる高速で効率的なメカニズムを提供します。 また、この機能を使用すると、いくつかのフィールドにインデックスを付けるだけでよいため、クエリでクラス全体にインデックスを付けることに起因するメモリの問題について心配する必要がなくなります。 間違いなく、 NCacheのさまざまなクエリ インデックス アノテーションは本当にありがたいものです。 他にもチェックできます NCache 機能を使用 当社のウェブサイトから。