Let me code again...

Welcome to ijokarumawak's blog :)

Couchbase SDKで振り返る2015年

Merry Xmas! ということで、Couchbase Advent Calendar 2015も本日で最後! 最終日にふさわしいネタかは微妙ですが、 各言語向け公式SDKの2015年分リリースノートを振り返り、面白そうなものをピックアップしてみます。バグフィックスではなく、新機能的なものにフォーカスしています。 各言語向けの変更点を見ることで2015年はどんな年だったかがわかる!かも(笑)

2015年1月から各言語向けのSDKでAPIを統一した2.0シリーズが出てきています。 CB4.0対応(N1QL、MDS)、非同期のAPIも大きなテーマですね。

リリース時期とバージョン、面白そうな変更点を表にまとめてみました! 詳細は表の下にコメントしています。

CB C Go Java .NET Node.js PHP Python
1   2.4.6: pkgconfig(.pc)ファイルを提供、unsafe_optimizeオプション           2.0.0 B1:実験的acouchbase実装(asyncio)
2   2.4.7: N1QL、Geoの実験的サポート開始 0.1.0:初公式SDK 2.1.0: リトライストラテジ   2.0.5: 最新版io.jsへの対応 2.0.4  
3 3.0.3 2.4.8 0.2.0 2.1.1   2.0.6 2.0.5 2.0.0 B2:N1QL、Geoサポート
4 4.0DP 2.4.9: seqnoでのdurability constraint   2.1.2: Nagleアルゴリズムはデフォルトで無効に。RetryBuilder。   2.0.7, 2.0.8 2.0.6: PHP 5.6完全対応、5.3は非推奨に。2.0.7 2.0.0: split_result
5   2.5.0: n1qlback   2.1.3: パスワード付きBucketへのN1QL 2.1.0: TAPでのAsync系API実装。すでにN1QLでのRYOWの話が。SendWithRetry。2.1.1     2.0.1
6 4.0B 2.5.1: MDS対応 0.3.0: bulk   2.1.2: MDS対応     2.0.2
7 3.1.0 2.5.2 1.0.0B 2.1.4 2.1.3 2.0.9, 2.0.10    
8 4.0RC 2.5.3: Prepared statment       2.0.11, 2.0.12   2.0.3
9     1.0.0: labsからcouchbaseリポへ 2.2.0: CB4.0に対応。2.1系からのMigration Notes   2.1.0: MDS対応   2.0.4
10 4.0, 3.1.1     2.2.1: DCPの向上、Stringのエンコード性能向上。2.1.5 2.2: travel-sample。2.2.1 2.1.2: prebuild対応    
11 3.1.2 2.5.4 1.0.1   2.2.2   2.1.0 2.0.5: TwistedのN1QL APIを修正
12 3.1.3, 4.1     2.2.2: openBucketのキャッシュ。2.1.6        

少し掘り下げてみてみましょう

Cのライブラリをインストールすると、コマンドラインからCouchbase Serverのデータ入出力ができる、cbcコマンドや、負荷をかけるcbc-pillowfightなどのツールが使えて便利。このたびN1QLを使って負荷をかけるcbc-n1qlbackが追加されました。ニッケルバックといえばカナダのロックバンドですよねw

Javaは2.1と2.2が平行してリリースされていた状態。2.2では一部のAPIが名称変更されています。2.1から2.2へ移行する場合、Migration Notesを見てください。

送信するパケット数を削減し、TCP/IPネットワークを効率的に利用するNagleアルゴリズムがデフォルトで無効になりました。 JIRAのチケットJVMCBC-168にはほとんど説明が書いてないですが、コミットメッセージに詳細記述あり。 Javaライブラリの修正点についてはコミットメッセージの方がだいたい詳しく書いてあります。 バッファするので無効にした方がレイテンシが改善。モダンなネットワーク向けの最適化アルゴリズムではなく、Nettyでもデフォルトが無効になっているようです。

JavaでStringのエンコード性能向上というのがあります。これはStringをUTF-8のバイトに変換する際の話で、テストの結果を見ると約4倍の性能向上となっています。変更点はこちら。良くやる変換なので参考にするといいかも。

祝Goの公式SDK。ドキュメントのbulk操作をサポートしているのは便利ですね。

そういえばRubyは? 一応2.0のブランチがあるけど進んでいない様子。N1QLをはじめCouchbase Server 4.0の機能を利用するには、Rubyは現時点では使えなさそう。

.NETでのTAPは、Couchbase ServerがDCPの前に使ってたTAPプロトコルではなく、Task-based Asyncronous Patternのこと。

.NETのリリースノートに記載されているtravel-sampleはN1QLを活用したフライトチケット検索のサンプルアプリで、Java, .NET, Node.js, Go版があります。

Node.jsライブラリのインストール中にnode-gypのrebuildでnodeバインディングをクリアしてビルドしていましたが、prebuildを使って、事前にビルドされたものを利用する形に変更されました。

io.jsへの対応が入っていて思い出しましたが、Node.jsとio.jsが同じコードベースにというニュースもありましたね。

PHPは5.6に対応、5.3は非推奨とのこと。PHPって最新バージョンいくつなのか知らなかったので見てみたら、今年の12月に7.0がリリースされていたのですね。なぜver 6がなく7なのか?はこちらを見ると良いでしょう。PHP RFC: Name of Next Release of PHP

Pythonの非同期実装では、geventとTwistedが利用できます。詳細はUsing asynchronous frameworksを見ると良いでしょう。

Pythonでもバルク更新ができます。バルク更新結果で正常とエラーが混ざっていた場合に、エラーになったものをリトライ系の処理に回すときに利用できるのがCouchbaseErrorのsplit_results()です。

まとめ

アドベントカレンダー向けのネタとして、今年1年のCouchbase SDK動向を追ってみました。APIの名称はクライアントライブラリ2.xシリーズで統一されるようになりましたが、中身は当然ながら各言語らしい実装となっています。 同じテーマをいろんな言語の実装で横並びで見ると、面白いもんですね。

それではみなさん良いお年を!