サービスの計画
Oracle NoSQL Database Cloud Serviceサービスを作成する前に、サービスを計画します。開始する前に、ここで説明されている質問について検討し、実行することを決定してください。
この記事には次のトピックが含まれます:
開発者の概要
サービス・アーキテクチャの概要を把握し、アプリケーション開発のニーズを満たすSDK/ドライバを選択します。
NDCS Developerのタスク
Oracle NoSQL Database Cloud Service (NDCS)は、完全なHAサービスです。これは、低レイテンシのレスポンス時間、柔軟なデータ・モデル、および動的ワークロード向けの柔軟なスケーリングを必要とする非常に要求の厳しいアプリケーション向けに設計されています。完全なマネージド・サービスとして、Oracleはソフトウェアのアップグレード、セキュリティ・パッチ、ハードウェア障害、パッチ適用など、すべての管理タスクを処理します。
OCIコンソール- 表の作成、表の変更、表の削除、データのロード、索引の作成、索引の削除、基本的な問合せの削除、表容量の変更およびメトリックの表示を迅速に行うことができます。
Oracle NoSQL Database Cloud Serviceの制限
Oracle NoSQL Database Cloud Serviceに適用される現在の制限。
スコープ | 説明 | 値 |
---|---|---|
表 |
テナント当たりの最大合計ストレージ・サイズ。1つ以上の表に使用される合計領域が、この値を超えることはできません。 |
5TB |
表名 |
最大文字数、使用可能な文字、および先頭の文字。 |
表名には最大256文字を使用できます。すべての名前は文字(a-z、A-Z)で始める必要があります。後続の文字には、文字(a-z、A-Z)、数字(0-9)またはアンダースコアを使用できます。 |
表 |
表のプロビジョニング中の最大読取りおよび書込みスループット。 |
表当たり40,000読取りユニットおよび20,000書込みユニット。 |
表 |
On Demand Capacityを使用して表をプロビジョニングする際の最大読取りおよび書込みスループット。 |
表当たり10,000読取りユニットおよび5,000書込みユニット。 |
テナント |
On Demand Capacityの表の数。 |
3 |
表 |
表のプロビジョニング・モードを「プロビジョニング済」から「オンデマンド」に、またはその逆に変更します。 |
1日1回のみ変更できます。 |
リージョン |
表の最大数 |
30 |
表 |
列の最大数 |
50 |
表 |
表スキーマ更新の最大数 |
100 |
表 |
索引の最大数 |
5 |
表 |
スループットおよびストレージ制限の最大変更回数 |
Oracleでは次のことが許可されます:
|
索引名 | 最大文字数、使用可能な文字、および先頭の文字。 |
索引名には最大64文字を使用できます。すべての名前は文字(a-z、A-Z)で始める必要があります。後続の文字には、文字(a-z、A-Z)、数字(0-9)またはアンダースコアを使用できます。 |
リクエスト |
|
50 |
リクエスト |
|
25MB |
フィールド名 | 最大文字数、使用可能な文字、および先頭の文字。 | フィールド名には最大64文字を使用できます。すべての名前は文字(a-z、A-Z)で始める必要があります。後続の文字には、文字(a-z、A-Z)、数字(0-9)またはアンダースコアを使用できます。 |
フィールド |
索引キーの最大サイズ。 |
64バイト |
フィールド |
主キーの最大サイズ。 |
64バイト |
行 |
行の最大サイズ。 |
512KB |
問合せ |
問合せ文字列の最大長。 |
10KB |
リージョン |
サポートされているDDL操作の最大レート。 |
4/分 |
リージョン |
スループットおよびデータ・ストレージ・リソースの最大値。 |
Oracleでは、リージョンごとに次のことが許可されます:
Oracleでは、1つのテナントにつき最大ストレージ・サイズとして5TBが許可されます。リージョンにストレージ・サイズが5TBの単一の表を含めることは可能ですが、その場合、リージョンは別の表を作成できません。複数の表を含める場合は、それらのすべての表のデータが最大ストレージ・サイズの5TB以内になるようにします。 |
容量の見積り
Oracle NoSQL Database Cloud Serviceのスループットおよびストレージ容量を見積る方法について学習します。
計算に関する基本事項
サービスのスループットおよびストレージを見積る方法を学習する前に、スループットおよびストレージ・ユニットの定義を確認してみましょう。
-
書込みユニット(WU): 1書込みユニットは、1秒当たり最大1キロバイト(KB)のデータのスループットとして定義されます。書込み操作とは、レコードの挿入、更新または削除を発生させるOracle NoSQL Database Cloud Service APIコールです。NoSQL表には、1秒間に使用できる書込みユニット数を指定する書込み制限値があります。また、索引の更新によっても書込みユニットが消費されます。
たとえば、レコード・サイズが1 KB未満の場合は、書込み操作に1WUが必要です。レコード・サイズが1.5KBの場合は、書込み操作に2WUが必要です。
-
読取りユニット(RU): 1読取りユニットは、最終的に一貫性のある読取り操作のために使用される、1秒当たり最大1KBのデータのスループットとして定義されます。NoSQL表には、1秒間に使用できる読取りユニット数を指定する読取り制限値があります。
たとえば、レコード・サイズが1KB未満の場合は、最終的に一貫性のある読取り操作のために1RUが必要です。レコード・サイズが1.5KBの場合、最終的に一貫性のある読取り操作のために2RU、絶対的に一貫性のある読取り操作のために4RUが必要です。
-
ストレージ容量: 1ストレージ・ユニットは、1ギガバイト(GB)のデータ・ストレージです。
-
絶対的な一貫性: 返されるデータは、データベースに最後に書き込まれたデータである必要があります。
-
最終的な一貫性: 返されるデータは、データベースに最後に書き込まれたデータでない場合があります。データに対する新しい更新がなければ、最終的にそのデータへのすべてのアクセスで、最後に更新された値が返されます。
Oracle NoSQL Database Cloud Serviceでは、オンデマンド容量を使用するときに、動的ワークロードのニーズを満たすために読取りおよび書込み容量が自動的に管理されます。容量がオンデマンド容量制限を超えないことを検証することをお薦めします。詳細は、Oracle NoSQL Database Cloud Serviceの制限を参照してください。
容量ユニットに影響を与える要因
容量ユニットをプロビジョニングする前に、読取り、書込みおよびストレージ容量に影響を与える次の要因を考慮することが重要です。
-
レコード・サイズ: レコード・サイズの拡大に伴い、データの書込みまたは読取りで消費される容量ユニットも増加します。
-
データ一貫性: 絶対的な一貫性読取りは、最終的な一貫性読取りの2倍のコストがかかります。
-
セカンダリ索引: 表で既存のレコードが変更(追加、更新または削除)されると、セカンダリ索引の更新で書込みユニットが消費されます。書込み操作用にプロビジョニングされる合計スループット・コストは、表への書込みとローカル・セカンダリ索引の更新で消費される書込みユニットの合計です。
-
データ・モデリングの選択: スキーマレスJSONの場合、各ドキュメントは自己記述型であり、全体的なレコード・サイズにメタデータのオーバーヘッドが追加されます。固定スキーマ表の場合、各レコードのオーバーヘッドは1バイトです。
-
問合せパターン: 問合せ操作のコストは、取得される行数、述語の数、ソース・データのサイズ、予測、および索引の存在によって決まります。最もコストが低い問合せでは、システムがプライマリ索引とセカンダリ索引を利用できるように、シャード・キーまたは索引キーを(関連する索引とともに)指定します。アプリケーションは、様々な問合せを試行して消費されるスループットを調べ、操作のチューニングに役立てることができます。
実例: アプリケーション・ワークロードを見積る方法
E-Commerceアプリケーションの例を参考にして、1秒当たりの読取りおよび書込みを見積る方法について学習します。この例では、Oracle NoSQL Database Cloud Serviceを使用して、アプリケーションの製品カタログ情報を格納します。
-
アプリケーションのデータ・モデル(JSONまたは固定表)、レコード・サイズおよびキー・サイズを確認します。
E-CommerceアプリケーションがJSONデータ・モデルに準拠しており、開発者が2つの列を含む単純な表を作成したと想定します。1つはレコード識別子(主キー)で、もう1つは製品の機能と属性を示すJSONドキュメントです。JSONドキュメントは次のとおりで、1KB (0.8KB)未満です:
{ "additionalFeatures": "Front Facing 1.3MP Camera", "os": "Macintosh OS X 10.7", "battery": { "type": "Lithium Ion (Li-Ion) (7000 mAH)", "standbytime" : "24 hours" }, "camera": { "features": ["Flash","Video"], "primary": "5.0 megapixels" }, "connectivity": { "bluetooth": "Bluetooth 2.1", "cell": "T-mobile HSPA+ @ 2100/1900/AWS/850 MHz", "gps": true, "infrared": false, "wifi": "802.11 b/g" }, "description": "Apple iBook is the best in class computer for your professional and personal work.", "display": { "screenResolution": "WVGA (1280 x 968)", "screenSize": "13.0 inches" }, "hardware": { "accelerometer": true, "audioJack": "3.5mm", "cpu": "Intel i7 2.5 GHz", "fmRadio": false, "physicalKeyboard": false, "usb": "USB 3.0" }, "id": "appleproduct_1", "images": ["img/apple-laptop.jpg"], "name": "Myshop.com : Apple iBook", "sizeAndWeight": { "dimensions": [ "300 mm (w)", "300 mm (h)", "12.4 mm (d)" ], "weight": "1250.0 grams" }, "storage": { "hdd": "750GB", "ram": "8GB" } }
アプリケーションにこのようなレコードが100,000件あり、主キーのサイズが約20バイトであると想定します。また、セカンダリ索引を介してレコードを読み取る問合せが存在すると想定します。たとえば、画面サイズが13インチのすべてのレコードを検索する場合です。そのために、
screenSize
フィールドに索引が作成されています。この情報を要約すると、次のようになります:
表 表当たりの行数 表当たりの列数 キー・サイズ(バイト) 値サイズ(バイト) (すべての列の合計) 索引 索引キー・サイズ(バイト) 1
100000
2
20
1KB
1
20
-
表に対する操作(通常はCRUD操作と索引読取り)および予測される(秒当たりの)レートのリストを確認します。
操作 (秒当たりの)操作数 例 レコードの作成。
3
製品を作成する場合。
主キーを使用したレコードの読取り。
200
製品IDを使用して製品の詳細を読み取る場合。
セカンダリ索引を使用したレコードの読取り。
1
画面サイズが13インチのすべての製品をフェッチする場合。
レコードに対する属性の更新または追加。
5
カメラの製品説明を更新する場合
または
カメラの重量に関する情報を追加する場合。
レコードの削除。
5
既存の製品を削除する場合。
-
読取りおよび書込みの消費量(KB)を確認します。
操作 想定(ある場合) 式 読取り消費量(KB) 書込み消費量(KB) ノート/説明 レコードの作成。 条件チェックを実行せずにレコードが作成されると想定します(存在する場合)。 Record size (rounded to next KB) + 1 KB(index) * (number of indexes)
0 1 KB + 1 KB (1 ) = 2 KB レコード・サイズは1KB (JSON列は0.8KB、キー列は20バイト)で、サイズは1KBの索引が1つあります。
オプションを指定してputコマンドを実行すると、作成操作によって読取りユニットのコストが発生します。行の最新バージョンを読み取ることを保証する必要があるため、絶対整合性読取りが使用されます。このような場合は、読取りユニット式で乗数2を使用します。読取りユニット・コストを決定する様々なオプションは次のとおりです。- Option.IfAbsentまたはOption.IfPresentを使用する場合、読取り消費= 2
- setReturnRowを使用する場合、読取り消費= 2 *レコード・サイズ
- Option.IfAbsentおよびsetReturnRowを使用する場合、読取り消費= 2 *レコード・サイズ
主キーを使用したレコードの読取り。 Record size round up to KB
レコード・サイズ = 1KB 0 レコード・サイズは1KBです セカンダリ索引を使用したレコードの読取り。 100件のレコードが返されると想定します。 record_size * number_of_records_matched
11KB * 100 = 100KB
100KB + 10KB = 110KB
0 セカンダリ索引の料金はありません。レコード・サイズは1KBです。100レコードの場合、100KBです。
追加の10KBは、返されるバッチの数や、問合せに設定されたサイズ制限に応じて、可変オーバーヘッドです。
オーバーヘッドは、バッチの最後のキーを読み取るコストです。これは、maxReadKBおよびレコード・サイズに依存する変数です。オーバーヘッドは、(numBatches - 1) *キー読取りコスト(1KB)までです。
既存レコードの更新 更新されたレコードのサイズが古いレコードのサイズ(1KB)と同じであると想定します。 Read consumption = record_size * 2
Write consumption = original_record_size + new_record_size + 1 KB (index) * (number of writes)
1KB * 2 1Kb + 1Kb + 1KB(1) *(2) = 4Kb 問合せ(SQL文)を使用して行を更新すると、読取りユニットと書込みユニットの両方が消費されます。更新によっては、主キー、セカンダリ・キー、またはレコード自体を読み取る必要がある場合があります。最新レコードを読み取ることを保証するには、絶対整合性読取りが必要です。絶対的なコンシステンシ読取りは、最終的なコンシステンシ読取りの2倍のコストです。これは、フォーミュラで2を乗算する理由です。
読取り消費:索引およびレコード・サイズは1KBです。オプションsetReturnRowを使用して実行する場合、読取り消費= 2 *レコード・サイズ
消費量の書込み:元のレコード・サイズと新しいレコード・サイズは、1つの索引で1KBです。
レコードの削除 Read consumption = 1 KB (index) * 2
Write consumption = record_size + 1KB (index) * (number_of_indexes)
1Kバイト(1) *2 = 2Kバイト 1Kバイト+ 1Kバイト(1) * (1) = 2Kバイト 削除によって、読取りユニットと書込みユニットの両方のコストが発生します。行の最新バージョンを確認する必要があるため、絶対的な一貫性読取りが使用されます。これは、読取りユニット式で2乗数を使用する理由です。
オプションsetReturnRowを使用して実行する場合、読取り消費= 2 *レコード・サイズ。それ以外の場合は、1つの索引に対して読取り消費= 1KB
消費量の書込み:レコード・サイズは1KBで、索引は1KBです。索引の数は1です。
ステップ2および3を使用して、アプリケーション・ワークロードの読取りユニットと書込みユニットを判別してみましょう。
操作 操作のレート 秒当たりの読取り数 秒当たりの書込み数 レコードの作成
3
0
6
主キーを使用したレコードの読取り
300
300
0
セカンダリ索引を使用したレコードの読取り
10
1100
0
既存レコードの更新
5
10
20
レコードの削除
1
2
2
合計読取りユニット: 1412
合計書込みユニット: 28
したがって、E-Commerceアプリケーションのワークロードは、1秒当たり1412件の読取り、および1秒当たり28件の書込みであると見積られます。Oracle Technology Networkで入手できる容量見積り機能ツールをダウンロードして、これらの値を入力し、アプリケーションのスループットとストレージを見積ります。
前述の計算では、最終的に一貫性のある読取りリクエストを想定しています。絶対的な一貫性読取りリクエストの場合、操作で消費される容量ユニットは2倍になります。したがって、読取り容量ユニットは4844読取りユニットになります。
月次費用の見積り
Oracle Cloudサブスクリプションの月次費用を見積る方法について学習します。
Oracle Cloudサービスを注文する準備ができたら、サブスクリプション・モデルまたは金額にコミットする前に、毎月の使用量と費用を算出するための費用見積り機能がオラクル社から提供されます。
この費用見積り機能を使用すると、入力した読取りユニット、書込みユニットおよびストレージに基づいて、月次費用が自動的に計算されます。ただし、アプリケーションの読取りユニットと書込みユニットがどのように計算されるかを理解するために、次の手順に従ってください:
-
ステップ1: 容量の見積りのトピックに移動します。このトピックに記載されている例および式を使用して、アプリケーション・ワークロードを見積ります。
ステップ2: Oracle Technology Networkから容量見積り機能をダウンロードして使用し、アプリケーション・ワークロードおよびデータベース操作の条件に基づいて、アプリケーションの書込みユニット、読取りユニットおよびストレージ容量を見積ります。
-
ステップ2: Oracle Cloud Webサイトで、費用見積り機能にアクセスします。「データ管理」チェック・ボックスを選択します。スクロールしてOracle NoSQL Database Cloudを探し、「追加」をクリックして「構成オプション」の下にOracle NoSQL Database Cloudのエントリを追加します。「NoSQLデータベース」を展開して、様々な使用率および構成のオプションを見つけます。「使用率」および「構成」パラメータの値を入力して、Oracle CloudのPay-As-You-Goおよび月次フレックスのサブスクリプションからOracle NoSQL Database Cloud Serviceの使用量に対する費用を見積ります。
-
ステップ3: Oracle Cloud Webサイトで、費用推定機能にアクセスします。ドロップダウンで、「Data Management」を選択します。「データ管理」の下に様々なオプションが表示されます。スクロールしてOracle NoSQL Database Cloudを見つけます。「追加」をクリックして、「構成オプション」の下にOracle NoSQL Database Cloudのエントリを追加します。
-
ステップ4: 「データベース- NoSQL」を展開して、様々な使用率および構成のオプションを見つけます。「構成」には2つのオプションがあります。「Always Free」オプションから開始するか、目的の構成でインスタンスをプロビジョニングできます。
- ステップ4a: 「Always Free」オプションが必要な場合は、「構成」で「Oracle NoSQL Database Cloud - Read」、「Oracle NoSQL Database Cloud Service - Storage」および「Oracle NoSQL Database Cloud Service -読取り、ストレージおよび書込み容量」を0にして変更します。次に、合計コスト見積りが0として表示され、Always Freeオプションに進むことができます。
-
ステップ5: または、Always Freeで使用可能なものより高い読取り、書込みおよびストレージ容量をプロビジョニングする場合は、「Database-NoSQL」に構成値を入力して実行できます。
- ステップ5a: 「使用率」で、Oracle NoSQL Database Cloud Serviceでこれらの値のいずれも使用されないため、デフォルト値を変更しないでください。
- ステップ5 b: 「構成」で、前のステップで見積もった読取りユニット、書込みユニットおよびストレージ容量の数を追加します。コストは、入力値に基づいて見積され、ページに表示されます。
自動スケール機能を使用している場合、読取りユニットと書込みユニットの実際の消費について、月末に請求書が生成されます。そのため、月末請求を検証するために、アプリケーションに独自の監査ログを収集できます。すべてのAPIコールでNoSQLデータベースのCLoudサービスによって返される、消費された読取りおよび書込みユニットを記録することをお薦めします。このデータを使用して、Oracle Cloudの測定および請求システムの月末の請求データに関連付けることができます。