はじめに
Couchbase Liteは、標準のJSONデータ型をサポートするだけでなく、画像、音声、ビデオ、PDFファイルなどを含むバイナリデータもサポートします。JSONドキュメントは、「添付ファイル」と呼ばれるバイナリデータに関連付けることができます。なお、ドキュメントは、複数の添付ファイルまたはBLOBに関連付けることができます。
添付ファイル操作API
ここでは、バイナリデータである添付ファイルを作成、および取得する方法について説明します。
開発者は、添付ファイル(BLOB)を作成するためにBLOB APIを使用します。
添付ファイル作成
以下は、添付ファイルを作成するSwiftコードの例です。
let mutableDoc = MutableDocument.init(id: "user::priya")
if let profileImage = UIImage(named: "profile.jpg"), let imageData = UIImageJPEGRepresentation(profileImage, 0.75) {
let blob = Blob(contentType: "image/jpeg", data: imageData)
mutableDoc.setBlob(blob, forKey: "image")
}
// … Add other properties
mutableDoc.setString("user", forKey: "type")
mutableDoc.setString("Priya", forKey: "name")
mutableDoc.setString("priya.rajagopal@couchbase.com, forKey: "email")
do {
try? db.saveDocument(mutableDoc)
}
catch {
print("Error in saving document : (error)")
}
内部表現
ドキュメントがCouchbase Liteで作成されると、内部的には次のようになります。
{
"email": "priya.rajagopal@couchbase.com",
"image": {
"length": 3888349,
"digest": "sha1–4xlj1AKFgLdzcD7a1pVChrVTJIc=",
"content_type": "image/jpeg",
"@type": "blob"
},
"type": "user",
"name": "Priya",
"id": "user::priya",
"rev": "1–1c8502034001b333cc469fe8c4c39e112eedf8a3"
}
添付ファイル取得
以下は、既存の添付ファイルを持つドキュメントから、添付ファイルを取得するSwiftコードの例です。
if let doc = db.document(withID: "user::priya") {
let blobValue = doc.blob(forKey:"image")?.content
// use the blobValue
}
添付ファイル仕様
保存場所とサイズ
Couchbase Liteでは、添付ファイルは、対応するドキュメントを含むCouchbase Liteデータベースインスタンスに保存されます。これは、添付ファイルへの参照を保持する関連メタデータを含むドキュメントとは別に保存されます。同じ添付ファイルが複数のドキュメントで共有されている場合、添付ファイルの1つのインスタンスのみがデータベースに保存されます。
Couchbase Liteでは、添付ファイルのサイズに制約はありません。添付ファイルがCouchbase Serverと同期されないことが保証されている限り、添付ファイルのサイズは問題となりません。
Couchbase Serverと同期した場合の制約
保存場所とサイズ
Couchbase Serverでは、添付ファイルは対応するドキュメントと同じCouchbase Serverバケットに保存されます。これは、添付ファイルへの参照を保持するメタデータを含むドキュメントとは別に保存されます。同じ添付ファイルが複数のドキュメントで共有されている場合、添付ファイルの1つのインスタンスのみがバケットに保存されます。
JSONドキュメントに1つ以上の添付ファイルを添付できます。ドキュメントに関連付けることができる添付ファイルの数に厳しい制限はありません。ただし、添付ファイルのメタデータはドキュメントの拡張属性に保存されるため、添付ファイルの数は、ドキュメントごとに許可される同期メタデータのサイズによって制限されます。添付ファイルのメタデータは100〜200バイトの範囲をとり、同期メタデータのサイズはドキュメントあたり1 MBに制限されているため、ドキュメントに関連付けることができる添付ファイルの数には実際的な制限があります。
添付ファイルの最大サイズは20MBです。これは、Couchbase Serverのドキュメントサイズの制限によるものです。
同期の条件とプロセス
レプリケーションプロトコルは、添付ファイルが更新された場合にのみ添付ファイルを同期するように最適化されています。これは、関連付けられたJSONドキュメント内の他のデータが更新された場合でも、Couchbase Liteクライアントによってプッシュまたはプルされないことを意味します。
関連するすべての添付ファイルが正常に同期されるまで、ドキュメントはSync GatewayまたはCouchbase Liteによって永続化されません。そのため、関連するドキュメントがない孤立した添付ファイルとして存在する時間が生じる可能性があります。その後の同期で、添付ファイルが既に保持されていることが認識され、ドキュメントのみが同期されます。
Sync Gateway APIとの併用
添付ファイルをCouchbase Liteクライアントで利用するだけでなく、Sync Gateway APIから利用(作成・変更)することが可能です。ただし、この場合、添付ファイルの内部表現に違いが生じます。そして、異なる方法で作成されたデータ間の整合性を保つために、開発者が考慮しなければならない要素が生じます。
詳しくは、以下のブログを参照してください。