\

.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 の使い方

https://github.com/mbdavid/LiteDB.Studio

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

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

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

LiteDB Studio起動画面

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

LiteDB Connection Manager

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

LiteDB

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

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

https://www.nuget.org/packages/LiteDB

名前空間は、LiteDBです。

インサートするコード

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

1
2
3
4
5
6
7
8
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ファイルの作成とテーブルへのインサートを行います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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ファイルを読み込みます。存在しなければ、自動的に作成されます。

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

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

“customers”はLiteDBのテーブル名です。

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

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

1
2
3
4
5
6
7
customer cus = new customer
{
name = "John Doe123",
phones = new string[] { "000-0000", "111-1111" },
isActive = true,
additional = "additional data"
};

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

1
col.Insert(cus);

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

LiteDBデータ表示

データ抽出するコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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が使えます。

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

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

1
2
3
4
foreach(var item in result)
{
Console.WriteLine(item.name);
}

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱