2
現在はそうのようにスパナのためDatabaseClientを取得している:SpannerのDatabaseClientはスレッドセーフですか?
DatabaseClient dbClient = spanner.getDatabaseClient(...)
は、複数のスレッド間でこのDatabaseClientオブジェクトを使用することが安全ですか?具体的には、DatabaseClientのインスタンスを依存関係に挿入し、スレッドセーフで再利用できるかどうか、または各スレッドがspannerを呼び出す必要があるかどうかを把握したいと考えていますか?
これはWeb APIサービスで使用されているため、URLへの着信要求が多く、着信要求ごとにスパナ接続が必要です。共有するのに最適なオブジェクトは何ですか?各セッションは、たとえばGoogle JSONの資格情報(SpannerOptions Builderで発生すると想定しています)にロードする必要はありません。
おかげさまで、他の誰かを参照するために - > DatabaseClient/DatabaseClientImplは実際にDBへの接続プーリングを管理し調整するSessionPoolの周りの 'ダム'ラッパーです。したがって、DatabaseClientImplは効果的にシングルトンになります。 – user3707
もう1つの質問 - アプリケーション全体でDatabaseClientを共有する場合、spanner.closeAsync()。get();したがって決して呼ばれることはありませんか? – user3707
データベースあたりのセッション数に制限があります(https://cloud.google.com/spanner/docs/limitsを参照)。非アクティブなセッションは最終的にガベージコレクトされますが、アプリケーションの存続期間中はセッションプールを有効に保ち、それらのセッションが不要になったらクリーンアップすることをお勧めします。アプリのシャットダウン時に –