LiteDB، یک دیتابیسِ NoSQL سبک، کوچک، سریع و جاسازی شده (embedded) برای دات نت است. این دیتابیس، متنباز بوده و بهصورت رایگان در اختیار همه و حتی استفاده تجاری قرار دارد. LiteDB از کوئریهای LINQ نیز پشتیبانی میکند. این دیتابیس، دادهها را در سندها ذخیره و از رمزگزاریِ فایل داده به کمک الگوریتم DES (AES) نیز پشتیبانی میکند.
همانند SQLite، دیتابیس LiteDB نیز دادهها را در یک فایل تنها ذخیره میکند. آن همچنین میتواند فیلدهای سند رابرای جستجوی سریعتر ایندکس کند.
ویژگیها
- ذخیرهی سند NoSQL بدون سرور (Serverless)
- رابط یا API ساده، مشابه دیتابیس MongoDB
- 100درصد نوشته شده با کد سیشارپ و براساس .NET 4.5 / NETStandard 1.3/2.0 در یک فایل DLL کمتر از 450 کیلوبایت
- Thread-safe
- ACID with full transaction support
- Data recovery after write failure (WAL log file)
- بازیابی داده پس از عدم موفقیت در نوشتن (WAL log file)
- رمزگزاری داده با استفاده از الگوریتم رمزنگاری DES (AES)
- مپکردن کلاسهای POCO خود به BsonDocument با استاده از استفاده از Attribute ها یا fluent mapper API.
- ذخیرهی فایلها و استریم داده (همانند GridFS در دیتابیس MongoDB)
- ذخیره فایل تک داده (مانند SQLite)
- ایندکسکردن فیلدهای سند برای جستجوی سریع
- پشتیبانی LINQ برای کوئریها
- دستوراتی شبیه SQL برای دسترسی/انتقال دادهها
- LiteDB Studio – نرم افزار رابط کاربری برای دسترسی به دیتابیس
- متنباز و رایگان برای همه – از جمله استفاده تجاری
- نصب از طریق Nuget
کاربرد
- برنامههای کوچک دسکتاپی
- فرمت فایل اپلیکیشن (ایجاد فرمت دلخواه)
- اپلکیشنهای تحت وب کوچک
- دیتابیس به ازای ذخیرهی داده برای هر اکانت/کاربر
نصب و راه اندازی
در محیط ویژوال استودیو و پروژهی خود، از منوی Tools، وارد NuGet Package Manager شده و روی Package Manager Console کلیک کنید. دستور زیر را تایپ کرده و Enter را بزنید تا کتابخانه نصب شود:
1 |
Install-Package LiteDB |
روش استفاده
در اینجا یک مثالی آورده شده است. فرض کنید کلاس POCO ای به نام Customer داریم:
1 2 3 4 5 6 7 8 |
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; } } |
حالا برای باز کردن فایل یک دیتابیس یا ایجاد آن در صورت وجود نداشتن:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// 1 using(var db = new LiteDatabase(@"MyData.db")) { // 2 var col = db.GetCollection<Customer>("customers"); // 3 var customer = new Customer { Name = "John Doe", Phones = new string[] { "8000-0000", "9000-0000" }, Age = 39, IsActive = true }; // 4 col.EnsureIndex(x => x.Name, true); // 5 col.Insert(customer); // 6 customer.Name = "Joana Doe"; // 7 col.Update(customer); // 8 var results = col.Find(x => x.Age > 20); } |
- در اینجا، MyData.db (میتوانید مسیر کامل بنویسید) در مسیر اپلیکیشن در صورت وجود نداشتن ایجاد شده و پس از اتصال به آن، از طریق متغیر db قابل دسترسی خواهد بود.
- مجموعه کلکسیون مربوط به کلاس Customer که در عنوان “customers” (دلخواه) وجود دارد گرفته میشود. (قرار است یک کاستومر ایجاد و به آن اضافه کنیم.)
- درون متغیر col قرار میگیرد. یک آبجکت Customer جدید ساخته و ویژگیهای آن مقداردهی میشود. (ولی هنوز به دیتابیس اضافه نشده است)
- یک ایندکس یکتا در فیلد نام ایجاد میشود.
- آبجکت Customer ایجاد شده به مجموعه اضافه میشود. (آیدی یا شناسه به صورت خودکار اختصاص داده میشود)
- مقدار یکی از ویژگیهای آبجکت Customer ایجاد شده را تغییر میدهیم (ولی هنوز در دیتابیس اعمال ندشه است)
- ازطریق متد Update مجموعه، آبجکت را ارسال میکنیم تا ویرایش شود.
- از LINQ برای کوئری زدن به سندها استفاده میکنیم. (بدون هیچ ایندکسی)
با استفاده از fluent maper و رفرنسدهی (مرجعدهی) چند مستندی برای مدلهای دادهای پیچیدهتر. فرض کنید کلاسی به صورت زیر داریم:
1 2 3 4 5 6 7 8 9 |
// DbRef to cross references 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; } } |
حالا:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Re-use mapper from global instance var mapper = BsonMapper.Global; // "Products" and "Customer" are from other collections (not embedded document) mapper.Entity<Order>() .DbRef(x => x.Customer, "customers") // 1 to 1/0 reference .DbRef(x => x.Products, "products") // 1 to Many reference .Field(x => x.ShippingAddress, "addr"); // Embedded sub document using(var db = new LiteDatabase("MyOrderDatafile.db")) { var orders = db.GetCollection<Order>("orders"); // When query Order, includes references var query = orders .Include(x => x.Customer) .Include(x => x.Products) // 1 to many reference .Find(x => x.OrderDate <= DateTime.Now); // Each instance of Order will load Customer/Products references foreach(var order in query) { var name = order.Customer.Name; ... } } |
LiteDB.Studio
از این نرم فازار میتوان برای مدیریت و مشاهده فایل پایگاه داده استفاده کرد: (لینکهای دانلود در انتهای مطلب قرار دارد.)
پلاگینها
- GUI viewer tool
- GUI editor tool
- Lucene.NET directory
- پشتیبانی از LINQPad
- پشتیبانی از زبان برنامهنویسی F#
نظرات ثبت شده بدون دیدگاه