প্রকল্প সম্পর্কে
# RedBase — .NET-এর জন্য টাইপড অবজেক্ট স্টোরেজ
RedBase হলো .NET-এর জন্য একটি ডেটা প্ল্যাটফর্ম যা টাইপড অবজেক্টগুলোকে একটি রিলেশনাল ব্যাকএন্ডে (PostgreSQL, Microsoft SQL Server, বা SQLite — এমবেডেড/অফলাইন, Blazor WebAssembly এবং SQLite প্রোভাইডারের মাধ্যমে মোবাইলসহ) সংরক্ষণ করে। আপনি সাধারণ C# ক্লাস হিসেবে স্কিমা সংজ্ঞায়িত করেন — RedBase একটি একক LINQ-স্টাইল API-এর মাধ্যমে স্টোরেজ, ইনডেক্সিং, কোয়েরি, ট্রি, লিস্ট, অ্যাগ্রিগেশন এবং উইন্ডো ফাংশন পরিচালনা করে।
কোনো Entity Framework নেই। কোনো মাইগ্রেশন নেই। ৪০টি টেবিলের Include চেইন নেই। শুধু C# ক্লাস এবং সংরক্ষণের জন্য এক লাইন, লোড করার জন্য এক লাইন।
## কেন RedBase
- **স্কিমা = C# ক্লাস**: আপনার ক্লাসে একটি প্রপার্টি যোগ করে একটি ফিল্ড যোগ করুন; `SyncSchemeAsync()` বাকিটা সামলায়। কোনো মাইগ্রেশন ফাইল নেই।
- **সম্পূর্ণ অবজেক্ট গ্রাফ**: নেস্টেড `RedbObject<T>` রেফারেন্স (একক, অ্যারে, ডিকশনারি) এক কলে সংরক্ষিত ও লোড হয় — কোনো JOIN বা Include চেইন নেই।
- **স্ট্রং টাইপিং**: প্রতিটি প্রপার্টি FK কনস্ট্রেইন্ট ও ইনডেক্সসহ একটি ডেডিকেটেড টাইপড কলামে ম্যাপ হয় — JSON ব্লব নয়। SQL স্তরে কোয়েরিযোগ্য।
- **বিল্ট-ইন ট্রি**: রিকার্সিভ CTE, ডেপথ, অ্যানসেস্টর এবং পাথ-টু-রুটসহ `TreeQuery<T>()`।
- **সমৃদ্ধ কোয়েরি API**: Where ফিল্টার, প্রজেকশন, GroupBy, অ্যাগ্রিগেশন এবং উইন্ডো ফাংশন (ROW_NUMBER, RANK, LAG/LEAD, NTILE, কাস্টম ফ্রেম) সহ সম্পূর্ণ LINQ সমর্থন।
- **একাধিক প্রোভাইডার**: PostgreSQL, MSSQL এবং SQLite (Blazor WebAssembly ও মোবাইলের জন্য বিশুদ্ধ C# সহ)।
## দ্রুত শুরু
```csharp
// ১. একটি স্কিমা সংজ্ঞায়িত করুন — এটাই আপনার "মাইগ্রেশন"
[RedbScheme("Employee")]
public class EmployeeProps
{
public string FirstName { get; set; } = "";
public string LastName { get; set; } = "";
public int Age { get; set; }
public decimal Salary { get; set; }
public string Department { get; set; } = "";
public string Position { get; set; } = "";
public DateTime HireDate { get; set; }
public string[]? Skills { get; set; }
public Address? HomeAddress { get; set; }
public Dictionary<int, decimal>? BonusByYear { get; set; }
}
// ২. স্কিমা সিঙ্ক করুন (স্বয়ংক্রিয়ভাবে স্টোরেজ তৈরি করে)
await redb.SyncSchemeAsync<EmployeeProps>();
// ৩. সংরক্ষণ করুন
var employee = new RedbObject<EmployeeProps>
{
name = "New Developer",
Props = new EmployeeProps
{
FirstName = "Alice",
LastName = "Johnson",
Age = 28,
Position = "Developer",
Department = "Engineering",
Salary = 85000m,
HireDate = DateTime.Today,
Skills = ["C#", "React", "SQL"]
}
};
await redb.SaveAsync(employee);
// ৪. লোড করুন
var loaded = await redb.LoadAsync<EmployeeProps>(employee.Id);
// ৫. কোয়েরি করুন
var results = await redb.Query<EmployeeProps>()
.Where(e => e.Salary > 75000m)
.OrderByDescending(e => e.Salary)
.Take(100)
.ToListAsync();
```
## প্যাকেজ
| প্যাকেজ | বিবরণ |
|---------|-------------|
| `redb.Core` | কোর অ্যাবস্ট্রাকশন, কোয়েরি বিল্ডার, LINQ প্রোভাইডার |
| `redb.Postgres` | PostgreSQL প্রোভাইডার (ফ্রি, Apache 2.0) |
| `redb.MSSql` | Microsoft SQL Server প্রোভাইডার (ফ্রি, Apache 2.0) |
| `redb.SQLite` | SQLite প্রোভাইডার (ফ্রি, Apache 2.0) — এমবেডেড/অফলাইন, নেটিভ লোডেবল এক্সটেনশন |
| `redb.Core.Pro` | Pro এক্সটেনশন: প্যারালাল মেটেরিয়ালাইজেশন, চেঞ্জ ট্র্যাকিং, মাইগ্রেশন |
| `redb.Postgres.Pro` | অপ্টিমাইজড কোয়েরি জেনারেশনসহ PostgreSQL Pro প্রোভাইডার |
| `redb.MSSql.Pro` | অপ্টিমাইজড কোয়েরি জেনারেশনসহ MSSQL Pro প্রোভাইডার |
| `redb.SQLite.Pro` | SQLite Pro প্রোভাইডার — বিশুদ্ধ C# (নেটিভ এক্সটেনশন নেই): Blazor WebAssembly ও মোবাইল |
| `redb.Export` | ডেটাবেস এক্সপোর্ট/ইমপোর্ট: ব্যাকআপ, PostgreSQL ↔ MSSQL-এর মধ্যে মাইগ্রেশনের জন্য `.redb` ফাইল (JSONL/ZIP) |
## সক্ষমতা
### CRUD
- একক বা ব্যাচ অবজেক্ট সংরক্ষণ
- সম্পূর্ণ অবজেক্ট গ্রাফসহ ID দ্বারা লোড
- COPY প্রোটোকলের মাধ্যমে বাল্ক ইনসার্ট
- ঐচ্ছিক পার্জসহ ডিলিট
### সমৃদ্ধ Props স্ট্রাকচার
Props-এ স্কেলার, নেস্টেড ক্লাস, অ্যারে, ডিকশনারি (টাপল কীসহ) এবং `RedbObject` রেফারেন্স থাকতে পারে — নির্বিচারে গভীর। সবই এক কলে সংরক্ষিত ও লোড হয়।
### কোয়েরি বৈশিষ্ট্য
- **Where ফিল্টার**: তুলনা, AND/OR/NOT, `WhereIn`, নালেবল চেক, বেস-ফিল্ড ফিল্টার
- **স্ট্রিং অপারেশন**: Contains, StartsWith, কেস-ইনসেনসিটিভ (অ-ইংরেজি টেক্সটের জন্য ICU কোলেশন সমর্থনসহ)
- **নেস্টেড প্রপার্টি**: যেকোনো গভীরতায় নেস্টেড ক্লাস ফিল্ডে ফিল্টার
- **অ্যারে অপারেশন**: এলিমেন্ট Contains, যেকোনো/সব কম্বিনেশন
- **ডিকশনারি অপারেশন**: ContainsKey, ইনডেক্সার ফিল্টার, নেস্টেড ভ্যালু
- **প্রজেকশন ও পেজিনেশন**: Select, Distinct, OrderBy/ThenBy, Skip/Take, FirstOrDefault
- **অ্যাগ্রিগেশন**: Sum, Average, Min/Max, ব্যাচ অ্যাগ্রিগেশন, ফিল্টারড অ্যাগ্রিগেশন
- **GroupBy**: একক বা কম্পোজিট কী, অ্যারে এলিমেন্ট গ্রুপিং
- **উইন্ডো ফাংশন**: ROW_NUMBER, RANK, DENSE_RANK, রানিং সাম, LAG/LEAD, FIRST/LAST_VALUE, NTILE, কাস্টম ফ্রেম
### ট্রি স্ট্রাকচার
ক্লোজার-টেবিল স্টোরেজ এবং রিকার্সিভ CTE-সহ বিল্ট-ইন হায়ারার্কিক্যাল ডেটা:
- চাইল্ড নোড তৈরি
- ডেপথ লিমিটসহ সম্পূর্ণ ট্রি লোড
- চিলড্রেন/ডেসেন্ড্যান্ট পাওয়া
- রুট পর্যন্ত পাথ
## ইনস্টলেশন
```bash
# PostgreSQL (ফ্রি)
dotnet add package redb.Postgres
# অথবা MSSQL (ফ্রি)
dotnet add package redb.MSSql
# Pro — স্বয়ংক্রিয়ভাবে redb.Core.Pro অন্তর্ভুক্ত করে
dotnet add package redb.Postgres.Pro # অথবা redb.MSSql.Pro
```
## সেটআপ
```csharp
using redb.Core;
using redb.Core.Extensions;
using redb.Postgres.Pro.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRedbPro(options => options
.UsePostgres("Host=localhost;Database=mydb;Username=postgres;Password=pass")
.Configure(c =>
{
c.PropsSaveStrategy = PropsSaveStrategy.ChangeTracking;
c.EnableLazyReferences = false;
c.EnablePropsCache = true;
}));
var app = builder.Build();
var redb = app.Services.GetRequiredService<IRedbService>();
await redb.InitializeAsync();
await redb.SyncSchemeAsync<EmployeeProps>();
```
ফ্রি ভার্সন `AddRedbPro`-এর পরিবর্তে `AddRedb` ব্যবহার করে।
## ডেটাবেস সেটআপ অপশন
- স্টার্টআপে স্বয়ংক্রিয় (`InitializeAsync(ensureCreated: true)`)
- স্পষ্ট কল (`EnsureDatabaseAsync()` + `InitializeAsync()`)
- DBA/CI-এর জন্য SQL স্ক্রিপ্ট এক্সপোর্ট (`GetSchemaScript()`)
- CLI টুল (`redb init`, `redb schema`)
## ক্লায়েন্ট-সাইড: Blazor WebAssembly ও মোবাইল
দুটোই `redb.SQLite.Pro` (বিশুদ্ধ C#)-এ চলে। মোবাইলের জন্য বিশেষ কিছু প্রয়োজন নেই; Blazor WebAssembly-এর জন্য নেটিভ রিলিংক, ম্যানুয়াল ইনিশিয়ালাইজেশন এবং অ্যাপ্লিকেশন-লেভেল পার্সিস্টেন্স প্রয়োজন।
## লাইসেন্স
ফ্রি প্যাকেজের জন্য Apache 2.0; Pro প্যাকেজের জন্য লাইসেন্স প্রয়োজন (SQLite.Pro-এর 3.x/4.x লাইনে প্রয়োজন নেই)।
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.