【LiteDBの使い方】.NET系言語でポータブルNoSQLデータベースを使うにはLiteDBがおすすめ

はじめに

.NET系言語でポータブルNoSQLデータベースを探している場合は、LiteDBがおすすめです。すべての.NETプラットフォームで使用可能であり、C#で書かれており親和性があり、DLLも軽量です。

詳しく説明します。

litedb.org

LiteDB - Embedded NoSQL database for .NET

NoSQLデータベースとは

  • リレーショナルデータベースと違い、テーブル定義が不要
  • キー項目を確定すれば、データ項目は可変でOK
  • DB設計工程の工数削減が期待できます。

NoSQL とは、一般的なリレーショナルデータベースとは異なり、キー項目を検索条件にして値を取得します。

テーブルレイアウトは可変であり、同じテーブル内のレコードであっても、項目を変えることができます。

リレーショナルではテーブル定義を決定しないと、データを格納できません。しかし、NoSQLデータベースでは、キー項目のみ確定しておけば、残りの項目は後から変更可能です。テーブル定義も不要です。

厳密にテーブル定義を決定する必要がないので、DB設計工程を大幅に短縮することができます。開発期間の短縮が見込まれ、アジャイル開発等で積極的に利用されています。

なぜおすすめか

  • すべての.NETプラットフォームで使える
  • C#で書かれており、親和性がある
  • Nugetで簡単インストール、DLLのファイルサイズが450KB以下
  • LiteDB.StudioというGUIツールが使える

C#でポータブルなNoSQLデータベースを使う場合、LiteDBをおすすめします。

LiteDB - Embedded NoSQL database for .NET

LiteDBはC#で書かれており、.NETフレームワークの共通言語ランタイムで処理可能な中間コードで実装されています。

.NET 4.5 または .NET Standard 2.0 以上で使用可能です。これにより、Windowsだけでなく、MacやLinux、Xamarinなど、すべての.NETプラットフォームで動作するNoSQLデータベースです。

NuGetから簡単にダウンロードでき、単一のDLLで構成されています。DLLのファイルサイズは450KB以下と軽量です。

以下で説明するLiteDB.STUDIOを使用すると、データベースの内容をGUIで操作することが可能です。

LiteDB.Studio の使い方

GitHub - mbdavid/LiteDB.Studio: A GUI tool for viewing and editing documents for LiteDB v5
A GUI tool for viewing and editing documents for LiteDB v5 - GitHub - mbdavid/LiteDB.Studio: A GUI tool for viewing and editing documents for LiteDB v5

LiteDB.Studio はLiteDBv5で使用可能で、NoSQLのデータを表示・編集するためのGUIツールです。

上記のGithubリポジトリから、exeとソースコードを入手可能です。exeも同梱されていますので、コンパイルは不要です。

起動すると、以下のような画面が表示されます。

LiteDB Studio起動画面

「Connect」をクリックして、LiteDBファイルを選択します。

LiteDB Connection Manager

テーブルなどのオブジェクト一覧が内容が表示されます。テーブルをクリックするとコマンドが表示されますので、「Run」をクリックして実行すると、テーブル内容が表示されます。

LiteDB

LiteDBパッケージのインストール

Nugetから簡単インストールできます。

LiteDB 5.0.17
LiteDB - A lightweight embedded .NET NoSQL document store in a single datafileSigned by signpath.io from repository ' commit 'd13058ffe33a0885a783cfc8e23ca6748a...

名前空間は、LiteDBです。

インサートするコード

以下のデータ項目をクラスとして定義します。

    public class customer
    {
        public int id { get; set; }
        public string name { get; set; }
        public string[] phones { get; set; }
        public bool isActive { get; set; }
        public string additional { get; set; }
    }

idは、NoSQLデータベースのキー項目です。LiteDBが自動的に採番しますので、ソースコード上は値の設定が不要です。

以下のコードで、LiteDBファイルの作成とテーブルへのインサートを行います。

    public static void createLiteDB()
    {
        using (LiteDatabase litedb = new LiteDatabase(@"C:\jwork\@Programming\CoreConsole\DataBase\lite.db"))
        {
            var col = litedb.GetCollection<customer>("customers");

            customer cus = new customer
            {
                name = "John Doe123",
                phones = new string[] { "000-0000", "111-1111" },
                isActive = true,
                additional = "additional data"
            };

            col.Insert(cus);
        }
    }

以下のコードでLiteDBファイルを読み込みます。存在しなければ、自動的に作成されます。

using (LiteDatabase litedb = new LiteDatabase(@"C:\jwork\@Programming\CoreConsole\DataBase\lite.db"))

コレクションオブジェクトを作成します。

**"customers"**はLiteDBのテーブル名です。

var col = litedb.GetCollection<customer>("customers");

customerクラスのオブジェクトを作成します。

    customer cus = new customer
    {
        name = "John Doe123",
        phones = new string[] { "000-0000", "111-1111" },
        isActive = true,
        additional = "additional data"
    };

最後に、コレクションオブジェクトの Insertメソッドを使用して、インサートします。

    col.Insert(cus);

以下のようにデータが格納されれば、成功です。

LiteDBデータ表示

データ抽出するコード

    public static void queryLiteDB()
    {
        using(LiteDatabase litedb = new LiteDatabase(@"C:\jwork\@Programming\CoreConsole\DataBase\lite.db"))
        {
            var col = litedb.GetCollection<customer>("customers");

            var result = col.Query()
                .Where(x => x.name.StartsWith("J"))
                .OrderBy(x => x.name)
                .ToList();

            foreach(var item in result)
            {
                Console.WriteLine(item.name);
            }

        }
    }

コレクションオブジェクトのQueryメソッドでデータを抽出します。

LINQが使えます。

    var result = col.Query()
        .Where(x => x.name.StartsWith("J"))
        .OrderBy(x => x.name)
        .ToList();

抽出結果が複数レコードの場合は、foreachで1つずつ抽出が可能です。

    foreach(var item in result)
    {
        Console.WriteLine(item.name);
    }

以下のページもおすすめです。

コメント

タイトルとURLをコピーしました