Open Source + Pro Edition

База данных объектов
для .NET

Не key-value хранилище. Настоящие объекты, настоящие запросы.
LINQ, деревья, агрегации, оконные функции — нативный SQL.

$ dotnet new install redb.Templates && dotnet new redb -n MyApp
// Define your model
[RedbScheme]
public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    public Category Category { get; set; }  // Nested!
}

// Query with full LINQ
await redb.Query<Product>()
    .Where(p => p.Price < 100)
    .Where(p => p.Category.Name == "Electronics")
    .OrderBy(p => p.Name)
    .ToListAsync();
100K+ Объектов протестировано
<15ms Время запроса
2 СУБД
0 Миграций

Почему RedBase?

Строгая типизация

Настоящие C# классы с IntelliSense. Проверки на этапе компиляции. Полный рефакторинг. Без магических строк.

Древовидные структуры

Иерархические данные как объект первого класса. Предки, потомки — оптимизированные CTE-запросы.

Полный LINQ

Where, OrderBy, GroupBy, Take, Skip, Any, All, Count — всё компилируется в нативный SQL.

Аналитика

GroupBy, Sum, Avg, Min, Max. Оконные функции: RowNumber, Rank, Lag, Lead.

Без миграций

Code-first синхронизация. Добавьте свойство — база обновится автоматически. Без скриптов.

Enterprise Ready

PostgreSQL, SQL Server и SQLite. Кеширование, отслеживание изменений, вычисляемые выражения.

Пишите меньше. Запрашивайте больше.

Никаких цепочек Include. Никаких проблем N+1.

Традиционный подход
// Nested objects = Include chains
var dbOrders = await context.Orders
    .Include(o => o.Customer)
    .Include(o => o.Items)
        .ThenInclude(i => i.Product)
            .ThenInclude(p => p.Category)
    .Include(o => o.Shipping)
        .ThenInclude(s => s.Address)
    .Where(o => o.Status == "Active")
    .ToListAsync();

// Then map to business objects...
var orders = dbOrders.Select(MapToOrder);

// 6 JOINs, N+1 risk, manual mapping
RedBase
// Query business objects directly
var orders = await redb
    .Query<Order>()
    .Where(o => o.Status == "Active")
    .Where(o => o.Customer.Country == "US")
    .ToListAsync();

// Business entities ready to use
// No DB models. No mapping.
// No Include. Compile-time safe.

Настоящий SQL. Настоящая мощь.

Построен на PostgreSQL, SQL Server и SQLite — от одного встраиваемого файла до корпоративных серверов.

Вся мощь реляционных БД

Индексы, внешние ключи, транзакции, ограничения, триггеры — всё, что предоставляет ваш SQL-сервер. Без ограничений.

ACID-транзакции

Настоящие транзакции базы данных с поддержкой отката. Не eventual consistency — немедленная, надёжная, проверенная в бою.

Нативная производительность SQL

Запросы компилируются в оптимизированный SQL. Используйте EXPLAIN ANALYZE. Добавляйте индексы. Никакого чёрного ящика.

Строгая типизация

C# классы с IntelliSense. Проверки на этапе компиляции. Рефакторинг работает. Без магических строк, без сюрпризов в рантайме.

Свой SQL при необходимости

Пишите сырой SQL для сложных случаев. Комбинируйте LINQ и SQL свободно. Полный контроль, когда нужно.

Лучше, чем NoSQL

Гибкость документных хранилищ + мощь SQL. Вложенные объекты без парсинга JSON. Настоящие запросы, не map-reduce.

Идеально подходит для

От простых проектов до корпоративных систем — один подход для всего.

Простая интеграция с SQL

Есть существующая SQL база? Просто подключитесь, опишите классы и начните работать. Без миграций, без изменений схемы. Развивайтесь постепенно.

Хранимые процедуры и функции

Используйте существующую библиотеку SQL-функций. Создавайте свои процедуры. Вызывайте их прямо из LINQ. Вся мощь SQL в C# коде.

IoT и телеметрия

Датчики, устройства, контроллеры — храните как объекты RedBase. Создайте свои партиционированные таблицы трендов для временных рядов. Связь через FK с _objects. Лучшее из двух миров.

Идентификация и IAM

Пользователи, роли, разрешения, клеймы, политики, журналы аудита. Вместо 20+ таблиц ASP.NET Identity — просто C# классы. Типизированные, рефакторируемые, простые.

CRM и бизнес-приложения

Контакты, компании, сделки, товары. Каждая отрасль требует разных полей. Добавляйте атрибуты без ALTER TABLE. Гибко как таблица, типизировано как код.

No-Code и конструкторы

Конструкторы сайтов, CMS, конструкторы форм. Пользователи создают типы сущностей в рантайме. Вы просто сохраняете объекты — без генерации схемы, без генерации кода.

Простые проекты

Блог, каталог, портфолио? Опишите классы, сохраните объекты, делайте запросы через LINQ. База данных готова за минуты. Масштабируйте при необходимости.

Медицина и ERP

Сотни типов сущностей: пациенты, диагнозы, анализы, оборудование, заказы. Традиционный подход = сотни таблиц. RedBase = просто C# классы.

E-commerce

У одежды — размер и цвет. У техники — характеристики. У еды — срок годности. У каждой категории — свои атрибуты. Один кодбейз, без схемы на категорию.

Портируемость баз данных

Экспорт в .redb файл, импорт в любую поддерживаемую СУБД. PostgreSQL сегодня, SQL Server завтра. Один формат бэкапа, без привязки к вендору. CLI-инструмент в комплекте.

Будущие движки

PostgreSQL и SQL Server сегодня. Oracle, MySQL, SQLite, ClickHouse — в планах. Ваш код остаётся тем же. Смените движок без переписывания запросов.

Cloud и MPP Ready

SQL Server → Azure SQL. PostgreSQL → Aurora, AlloyDB, Citus. Совместимость с GreenPlum в исследовании. Тот же код, смените строку подключения — из on-prem в облако за минуты.

.NET Native

Создан для .NET-разработчиков. Работает с C#, F#, VB.NET — любым .NET языком.

Кросс-платформенность

Windows, Linux, macOS, Docker, Kubernetes. .NET 8+ с поддержкой AOT. Деплой куда угодно — один бинарник.

Отладка и прозрачность

ToSqlString() на любом запросе — смотрите точный SQL перед выполнением. Никакого чёрного ящика. Используйте EXPLAIN ANALYZE. Профилируйте как нативный SQL.

Параллельная обработка

Parallel.ForEach для материализации. Параллельный diff деревьев. Пакетные операции. Масштабируется на все ядра CPU. 100K+ объектов/сек.

Полная поддержка LINQ

Where, Select, OrderBy, GroupBy, Any, All, Count, Take, Skip — всё работает. Не подмножество. Настоящий LINQ, настоящая мощь.

Dependency Injection

Стандартный IServiceCollection. AddRedb() и готово. Scoped-сервисы, правильный lifetime. ASP.NET Core, Blazor, MAUI — нативная интеграция.

100% Async

Каждая операция — async/await. Без блокирующих вызовов. Идеально для высоконагруженных веб-приложений, real-time сервисов, микросервисов.

Строгая типизация

IntelliSense для всех свойств. Проверки на этапе компиляции. Рефакторинг работает по всей кодовой базе. Без магических строк, без сюрпризов.

NuGet Ready

dotnet add package redb.Postgres — начните кодить за секунды. Ядро с открытым исходным кодом бесплатно навсегда. Pro-пакеты для корпоративных нужд.

SQL под конкретную СУБД

LINQ компилируется в оптимизированный SQL для PostgreSQL или SQL Server. Не generic SQL — нативный синтаксис, нативные функции, нативная производительность.

N O D S для .NET

RedBase — Native Object Database on SQL

Объектно-нативная. SQL-powered.
Храните C# объекты напрямую, используя PostgreSQL или SQL Server как движок.
Без миграций. Полный LINQ. SQL-доступ, когда нужно.

Начните строить сегодня

Бесплатное ядро с открытым кодом. Pro-функции для корпоративных нужд.

Последние релизы

  • 3.7.0
    • A property changing type could silently lose its values (all providers, Free and Pro). Scheme
    • SQLite refused every cross-column type migration. PostgreSQL and MSSQL convert between scalar
    • String to Boolean migration destroyed values it could not read (PostgreSQL, MSSQL). The
    • migrate_structure_type now ships in the versioned module, so fixes to it reach existing
  • 3.6.0
    • SumRedbAsync / AverageRedbAsync threw InvalidOperationException on an empty selection
    • TreeQuery(rootObj).WhereLeaves() / .WhereRoots() ignored the root and scanned the whole scheme
  • 3.5.0
    • Hashing threw on Blazor WebAssembly, breaking every write (RedBase.Core, RedBase.Core.Pro).
    • Android apps shipped ~360 KB of unusable Linux binaries in every APK (RedBase.SQLite). The Free
    • Props cache could serve a stale ("dirty") object mutated in place after it was cached
    • RedbHash was order-dependent for Dictionary properties (RedBase.Core + all providers). A
Все релизы (14) →

Статьи по redb

Архитектура движка подбора билетов: три GDS, железная дорога и маршрут, который меняют в дороге Референсная архитектура движка подбора билетов на redb: канонная модель, Scatter-Gather по трём GDS и ж/д, дерево-маршрут и saga-переоформление в дороге.
Не заводите вторую базу ради объектов: redb против MongoDB и RavenDB Объектное хранилище с типами, деревьями и настоящим SQL прямо в вашей PostgreSQL/MS SQL/SQLite. FK на объекты, EF и Dapper рядом. redb против Mongo и Raven.
redb 3.6.0: багрепорт, который оказался в шести провайдерах сразу — плюс AS2/EDI и общий порт Отчёт пользователя вскрыл утечку между диалогами в query-провайдере ядра — 6 из 6. Что ещё в 3.6.0: AS2/EDI, общий Kestrel, Camel-паритет.
Локальная база на клиенте: Blazor WebAssembly и MAUI на SQLite — без DbContext, Include и миграций Офлайн-хранилище со сложным графом и outbox: быстрый старт в MAUI и в браузере, базовые операции и почему в этой роли EF Core только мешает.
redb 3.4.0: переигрываем упавшее, патчим фреймворк без пересборки и раздаём права — экосистема .NET, повзрослевшая до эксплуатации Операции второго дня: переиграть упавшее, пропатчить фреймворк без пересборки и раздать права на control plane.
redb 3.3.0: решение уровня энтерпрайз на .NET — своя БД, свой Apache Camel и рантайм с дашбордом (и всё это бесплатно) Решение уровня энтерпрайз на .NET, которое принадлежит вам: своя БД, свой Apache Camel и рантайм с дашбордом.
redb под SQLite, по-инженерному: как мы засунули движок запросов в C-расширение, почему дату храним числом и три бага с разбором Движок запросов внутри C-расширения, даты числами и три бага, пойманных до того, как их увидел кто-то ещё.
RedBase 3.2.0 — SQLite-провайдер: один файл, офлайн, Blazor WASM и мобилки Типизированное хранилище в одном файле: офлайн, Blazor WASM и мобилки — с тем же LINQ, что у серверных провайдеров.
Все статьи по redb (10) →