77Tsurugiでは、(メモリーに載せるのが躊躇われるような)大きなサイズのデータをBLOB, CLOB型で扱います。
88BLOB(binary large object)はバイト列、CLOB(character large object)は文字列が対象です。
99
10- TsurugiはインメモリーDBなので、基本的にデータは全てDBサーバーのメモリー上に置くのですが、 BLOB, CLOBのデータはメモリー上には置かず、データごとに個別のファイルとして保存されます 。
10+ 以降、 BLOB, CLOBを共通で扱う場合は large object(LOB)という用語を用います 。
1111
12- クライアント(tsubakuro-rust-core)とTsurugi DBの間でBLOB, CLOBデータを受け渡す方法はいくつかあり、どの方法を使うかはクライアントアプリケーション(tsubakuro-rust-coreを利用するアプリケーション)側で指定することができますが、データを受け渡すAPI(コーディング方法)は同一です 。
12+ TsurugiはインメモリーDBなので、基本的にデータは全てDBサーバーのメモリー上に置くのですが、LOBデータはメモリー上には置かず、データごとに個別のファイルとして保存されます 。
1313
14- ## LOB転送モード
14+ クライアント(tsubakuro-rust-core)とTsurugi DBの間でLOBデータを受け渡す方法はいくつかあり、どの方法を使うかはクライアントアプリケーション(tsubakuro-rust-coreを利用するアプリケーション)側で指定することができますが、データを受け渡すAPI(コーディング方法)は同一です。(ただし、LOB転送モードによっては使用できないメソッドもあります)
1515
16- tsubakuro-rust-coreでは、BLOB, CLOBを共通で扱う場合は large object(LOB)という用語を用います。
16+ ## LOB転送モード
1717
1818クライアント(tsubakuro-rust-core)とTsurugi DBの間でLOBデータを受け渡す方法(LOB転送を行う方法)は、LOB転送モードと呼びます。
1919
@@ -22,7 +22,7 @@ LOB転送モードには以下のようなものがあります。
2222### 特権モード
2323
2424特権モードでは、クライアントアプリケーションとTsurugi DBの間でのLOBデータの受け渡しをファイル経由で行います。
25- すなわち、LOBデータをDBに登録する際は、ユーザー(クライアントアプリケーション)がLOBデータのファイルを用意し、そのファイルのパスをTsurugi DBに渡します(Tsurugi DBは渡されたパスのファイルをコピーします)。
25+ すなわち、LOBデータをDBに登録する際は、ユーザー(クライアントアプリケーション)がLOBデータのファイルを用意し、tsubakuro-rust-core経由でそのファイルのパスをTsurugi DBに渡します(Tsurugi DBは渡されたパスのファイルをコピーします)。
2626DBからLOBデータを取得する際も、DB内で保持されているファイルのパスが返るので、そのファイルを読むことになります(ユーザーに対しては、ファイルのパスは隠蔽されます)。
2727
2828このように特権モードではLOBデータをファイルで受け渡しするため、クライアントアプリケーションはTsurugi DBと同じサーバー上で実行する必要があります。
@@ -93,9 +93,11 @@ tsubakuro-rust-coreにおけるCLOBの操作方法はBLOBと同等ですので
9393
9494SqlClientのBLOB関連メソッドを以下に示します。
9595
96+ メソッドの使用方法については [ API ドキュメント] ( https://docs.rs/tsubakuro-rust-core/latest/tsubakuro_rust_core/prelude/struct.SqlClient.html ) を参照してください。
97+
9698| メソッド | 説明 |
9799| ------------------------------------------------------------ | ------------------------------------------------------------ |
98- | ` async fn allows_lob_operation(&self, operation: LobOperation) -> Result<bool, TgError> ` | 現在のLOB転送モードでBLOB関連メソッドが使用できるかどうかを返す。 |
100+ | ` async fn allows_lob_operation(&self, operation: LobOperation) -> Result<bool, TgError> ` | 現在のLOB転送モードでBLOB関連メソッドが使用できるかどうかを返す。(引数のoperationで対象メソッドを指定する) |
99101| ` async fn upload_blob_file(&self, path: &Path) -> Result<TgBlob, TgError> ` | BLOBファイルのパスを指定してアップロードする。 |
100102| ` async fn upload_blob(&self, value: &[u8]) -> Result<TgBlob, TgError> ` | BLOBデータをアップロードする。<br />(特権モードでは使用不可) |
101103| ` async fn create_blob_uploader(&self) -> Result<BlobUploader, TgError> ` | アップローダーを作成する。(BLOBデータをチャンクに分けてアップロードできる)<br />(特権モードでは使用不可) |
@@ -176,13 +178,13 @@ select文の実行結果からBLOBを取得する手順は以下のようにな
176178
177179### 特権モードのパスマッピング
178180
179- 特権モードでLOBファイルを扱う際にクライアント側のパスとサーバー側のパスを変換する機能がパスマッピングです 。
181+ tsubakuro-rust-coreでは、特権モードでLOBファイルを扱う際にクライアント側のパスとサーバー側のパスを変換するパスマッピング機能を提供しています 。
180182
181183特権モードでLOBファイルを扱う場合、クライアントとサーバーが同一ファイルシステムにアクセスできることを前提としていますが、環境によってはクライアントとサーバーのパスが一致しないことがあります。
182184このとき、パスマッピングを設定することで、LOBファイルのパスをクライアントからサーバーに送信する際にクライアント側のパスがサーバー側のパスに変換されます。同様に、サーバーからファイルのパスを受信した際にクライアント側のパスに変換されます。
183185
184186例えば以下のようにMS-Windows上のTsurugiのDockerでボリュームマウントしてtsubakuro-rust-coreでパスマッピングを指定すると、` C:/tmp/client/blob.bin ` のBLOBファイルをinsertすることができます。
185- また、` C:/tmp/tsurugi ` の下にあるBLOBファイルを読むという扱いでselectすることができます。(selectする際のファイルパスはユーザーからは隠蔽されますが)
187+ また、selectする際に、tsubakuro-rust-coreは ` C:/tmp/tsurugi ` の下にあるBLOBファイルを読みます。
186188
187189```
188190docker run -d -p 12345:12345 --name tsurugi -v C:/tmp/client:/mnt/client -v C:/tmp/tsurugi:/opt/tsurugi/var/data/log -e GLOG_v=30 ghcr.io/project-tsurugi/tsurugidb:latest
0 commit comments