MongoDBを触ってみた

BIGDATA,BIGDATAと騒がしい今日この頃。

BIGDATAの代名詞といえば、NO SQLデータベース。その中で人気の高いMongoDBを触ってみた。

MongoDBサーバ内にはDatabaseと呼ばれる、RDBのデータベースやスキーマに相当するものを作成することができ、その中にCollectionという、RDBのテーブルに相当するものを作成し、その中にデータを保存する。コレクション中のデータは単一の構造となっていなくてもよい。(実用的にするなら、ある程度の整形は必要だろう。)Collection中のデータはBSON(Binary化されたJSON)として格納される。

MongoDBのクライアントShellはJavascriptのインタープリタとなっており、Javascript+MongDB APIを使用することにより、データの参照,更新が可能である。

また、C,C++,C#,Java,Perl,PHPをはじめ、様々なアクセス用ライブラリ(ドライバと呼ばれる)が用意されており、特にオブジェクト指向言語の場合は、データを半自動的に変換する機能が備わっているので、非常に使いやすいと思う。

データ形式がJSONなので、オブジェクトを永続化するのに適している。例えば、以下のようなC#のクラスインスタンスをMongoDBにストアすると

class AddressBook
{
    [BsonId]
    public BsonObjectId _Id { get; set; }
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
    public string MoblilePhone { get; set; }
    public List<Email> EMailAddresses { get; set; }
}
class Email
{
    public string DisplayName { get; set; }
    public string Address { get; set; }
}
Person p = new Person() {
    Name = "T.Sumomo",    PhoneNumber = "xx-xxxx-xxxx",
    MobilePhone = "xxx-xxxx-xxxx",
    EmailAddresses = new Email[]
    {
        new Email() { DisplayName = "会社", Address="xxxxxx@xxxx.xxx.com" },
        new Email() { DisplayName = "自宅", Address="yyyyyy@yyyy.yyy.com" }
    }
};

以下のようにシリアライズされる。

{
    "_id": ObjectId("xxxxxxxxxxxxx"),
    "Name": "T.Sumomo",
    "PhoneNumber": "xx-xxxx-xxxx",
    "MobilePhone": "xxx-xxxx-xxxx",
    "EmailAddresses":
        [
            {"DisplayName": "会社", "Address": "xxxxxx@xxxx.xxx.com" },
            {"DisplayName": "自宅", "Address": "yyyyyy@yyyy.yyy.com" }
        ]
}

上記の変換は前述のドライバにより、自動的に行われる(デシリアライズも同様)。データ型や、メンバ名などは、POCOやPOJOに属性やアノテーションを付ける事によりマッピングが可能。

C#のドライバにはLINQプロバイダも含まれており、データの検索をMongoDBのShellで使用するようなI/F(Find等),LINQの双方で行うことが可能である。

BIGDATAを扱う以外にも意外と使えるのではないだろうか?

たけぞう

たけぞう について

某ソフトウェア開発会社勤務。 開発の仕事は卒業しますた。 ・・・と思ったら、また開発に逆戻り(^^; ・・・と思ったら、また卒業らしい・・・
カテゴリー: C#, NO SQL, 技術情報 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です