Primer
このガイドでは、Scala ドライバーとその非同期 API の背景を説明してから、 クイック スタート ガイドでドライバーと MongoDB の使用方法を説明します。
注意
ドライバーをインストールする方法については、「インストール 」のガイドを参照してください。
Reactive Streams
Scala ドライバーは、 MongoDB Java Reactive Streams ドライバー 上に構築されています。 Reactive Stream API は、次のコンポーネントで構成されています。
Observable
: パブリッシャー のカスタム実装Observer
: サブスクリプション のカスタム実装
Observable
は、 Observer
またはObserver
の複数のインスタンスから受け取った要求に応じて公開される、潜在的に無制限の数のシーケンス化された要素のプロバイダーです。
Observable.subscribe(Observer)
への呼び出しに応答して、 Observer
クラスのメソッドに可能な呼び出しシーケンスは、次のプロトコルによって提供されます。
onSubscribe onNext* (onError | onComplete)?
つまり、 onSubscribe()
は常にシグナルられ、その後にObserver
からリクエストされた場合、上限の数のonNext()
シグナルが続く可能性があります。 これには、障害が発生した場合はonError()
シグナルが送信され、 Subscription
がキャンセルされていない限り、使用できる要素が ない 場合はonComplete()
シグナルが送信されます。
Observables
ScalaドライバーAPIは、 Java Sync Driver APIとネットワーク I/O が Observable<T>
タイプを返します。ここで示した T
は操作の応答タイプです。
注意
API から返されるすべての 型はObservable
コールド です 、 にサブスクライブされるまで何も発生しないということを意味します。したがって、 Observable
を作成するだけでは、ネットワーク I/O は発生しません。 ドライバーによって操作が実行されるのは、 Subscription.request()
メソッドを呼び出すまでです。
この実装ではパウンドは ユニット です。 に対する各Subscription
はObservable
1 つの MongoDB 操作に関連し、Observable
Observer
インスタンスの には独自の結果セットが与えられます。
バックプレッシャー
デフォルトでは、 Observer
特権は、 Observable
がサブスクライブされるとすぐに、 Observer
からのすべての結果をリクエストします。 Observer
がObservable
からのすべての結果を処理できることを確認します。 Observer.onSubscribe()
メソッドのカスタム実装によりSubscription
を保存し、 Observer
に容量がある場合にのみデータがリクエストされるようにします。
クイック スタートの で使用されるヘルパー
クイック スタートでは、ヘルパー .scala で定義されたカスタム暗黙的なヘルパーを実装しました ドライバーGithub ソース リポジトリ内のファイル。これらのヘルパーは結果を検索して出力します。 クイック スタートは非同期コードの疑似シナリオですが、データベースの状態を確保するために、次の例を開始する前にある例の結果をブロックします。 Helpers
オブジェクトは次のメソッドを提供します。
results()
:Observable
が完了するまでブロックし、収集された結果を返しますheadResult()
:Observable
の最初の結果が返されるまでブロックしますprintResults()
:Observable
が完了するまでブロックされ、各結果を出力しますprintHeadResult()
:Observable
の最初の結果が利用可能になるまでブロックし、それを出力します