はじめに
.NETの世界では、データベースの選択は極めて重要です。今日は軽量NoSQLデータベース「LiteDB」をご紹介します。コンパクトながら強力な機能を備え、プロジェクトに高速で柔軟なデータストレージソリューションを提供します。初心者から熟練開発者まで、LiteDBは頼りになるパートナーとなるでしょう!
LiteDBとは
LiteDBは、完全にC#のマネージコードで書かれた、オープンソースの組み込み型NoSQLデータベースで、.NET向けに設計されています。BSON(Binary JSON)形式でデータを保存し、豊富なクエリ操作をサポートし、複雑なサーバーのインストールや管理は不要です。LiteDBは、小規模プロジェクト、デスクトップアプリケーション、マイクロサービスアーキテクチャでのデータストレージ要件に最適です。

LiteDBの機能
- • MongoDBに似たシンプルなAPI
- • 単一DLL内の.NET 4.5 / NETStandard 1.3/2.0向け、100% C#コード(450KB未満)
- • スレッドセーフ
- • 書き込み失敗後のデータ復旧(WALログファイル)
- • DES(AES)暗号技術によるデータファイルの暗号化
- • POCOクラスを属性またはFluentマッパーAPIでBsonDocumentにマッピング
- • ファイルやストリームデータの保存(MongoDBのGridFSのように)
- • 単一データファイルでの保存(SQLiteのように)
- • 高速検索のためのドキュメントフィールドのインデックス作成
- • クエリに対するLINQサポート
- • データアクセス/変換のためのSQLライクなコマンド
- • オープンソースで、全員に無料(商用利用を含む)
LiteDBのハイライト
軽量:サーバーのインストール不要で、.NETプロジェクトに直接統合可能。フットプリントが小さく、高速に動作。
高性能:インデックス、クエリ最適化、非同期操作をサポートし、データの読み書きを効率的に行う。
使いやすさ:シンプルなAPIと充実したドキュメントにより、すぐに使いこなせる。
ACIDトランザクション対応:データの一貫性と整合性を保証。
クロスプラットフォーム:Windows、Linux、macOSなど複数のプラットフォームで動作。
美しいUIサポート:LiteDB Studio - データアクセスのための洗練されたユーザーインターフェース。
LiteDBの使い方
インストール:NuGetパッケージマネージャーで簡単にインストール。
データベース作成:プロジェクトでLiteDatabaseインスタンスを作成し、データベースファイルのパスを指定。
モデル定義:C#クラスでデータモデルを定義。
データの保存とクエリ:LiteDBが提供するAPIを使用して、データの保存、クエリ、更新を行う。
美麗なUI
Lite.Studio - データベース管理・可視化のための新しいUI

特長

LiteDBは、データと構造操作のためのSQLライクな言語をサポートしています。非常に似たSQLリレーショナル言語を使用して、データベースの挿入、更新、削除、またはクエリを実行できます。
LINQ式(ラムダ関数)を使用して、C#コードで流れるようなAPIクエリを作成できます。
新しいLiteDB.Studio管理ツールは、すべてのSQLコマンドをサポートしています。
また、クエリエンジンから詳細なEXPLAIN PLANを取得して、作成したクエリが最適なパフォーマンスで実行されるか確認できます。
実践例
簡単な実践例を通して、LiteDBを使用して.NETプロジェクトでデータの追加・削除・変更・検索操作を行う方法を示します。
// POCOクラスを作成
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string[] Phones { get; set; }
public bool IsActive { get; set; }
}
// データベースを開く(存在しない場合は作成)
using(var db = new LiteDatabase(@"MyData.db"))
{
// customerコレクションを取得
var col = db.GetCollection<Customer>("customers");
// 新しいcustomerインスタンスを作成
var customer = new Customer
{
Name = "John Doe",
Phones = new string[] { "8000-0000", "9000-0000" },
Age = 39,
IsActive = true
};
// Nameフィールドに一意インデックスを作成
col.EnsureIndex(x => x.Name, true);
// 新しいcustomerドキュメントを挿入(Idは自動採番)
col.Insert(customer);
// コレクション内のドキュメントを更新
customer.Name = "Joana Doe";
col.Update(customer);
// LINQを使用してドキュメントをクエリ(インデックスなし)
var results = col.Find(x => x.Age > 20);
}
より複雑なデータモデルの使用例
// クロス参照用のDbRef
public class Order
{
public ObjectId Id { get; set; }
public DateTime OrderDate { get; set; }
public Address ShippingAddress { get; set; }
public Customer Customer { get; set; }
public List<Product> Products { get; set; }
}
// グローバルインスタンスからマッパーを再利用
var mapper = BsonMapper.Global;
// "Products"と"Customer"は他のコレクション(埋め込みドキュメントではない)
mapper.Entity<Order>()
.DbRef(x => x.Customer, "customers") // 1対1/0参照
.DbRef(x => x.Products, "products") // 1対多参照
.Field(x => x.ShippingAddress, "addr"); // 埋め込みサブドキュメント
using(var db = new LiteDatabase("MyOrderDatafile.db"))
{
var orders = db.GetCollection<Order>("orders");
// Orderをクエリする際、参照を含める
var query = orders
.Include(x => x.Customer)
.Include(x => x.Products) // 1対多参照
.Find(x => x.OrderDate <= DateTime.Now);
// Orderの各インスタンスはCustomer/Products参照をロードする
foreach(var order in query)
{
var name = order.Customer.Name;
...
}
}
まとめ
LiteDBは、軽量NoSQLデータベースとして、そのコンパクトさ、高性能、使いやすさにより、.NET開発の分野で広く認知されています。初心者から熟練開発者まで、プロジェクトのデータストレージソリューションとしてLiteDBをぜひ試してみてください。