小さくても美しく、強力:.NET領域の軽量NoSQLデータベースを解明

小さくても美しく、強力:.NET領域の軽量NoSQLデータベースを解明

.NETの世界では、データベースの選択は非常に重要です。本日は軽量NoSQLデータベース「LiteDB」をご紹介します。小さなサイズながら強力な機能を備え、プロジェクトに高速で柔軟なデータストレージソリューションを提供します。初心者からベテラン開発者まで、LiteDBは頼りになるパートナーです!

最終更新 2024/03/08 5:14
开源项目甄选
読了目安 3 分
カテゴリ
.NET
タグ
.NET C# データベース LiteDB NoSQL

はじめに

.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をぜひ試してみてください。

ソースコード

https://github.com/mbdavid/LiteDB

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む
同じカテゴリ / 同じタグ 2026/02/07

AOTの使用経験のまとめ

プロジェクト作成当初から、新機能を追加したり新しい構文を使用したりした場合には、すぐにAOT公開テストを実施するという良い習慣を身につけるべきです。

続きを読む