Visual Basic 2010 ExpressでCassandraを操作する 登録編

Visual C# 2010 ExpressからDebianで動いているCassandraに接続してみました。

Visual C# 2010 ExpressでCassandraを操作する 登録編
Visual C# 2010 ExpressでCassandraを操作する 検索編


そういば、.Net Frameworkで動作するDLLに変換しているのだから
Visual Basic 2010でもプログラムが書けるのでは?

ということで、試してみました。



ライブラリの準備



提供されているライブラリはC#版なので、とりあえず
「Thrift.dll」と「cassandra.dll」をVisual C# 2010でビルドします。
Visual C# 2010 ExpressでThriftのライブラリをビルドする
Visual C# 2010 ExpressでCassandraのライブラリをビルドする



Visual Basicのプロジェクト作成



「CassandraSample」という名前でWindows フォームアプリケーションを作成します。
08_001_20100531001117.png


プロジェクト名を右クリックして[参照の追加]を選択します。
08_002.png


参照タブを表示し、C#でビルドした「Thrift.dll」と「cassandra.dll」を追加します。
08_003.png




サンプルソース



こんな感じです。


'Thrift
Imports Thrift
Imports Thrift.Transport
Imports Thrift.Protocol
Imports Thrift.Server

'Cassandra
Imports Apache.Cassandra

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim transport As TTransport = New TSocket("192.168.1.242", 9160)
        Dim protocol As TProtocol = New TBinaryProtocol(transport)
        Dim client As Cassandra.Client = New Cassandra.Client(protocol)

        Try
            transport.Open()

            Dim utf8Encoding As System.Text.Encoding = New System.Text.UTF8Encoding
            Dim timeStamp As Long = DateTime.Now.Millisecond

            Dim nameColumnPath As New ColumnPath
            nameColumnPath.Column_family = "Standard1"
            nameColumnPath.Column = utf8Encoding.GetBytes(TextColumn.Text)

            'キースペース名を指定
            '画面上に入力されたキー名称
            '上で作成したカラムパス
            '画面上に入力された値

            client.insert("Keyspace1",
                        TextKey.Text,
                        nameColumnPath,
                        utf8Encoding.GetBytes(TextValue.Text),
                        timeStamp,
                        ConsistencyLevel.ONE)

            transport.Close()

            MessageBox.Show("登録完了")

        Catch ex As Exception
            MessageBox.Show(ex.Message)

        End Try

    End Sub
End Class





C#のコードを参考に書いてます。
簡単に移植できました。



実行してみると・・・

08_004.png



cassandra-cliで確認するとちゃんと登録されています。


# bin/cassandra-cli --host localhost --port 9160
cassandra> get Keyspace1.Standard1['vb']['test']
=> (column=74657374, value=value, timestamp=63)





こんなに簡単にC#でビルドしたdllがVBから呼び出せるとは・・・
Visual Basic、かなり開発に使えるのでは?







Visual C# 2010 ExpressでCassandraを操作する 検索編

Visual C# 2010 ExpressからCassandraにデータを登録してみました。
Visual C# 2010 ExpressでCassandraを操作する 登録編


他の言語とほとんど同じですが、データ取得のサンプルです。



        private void button2_Click(object sender, EventArgs e)
        {
            TTransport transport = new TSocket("192.168.1.242", 9160);
            TProtocol protocol = new TBinaryProtocol(transport);

            Cassandra.Client client = new Cassandra.Client(protocol);

            try
            {
                transport.Open();

                System.Text.Encoding utf8Encoding = System.Text.Encoding.UTF8;
                long timeStamp = DateTime.Now.Millisecond;
                ColumnPath nameColumnPath = new ColumnPath()
                {
                    Column_family = "Standard1",
                    //カラム名を画面から取得
                    Column = utf8Encoding.GetBytes(textColumn.Text)
                };
                
                ColumnOrSuperColumn ret;

                ret = client.get("Keyspace1", //キースペース名を指定
                             textKey.Text, //画面上に入力されたキー名称
                             nameColumnPath, //上で作成したカラムパス
                             ConsistencyLevel.ONE);

                

                transport.Close();

                MessageBox.Show(utf8Encoding.GetString(ret.Column.Value));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }




これでデータが取得できました。

Visual C# 2010 ExpressでCassandraを操作する 登録編

Visual C# 2010 ExpressでThriftのライブラリをビルドしました。
Visual C# 2010 ExpressでThriftのライブラリをビルドする

また、Cassandraに接続するためのライブラリもビルドしました。
Visual C# 2010 ExpressでCassandraのライブラリをビルドする

上記で出力した「Thrift.dll」「cassandra.dll」を使用して、C#からCassandraに
データの登録を実行してみます。



プロジェクトの作成



新しく「sample」というプロジェクトを作成しました。
テンプレートは「Windows フォームアプリケーションを」選択しました。
07_001_20100530232427.png


参照設定の追加で、「Thrift.dll」「cassandra.dll」の2つのDLLを追加します。




サンプルプログラム



画面上で、キーとカラム名称、値を入力します。
入力された値をThriftを経由してDebianで動いているCassandraに登録します。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

//Thrift
using Thrift;
using Thrift.Transport;
using Thrift.Protocol;
using Thrift.Server;

//Cassandra
using Apache.Cassandra;

namespace sample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            TTransport transport = new TSocket("192.168.1.242", 9160);
            TProtocol protocol = new TBinaryProtocol(transport);

            Cassandra.Client client = new Cassandra.Client(protocol);

            try
            {
                transport.Open();

                System.Text.Encoding utf8Encoding = System.Text.Encoding.UTF8;
                long timeStamp = DateTime.Now.Millisecond;
                ColumnPath nameColumnPath = new ColumnPath()
                {
                    Column_family = "Standard1",
                    //カラム名を画面から取得
                    Column = utf8Encoding.GetBytes(textColumn.Text)
                };

                client.insert("Keyspace1", //キースペース名を指定
                              textKey.Text, //画面上に入力されたキー名称
                              nameColumnPath, //上で作成したカラムパス
                              utf8Encoding.GetBytes(textValue.Text), //画面上に入力された値
                              timeStamp,
                              ConsistencyLevel.ONE);

                transport.Close();

                MessageBox.Show("登録完了");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}







Cassandraのstorage-conf.xml



別の端末からThrift経由でのアクセスを受け付けるために

conf/storage-conf.xml


このファイルを編集します。


とりあえずThriftAddressに「0.0.0.0」を指定しておけば、
外部からのアクセスを受け付けてくれるようになります。

<ThriftAddress>0.0.0.0</ThriftAddress>
<ThriftPort>9160</ThriftPort>





実行画面はこんな感じ。
07_002.png


Debian側で登録されたかcassandra-cliを起動して確かめてみます。


# bin/cassandra-cli --host localhost --port 9160
cassandra> get Keyspace1.Standard1['csharp']['test']
=> (column=74657374, value=data, timestamp=774)




ちゃんと登録できた模様。



Visual C# 2010 ExpressでCassandraのライブラリをビルドする

Visual C# 2010 ExpressでThriftのライブラリをビルドしました。
Visual C# 2010 ExpressでThriftのライブラリをビルドする

今回は、Cassandraのライブラリをビルドしてみます。



Cassandraモジュールの取得



http://cassandra.apache.org/
ここからCassandraをダウンロードします。

ダウンロードしたファイルを解凍したフォルダの中にinterfaceというフォルダが
あるかと思います。
この中にある「cassandra.thrift」をthriftコンパイラでC#のソースに変換します。

WindowsでThriftコマンドを使用する

今回は、上記で紹介したWindows版のThriftコンパイラを使用してみました。


C:\Thrift>thrift.exe --gen csharp cassandra.thrift



gen-csharpというフォルダが生成されます。




Cassandraライブラリのビルド



thrift.exetを使用して出力した雛形をビルドします。

まず、「cassandra」という新しいプロジェクトを作成しました。
テンプレートには、クラスライブラリを指定しました。
06_001_20100530223502.png
デフォルトで生成されるcsファイルは削除しておきます。


次に、プロジェクト名を右クリックし、[追加]-[既存の項目]を選択。
「thrift.exe --gen csharp cassandra.thrift」を実行して生成された
gen-csharp\Apache\Cassandraの中のファイルを全て追加します。
06_002_20100530223501.png


追加した後の画面はこんな感じになるはずです。
06_003.png


このままでは、Thrift名前空間が見つからないというエラーが発生しビルドできません。
「参照設定」を右クリックし、「参照の追加」を選択します。
06_004.png


Visual C# 2010 ExpressでThriftのライブラリをビルドする
ここで出力したThrift.dllを指定します。
06_005.png


ここまで設定が終わったら、F6を押してビルドを実行します。

\cassandra\bin\Releaseに「cassandra.dll」(※プロジェクトの名前に依存するので、異なるかも)が
生成されているはずです。

Thrift.dllとcassandra.dllを使用して、Debianで動いているCassandraに接続してみます。



Visual C# 2010 ExpressでThriftのライブラリをビルドする

そういえば、Visual C# 2010からCassandraへの接続を試していませんでした。
まずは、C#用のThriftライブラリをビルドしてみます。

以前、Visual C# 2008 Expressでは試したのですが
Debian + Thrift + PythonのサーバーにWindows + C#から接続する
せっかくなので、改めてメモしておきます。



Thriftのダウンロード



http://incubator.apache.org/thrift/download/
ここからThriftをダウンロードします。
ダウンロードしたファイルを解凍しておきます。




C#ライブラリのビルド



解凍したフォルダの

\lib\csharp\src\Thrift.sln


このソリューションファイルを開きます。

ファイルを開こうとすると、Visual Studio 2008からVisual Studio 2010への
変換ウィザードが開始されます。

最初の画面はそのまま次へ。
05_001_20100530223300.png


バックアップを作成するか聞かれます。
特にバックアップは必要ないので、「いいえ」を選択しました。
05_002_20100530223300.png


変換準備完了です。
「完了」を押して、実行します。
05_003_20100530223300.png


変換完了ですが、エラーが発生した模様。
05_004_20100530223300.png


テストプロジェクトが変換に失敗した模様。
05_005_20100530223259.png


利用不可になっていたので、思い切って削除しました。
05_006_20100530223259.png



F6を押してビルドを実行すると、

\lib\csharp\src\bin\Release\Thrift.dll


こんな感じで、Thrift.dllが出来上がると思います。
このDLLを使用して、プログラムを作成します。



プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ