キャッシュの例

このページでは、キャッシュサンプルプロジェクトのビルドおよび実行方法、パーティション データの取得方法、および HERE Data SDK for C++ を使用した変更可能で保護されたキャッシュの操作方法について説明します。

サンプルプロジェクトを実行する前に、 HERE platform に認証します。

  1. [ アプリとキー ] ページで、アプリのアクセスキー ID とアクセスキーのシークレットをコピーします。

    アクセスキー ID およびアクセスキーシークレットを取得する方法については、『 Identity & Access Management 開発者ガイド』の「 Register your application 」 ( アプリケーションを登録する ) の項を参照してください。

  2. examples/main.cpp、プレースホルダーをカタログのアクセスキー ID 、アクセスキーシークレット、および HERE リソースネーム ( HERE リソースネーム )に置き換えます。

    メモ

    コマンド ラインオプションを使用して、これらの値を指定することもできます。

    AccessKey access_key{}; // Your access key ID and access key secret.
    std::string catalog;   // The HRN of the catalog to which you want to publish data.
    

Linux でビルドして実行します

Linux でサンプルプロジェクトをビルドして実行するには、次の手順に従います。

  1. CMake ターゲットの例を有効にします。

    mkdir build && cd build
    cmake -DOLP_SDK_BUILD_EXAMPLES=ON ..
    
  2. build フォルダで、サンプルプロジェクトを構築します。

    cmake --build . --target dataservice-example
    
  3. サンプルプロジェクトを実行します。

    ./examples/dataservice-example --example cache --key_id "here.access.key.id" --key_secret "here.access.key.secret" --catalog "catalog"
    
  4. ( オプション ) 他のパラメータを使用して例を実行するには、 help コマンドを実行してから、必要なパラメータを選択します。

    ./examples/dataservice-example --help
    

サンプルプロジェクトをビルドして実行すると、次の情報が表示されます。

[INFO] protected-cache-example - Mutable cache path is "none"
[INFO] protected-cache-example - Protected cache path is "/tmp/cata.log_client_example/cache"
[INFO] ThreadPoolTaskScheduler - Starting thread 'OLPSDKPOOL_0'
[INFO] CatalogRepository - cache catalog '@0^0' found!
[INFO] PartitionsCacheRepository - Get 'hrn:here:data::olp-here-test:edge-example-catalog::versioned-world-layer::1::0::partition'
[INFO] PartitionsRepository - cache data 'versioned-world-layer[1]@0^0' found!
[INFO] DataRepository - cache data 'versioned-world-layer[1]@0^0' found!
[INFO] protected-cache-example - Request partition data - Success, data size - 3375

仕組み

キャッシュを使用してバージョン付レイヤーからデータを取得します

可変キャッシュまたは保護キャッシュを使用して、バージョン付レイヤーからデータを取得できます。

可変キャッシュを使用してバージョン付レイヤーからデータを取得するには、次の手順に従います。

  1. OlpClientSettings 必要なキャッシュ設定プロパティへのパスを使用してオブジェクトを作成します ( ディスク容量、ランタイムメモリの上限、最大ファイルサイズ、メモリ内データキャッシュサイズ、オプション、パス ) 。

    手順については、「プラットフォームクライアント設定を作成する」を参照してください。

    メモ

    有効な可変キャッシュパスを使用して最初の呼び出しを実行し、保護されたキャッシュパスを使用して 2 番目の呼び出しを実行します。

  2. VersionedLayerClient ステップ 1 で、レイヤー、レイヤー ID 、カタログバージョン、およびプラットフォームクライアント設定を含むカタログの HERE リソースネーム ( HERE リソースネーム )を使用してオブジェクトを作成します。

    カタログバージョンを指定しない場合は、最新バージョンが使用されます。 クライアントへの最初の API 呼び出しで指定したフェッチオプションに応じて GetLatestVersion 、メソッドは次のいずれかの方法で自動的に最新バージョンを取得します。

    • OnlineIfNotFound fetch オプションでは、がネットワークを照会し、エラーが発生した場合はキャッシュを確認します。 オンラインバージョンがキャッシュバージョンよりも高い場合、キャッシュバージョンが更新されます。
    • OnlineOnly fetch オプションの場合、はネットワークのみを照会します。
    • CacheOnly fetch オプションでは、キャッシュのみを確認します。
    olp::dataservice::read::VersionedLayerClient layer_client (
                        client::HRN catalog,
                        std::string layer_id,
                        boost::optional<int64_t> catalog_version,
                        client::OlpClientSettings settings);
    
  3. DataRequest パーティション ID と次のいずれかのフェッチオプションを使用してオブジェクトを作成します。

    • ( デフォルト ) 要求されたリソースがキャッシュに見つからない場合にネットワークを照会するに OnlineIfNotFoundは、を使用します。
    • キャッシュの検索をスキップして、ただちにネットワークにクエリーを送信するに OnlineOnlyは、を使用します。
    • キャッシュの検索に失敗した場合にただちに戻るに CacheOnlyは、を使用します。
    auto request = olp::dataservice::read::DataRequest()
                     .WithPartitionId(first_partition_id)
                     .WithBillingTag(boost::none)
                     .WithFetchOption(FetchOptions::OnlineIfNotFound);
    
  4. GetRequestDataRequest パラメーターを使用してメソッドを呼び出します。

    auto future = layer_client.GetData(request);
    
  5. DataResponse 未来を待っていてください。

    olp::dataservice::read::DataResponse data_response =
    future.GetFuture().get();
    

DataResponse このオブジェクトは、完了した操作の詳細を保持し、操作の成功および結果のデータへのアクセスを判断するために使用されます。

  • IsSuccessful() –操作が成功した場合は、を返し trueます。 それ以外の場合は、を返します false
  • GetResult()–操作が成功すると、次の結果データが返されます。 olp::dataservice::read::DataResult
  • GetError()olp::client::ApiError オブジェクトのエラーの結果としてエラー情報が含まれます。
if (data_response.IsSuccessful()) {
    const auto& response_result = data_response.GetResult();
    // Handle success
} else {
    data_response.GetError().GetErrorCode();
    // Handle fail
}

受信したデータはキャッシュに保存されます。 キャッシュへのパスはログメッセージに記録されます。

   [INFO] protected-cache-example - Mutable cache path is "/tmp/cata.log_client_example/cache"

」に一致する結果は 件です

    」に一致する結果はありません