セカンダリインデックスを使用したデータアクセス性の向上
Amazon DynamoDB によって、プライマリキーの値を指定して、テーブルの項目に高速アクセスすることが可能になります。しかし多くのアプリケーションでは、プライマリキー以外の属性を使って、データに効率的にアクセスできるようにセカンダリ(または代替)キーを 1 つ以上設定することで、メリットが得られることがあります。これに対応するために、1 つのテーブルで 1 つ以上のセカンダリインデックスを作成して、それらのインデックスに対して Query または Scan リクエストを実行することができます。
セカンダリインデックス は、テーブルからの属性のサブセットと、 Query オペレーションをサポートする代替キーで構成されるデータ構造です。 Query をテーブルで使用する場合と同じように、 Query を使用してインデックスからデータを取得できます。テーブルには、複数のセカンダリインデックスを含めることができます。これにより、アプリケーションは複数の異なるクエリパターンにアクセスできます。
また、テーブルを Scan するのと同じように、インデックスも Scan できます。
すべてのセカンダリインデックスは 1 つのテーブルのみに関連付けられ、そこからデータを取得します。これはインデックスのベーステーブルと呼ばれます。インデックスを作成する場合は、インデックスの代替キー (パーティションキーおよびソートキー) インデックスとは インデックスとは を定義します。また、ベーステーブルからインデックスに射影 (コピー) したい属性を定義します。DynamoDB インデックスとは では、これらの属性とベーステーブルからのプライマリキー属性がインデックスにコピーされます。次に、テーブルに対してクエリまたはスキャンを実行する場合と同様に、インデックスに対してクエリまたはスキャンを実行します。
DynamoDB は、次の 2 種類のセカンダリインデックスをサポートしています。
特徴 | グローバルセカンダリインデックス | ローカルセカンダリインデックス |
---|---|---|
キースキーマ | グローバルセカンダリインデックスのプライマリキーはシンプル (パーティションキー) または複合 (パーティションキーとソートキー) のいずれかとすることができます。 | ローカルセカンダリインデックスのプライマリキーは複合 (パーティションキーとソートキー) である必要があります。 | インデックスとは
キーの属性 | インデックスパーティションキーとソートキー (存在する場合) は、文字列、数値、またはバイナリ型の任意のベーステーブル属性とすることができます。 | インデックスのパーティションキーは、ベーステーブルのパーティションキーと同じ属性です。ソートキーは、文字列、数値、またはバイナリ型の任意のベーステーブル属性とすることができます。 |
パーティションキー値ごとのサイズ制限 | グローバルセカンダリインデックスのサイズ制限はありません。 | パーティションキーの値ごとに、すべてのインデックス付き項目の合計サイズが、10 GB 以下である必要があります。 |
オンラインインデックスオペレーション | グローバルセカンダリインデックスは、テーブルの作成と同時に作成できます。また、新しいグローバルセカンダリインデックスを既存のテーブルに追加したり、既存のグローバルセカンダリインデックスを削除したりすることもできます。詳細については、「」を参照してくださいグローバルセカンダリインデックスの管理 | ローカルセカンダリインデックスは、テーブルの作成と同時に作成されます。ローカルセカンダリインデックスを既存のテーブルに追加したり、既存のローカルセカンダリインデックスを削除したりすることはできません。 |
クエリとパーティション | グローバルセカンダリインデックスでは、すべてのパーティションでテーブル全体に対してクエリを実行できます。 | ローカルセカンダリインデックスでは、クエリのパーティションキー値で指定された 1 つのパーティションに対してクエリを実行できます。 |
読み込み整合性 | グローバルセカンダリインデックスのクエリは結果整合性をサポートします。 | ローカルセカンダリインデックスのクエリを実行するとき、結果整合性または強い整合性のどちらかを選択できます。 |
プロビジョニングされたスループットの消費 | 各グローバルセカンダリインデックスには、読み込み/書き込みアクティビティに対する独自のプロビジョニングされたスループット設定があります。グローバルセカンダリインデックスのクエリまたはスキャンでは、ベーステーブルからではなく、インデックスからキャパシティーユニットを使用します。同じことが、テーブルへの書き込みによるグローバルセカンダリインデックスの更新にも当てはまります。 | ローカルセカンダリインデックスのクエリまたはスキャンでは、ベーステーブルから読み込みキャパシティーユニットを使用します。テーブルに書き込むと、そのローカルセカンダリインデックスも更新されます。この更新では、ベーステーブルから書き込みキャパシティーユニットを使用します。 |
射影される属性 | グローバルセカンダリインデックスのクエリまたはスキャンでは、インデックスに射影された属性のみをリクエストできます。DynamoDB では、テーブルから属性をフェッチしません。 | ローカルセカンダリインデックスをクエリまたはスキャンする場合、インデックスに射影されていない属性をリクエストできます。DynamoDB は、これらの属性をテーブルから自動的に取得します。 |
セカンダリインデックスを持つテーブルを複数作成する場合は、順次作成する必要があります。たとえば、最初のテーブルを作成し、そのテーブルが ACTIVE になるまで待ちます。次のテーブルを作成し、そのテーブルが ACTIVE になるまで待ちます。セカンダリインデックスを持つ複数のテーブルを同時に作成しようとすると、DynamoDB は LimitExceededException を返します。
インデックスのキースキーマ。インデックスキースキーマの各属性は、型が String 、 Number 、または Binary の最上位属性である必要があります。ドキュメントとセットを含むその他のデータ型は使用できません。キースキーマのその他の要件は、インデックスの種類によって異なります。
配列要素へのアクセスとインデックス
配列では複数の値を保管できるたま、値の保管場所も複数になります。この値を保管する場所のことを要素と呼びます。配列を作成するときに要素の数を指定して作成します。それぞれの要素にはインデックスと呼ばれる 0 から始まる番号が付けられており、インデックスを指定することで指定の要素へアクセスすることができます。ここではインデックスを指定して配列要素へアクセスし、要素に値を格納したり取り出したりする方法について解説します。
(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)
要素とインデックスについて
複数の要素の中で指定した要素に対して値を格納したり、格納した値を参照したりすることができますが、複数の要素を区別できるようにそれぞれの要素に対してインデックスと呼ばれる番号が割り当てられています。インデックスは 0 から始まり、 1, 2, . と順番に要素に割り当てられます。
存在しないインデックスを指定した場合
インデックスは 0 から始まり順番に要素に割り当てられます。例えば要素の数が 3 だった場合は、インデックスは先頭の要素から順に 0, 1, 2 と割り当てられます。もし存在しないインデックスを指定して要素に値を代入した場合、コンパイル時にはエラーとはなりませんがプログラムを実行したときにエラーとなります。
コンパイルの時にはエラーとなりませんが、プログラムを実行すると「Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2」というエラーが発生します。
インデックスを変数で指定する
インデックスは int 型の整数の値です。数値を直接指定してもいいですが、 int 型の値を格納した変数を指定することもできます。変数を利用することで繰り返し処理を使って配列に格納された値を順に取り出すことが簡潔に記述できます。
3 つの要素にそれぞれ格納した値を、 for 文を使って順番にインデックスを指定して要素から値を参照し画面に表示しています。このような使い方ができる点が配列のメリットです。
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample4-1.java という名前で保存します。
javac -encoding UTF-8 JSample4_1.java
int 型の配列を宣言し、 4 つの要素を持つ配列を作成しました。配列のそれぞれの要素に対して数値を代入したあと、 for 文を使って順に取り出して画面に表示しています。
インデックスとは
ワールドハンディキャップシステム(WHS)は、世界に存在していたハンディキャップシステム を統一し、単一のハンディキャップ規則をつくることにより、プレー方法やプレー場所に関わらず、技量の異なるゴルファーが公正且つ公平に競い合えるようにすることを目的としています。 これまで世界で運用されていた6つのハンディキャップシステムは、それぞれの地域でとても有効に機能していましたが、グローバルな視点から見ると、これらのシステムはそれぞれ特徴が異なるため、同じ技量のプレーヤー同士でもハンディキャップの数値に差異が生じることが起こり得ます。このことは、アンダーハンディ競技に参加するプレーヤーや競技運営者にとって、本来必要のない苦労や難題となっていました。世界統一のWHSは、ハンディキャップの正確性と持ち運び可能性という点において、新たな道を切り開きます。
WHSの取り組みを通して、既存のハンディキャップ制度運営団体すべてが一致協力し、それぞれの既存システムが持つ利点を検討。そして、現在世界中で行われているプレー方法、および今後予測される新しいプレー方法に適し且つ近代的なシステム構築を目指して協議してきました。 WHSは、誰でも受け入れ、理解し易く、運用し易く、且つ正確性と完全性を損なうことのないように設計されています。究極的には、このことは初心者から上級者まで、またレジャーゴルファーから競技ゴルファーまで、ゴルファー一人ひとりにとって強固な基盤をゴルフというスポーツに築き、ゴルフ参加 率の向上を通してゴルフの発展に寄与するものです。 ハンディキャップの管理と監督は、引き続き各ナショナル協会およびハンディキャップ管理団体が責任をもって担い、このことによって地域毎のシステムの信頼性を確保します。また、これらの団体は、地域毎のゴルフ文化に適合するようにシステムをカスタマイズできる裁量が認められます。例えば、WHSは、なんらかの方法でスコアを裏付けることで、幅広い競技方法をハンディキャップ査定に採用できるようにしており、ナショナル協会とハンディキャップ管理団体はその中から、地域のゴルフ文化に適応し且つできるだけ多くのスコア提出を促進するという観点に基づいて、適切な競技方法を選択することができます。
※コースHDCPの計算例『CR-Par調整』”有り”と”無し”の比較(4:30~)
HDCPインデックス:15.0 Green TeeでのCR-Par調整有りの場合のCHは「13」ではなく「12」 になります。
【ストロークコントロール(ESC)】
【スコアカード:コースレーティング72.5/スロープレーティング124】
【ハンディキャップインデックス算定に必要なスコア枚数と使用するディファレンシャル枚数】
例1:2014年3月10日にプレーしたスコアは、4月30日までは登録可能ですが、5月1日以降は登録できません。
例2: 2014年9月15日にプレーしたスコアは10月31日までは登録可能ですが、11月1日以降は登録できません。
【スコアタイプとは】
スコアタイプ | インデックスとは略称 | 使用するディファレンシャル枚数 |
ホーム | ホームまたは所属倶楽部でプレーしたスコア | |
アウェイ | A | ホームまたは所属倶楽部以外でプレーしたスコア |
連結9ホールスコア | C | 2つの9ホールスコアが連結された18ホールスコア(※Cは自動表示されます) |
ペナルティースコア | P | スコアを提出しないプレーヤーに対して、ハンディキャップ委員会が提出するスコア |
トーナメントスコア※ | T | トーナメントスコアの条件を満たしている競技でプレーしたスコア(※トーナメントスコア参照) |
※トーナメントスコアの条件を満たしている競技とは
【ハンディキャップ査定のために提出できるスコア】
【ハンディキャップ査定に採用できないスコア】
例:Aカントリー倶楽部 男子バックティー
コースレーティング:72.1 インデックスとは スロープレーティング:132
JGA/USGAハンディキャップインデックス 6.5
下図のA のように、光が屈折率の高い「物質1」から屈折率の低い「物質2」に到達すると、その角度を変えて進入していきます。光の進入角度がB のように浅くなると、透過する角度も小さくなり、境界面に対して平行に近くなります。そこでさらに進入角度を小さくすると、C のように光は「物質2」に透過することができなくなり、すべての光が境界面で反射されることになります。このようにすべての光が反射されることを全反射と呼び、このときの入射角度を臨界角と呼びます。
主要な光ファイバは5種類
現在、情報通信用途に最も使用されている光ファイバは、コア・クラッドとも石英ガラスでできています。光ファイバは、光の伝搬するモードの数によって「マルチモード」と「シングルモード」の2種類に分類されます。さらに、マルチモード光ファイバは、コアの屈折率分布によって、「ステップインデックス」と「グレーデッドインデックス」に分けられます。また、シングルモード光ファイバは、零分散波長により、「汎用シングルモード」と「分散シフト・シングルモード」、「非零分散シフト・シングルモード」に分けられます。これらのうち、一般的によく用いられるのは、主に「グレーデッドインデックス」と「汎用シングルモード」です。 | ![]() |
心線の種類は、主に3種類
光ファイバは石英ガラスでできていて非常に脆弱であり、また、通常125μm(0.125mm)と極めて細いため、周囲に保護被覆を被せてあります。この被覆を被せた状態を心線と呼び、
大きく (インデックスとは 1)0.25mm素線 (2)0.9mm心線 (3)テープ心線 の三種類に分類されます。
配列要素へのアクセスとインデックス
配列では複数の値を保管できるたま、値の保管場所も複数になります。この値を保管する場所のことを要素と呼びます。配列を作成するときに要素の数を指定して作成します。それぞれの要素にはインデックスと呼ばれる 0 から始まる番号が付けられており、インデックスを指定することで指定の要素へアクセスすることができます。ここではインデックスを指定して配列要素へアクセスし、要素に値を格納したり取り出したりする方法について解説します。
(2022 インデックスとは 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)
要素とインデックスについて
複数の要素の中で指定した要素に対して値を格納したり、格納した値を参照したりすることができますが、複数の要素を区別できるようにそれぞれの要素に対してインデックスと呼ばれる番号が割り当てられています。インデックスは 0 から始まり、 1, 2, . と順番に要素に割り当てられます。
存在しないインデックスを指定した場合
インデックスは 0 から始まり順番に要素に割り当てられます。例えば要素の数が 3 だった場合は、インデックスは先頭の要素から順に 0, 1, 2 と割り当てられます。もし存在しないインデックスを指定して要素に値を代入した場合、コンパイル時にはエラーとはなりませんがプログラムを実行したときにエラーとなります。
コンパイルの時にはエラーとなりませんが、プログラムを実行すると「Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2」というエラーが発生します。
インデックスを変数で指定する
インデックスは int 型の整数の値です。数値を直接指定してもいいですが、 int 型の値を格納した変数を指定することもできます。変数を利用することで繰り返し処理を使って配列に格納された値を順に取り出すことが簡潔に記述できます。
3 つの要素にそれぞれ格納した値を、 for 文を使って順番にインデックスを指定して要素から値を参照し画面に表示しています。このような使い方ができる点が配列のメリットです。
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample4-1.java という名前で保存します。
javac -encoding UTF-8 JSample4_1.java
int 型の配列を宣言し、 4 つの要素を持つ配列を作成しました。配列のそれぞれの要素に対して数値を代入したあと、 for 文を使って順に取り出して画面に表示しています。
コメント