2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RustAdvent Calendar 2021

Day 18

Rustアプリケーション開発にNoSQLドキュメント指向データベースCouchbase Serverを使うには?

Last updated at Posted at 2021-12-17

はじめに

この投稿では、現時点ではまだ「work in progress」とされているCouchbase Rust SDKについて紹介します。内容的には、Couchbase Labsにて公開されている公式リポジトリーのREADMEからの情報紹介になります。

筆者は、Rustについては経験がないものの、Couchbase Server周りの話として、Rust SDKの要望を聞くようになっています。現在はコミュニティサポートの状態にて、エンタープライズサポート版の登場が待たれるところですが、本稿が、Rustアプリケーションから利用することのできるデータベースのひとつとして、Couchbase Serverについて認識いただく機会になれば幸いです。

Couchbase Serverについては、日本語で読むことができるまとまった情報として、次の拙著を紹介させていただきます。

Couchbase Serverは、NoSQLドキュメント指向データベースであり、同様のカテゴリーにMongoDBがあります。上記書籍にて、それぞれの違いについても説明しています。

MongoDBのRust対応については、以下のようなリポジトリーがあるようですね。将来的に、それぞれのRustにおける実装の違いなども、検証・紹介してみたいものです。

Couchbase Server Rust SDK概要

Couchbase ServerのRust SDKは、 以下のGithubリポジトリで公開されています。

ソースコードとして提供されており、ビルドするために、Couchbase C Clientライブラリー(libcouchbase)に依存します。

また、C/C++ライブラリーにRust FFIをバインディングするためのbindgenのユーザーガイドで公開されている要件を考慮する必要があります。

Couchbase Rust SDKは、async/await構文を利用しているため、1.39以上のRustバージョンが必要です。

コード記述例

キーバリュー操作の基本的なコード記述例は次のとおりです。

pub fn main() {
    // 接続文字列と視覚情報を使用してクラスターに接続
    let cluster = Cluster::connect("couchbase://127.0.0.1", "Administrator", "password");
    // バケットをオープン
    let bucket = cluster.bucket("travel-sample");
    // Use the default collection (needs to be used for all server 6.5 and earlier)
    let collection = bucket.default_collection();

    // ドキュメントの取得
    match block_on(collection.get("airline_10", GetOptions::default())) {
        Ok(r) => println!("get result: {:?}", r),
        Err(e) => println!("get failed! {}", e),
    };

    // ドキュメントを保存
    let mut content = HashMap::new();
    content.insert("Hello", "Rust!");

    match block_on(collection.upsert("foo", content, UpsertOptions::default())) {
        Ok(r) => println!("upsert result: {:?}", r),
        Err(e) => println!("upsert failed! {}", e),
    };
}

サンプルコード

レポジトリーのexamplesフォルダーにコード記述例が多数格納されています。

アンセーフコードブロック

現在のコードには、**unsafe {}**コードブロックが含まれていることが注意されています。unsafe {}コードブロックを使用する理由は、Cライブラリであるlibcouchbaseを呼び出すことができるようにするためです。

該当箇所は、IOモジュールのlcb部分にあります。そのため、その部分で、セグメンテーション違反が発生する可能性があります。

また、unsafe {}コードブロックのない純粋なRust SDKの開発にも取り組み中であるとされています。

最後に

今回、Couchbase Rust SDKについて紹介しました。内容的には、ほんのさわり、ということでしかないと思いますが、今後の展開の(特に自分自身にとっての)はずみとなればと思っています。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?