従来のキー/データ・ペアの使用

索引ビューを作成するこの方法は、キー/値のストアに慣れている多くの開発者がビューを実装しようと直観的に考える方法です。

索引ビューを作成する別の方法については、「キーのみのレコードの使用」を参照してください。

従来のキー/データ・ペア・レコードを使用して索引ビューを作成する場合、作成するレコードは次のようになります。

  • レコードのキー・パスが、迅速に問い合せたいプライマリ・データ・レコード内のいくつかの情報である。

  • レコードのデータが、キー・パスに含まれる情報を持つレコードへのキー・パスである。

たとえば、次のスキーマに使用されるレコードがあるとします。


{
    "type": "record",
    "name": "PrimaryDBValue",
    "namespace": "oracle.kv.indexView",
    "fields": [
        {"name": "name", "type": "string", "default": ""},
        {"name": "email", "type": "string", "default": ""},
        {"name": "phone", "type": "string", "default": ""},
        {"name": "date", "type": "string", "default": ""}, 
        {"name": "org", "type": "string", "default": ""}, 
        {"name": "cost", "type": "long", "default": 0} 
    ]
}

さらに、これらのレコードが従業員の一意の識別子を使用して格納されるとします。たとえば、これらのレコードは、次のように従業員の一意の識別子で終わるキー・パスを使用します。

/Corporate/people/10012
/Corporate/people/10013
/Corporate/people/10014

この場合、"Support"という組織に属するすべての従業員を検索するために、キーが/Corporate/peopleで始まるすべてのレコードを繰り返し、適切な組織名を順に調べた後、その組織に属する従業員のリストを作成します。ストアに含まれる従業員の数に応じて、この操作には時間がかかる可能性があります。

組織名をキーにした索引ビューを作成することもできます。次に例を示します。

/IndexView/People/Organization/Engineering
/IndexView/People/Organization/Sales
/IndexView/People/Organization/Support

これらのレコードのデータ部分を処理するには、2つの方法があります。まず、レコードごとにその組織に属する従業員レコードに対応するキーのリストを含めるという方法があります。つまり、キーは次のようになります。

/IndexView/People/Organization/Support

'org'が'Support'であるすべての従業員エントリのメジャー・キーのリストを持つデータ項目を返します。Avroスキーマとして、データ項目を次の方法で表します。

{
    "type": "record",
    "name": "SecondaryDBValue",
    "namespace": "oracle.kv.indexView",
    "fields": [
        {"name": "arrays", 
         "type": {"type" : "array", "items" : "string"}, 
         "default" : []}
  ]
} 

この方法は小規模から中規模の索引には機能しますが、最終的に規模に対応できなくなります。プライマリ・キーのリストが大きすぎてコードで簡単に処理できないビューは簡単にできてしまいます。実のところ、使用可能なメモリーに収まらないような大きさにすぐに拡大してしまう可能性があります。Oracle NoSQL Databaseが設計されたデータセットのサイズを考慮すると、これは非常に現実的な考慮事項です。

各レコードが唯一のプライマリ・レコードを参照する索引ビューを作成するという方法もあります。つまり、レコードのデータ部分には、プライマリ・レコードへのキー・パスを表す単純な文字列が含まれています(この情報をキー・パス・コンポーネントの配列として伝達することもできます。)ただし、Oracle NoSQL Databaseでキーを複製することはできないため、この場合、プライマリ・レコードにある情報に基づいてキーをなんらかの形で一意にする必要があります。たとえば、組織名とユーザーのUIDの両方を含むキーを作成できます。

/IndexView/People/Organization/Support/-/10012

これは次のプライマリ・レコードを参照します。

/Corporate/People/10012