Ответ
Мой основной опыт включает работу со следующими реляционными СУБД:
- Microsoft SQL Server: Наиболее глубокий опыт. Работал над оптимизацией сложных запросов (анализ планов выполнения, создание индексов), разрабатывал хранимые процедуры, функции, триггеры и представления. Использовал возможности AlwaysOn для обеспечения высокой доступности.
- PostgreSQL: Применял в проектах, где были важны открытость, расширяемость и продвинутые типы данных. Имею опыт работы с
JSONBдля хранения полуструктурированных данных, а также с полнотекстовым поиском. - MySQL / MariaDB: Использовал в веб-проектах, часто в связке с PHP или как часть стека LEMP. Знаком с особенностями движков хранения InnoDB и MyISAM.
- SQLite: Идеальный выбор для встраиваемых приложений, локальных кэшей или прототипирования. Использовал в мобильных и десктопных приложениях на .NET.
Пример работы с данными на C# с использованием ADO.NET (для MS SQL Server):
public async Task<List<User>> GetUsersAsync()
{
var users = new List<User>();
// using гарантирует закрытие соединения
using (var connection = new SqlConnection(_connectionString))
{
await connection.OpenAsync();
// using гарантирует освобождение команды
using (var command = new SqlCommand("SELECT Id, Name, Email FROM Users WHERE IsActive = @isActive", connection))
{
command.Parameters.AddWithValue("@isActive", true);
// using гарантирует закрытие DataReader
using (var reader = await command.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
users.Add(new User
{
Id = reader.GetInt32(0),
Name = reader.GetString(1),
Email = reader.GetString(2)
});
}
}
}
}
return users;
}
Для повышения продуктивности и абстракции от чисто SQL активно использовал ORM, в первую очередь Entity Framework Core (Code-First и Database-First подходы) и Dapper как микро-ORM для сценариев, критичных к производительности.
Ответ 18+ 🔞
Слушай, вот мой опыт с базами данных, если по-простому. Это как рассказывать, на каких тачках ездил — у каждой свои приколы.
Microsoft SQL Server — это мой основной конь, на нём собаку съел, блядь. Там и сложные запросы оптимизировал — сидишь, смотришь на план выполнения, и понимаешь, что он жрёт ресурсы как не в себя. Приходилось индексы лепить, хранимки писать, триггеры эти... В общем, полный фарш. И высокую доступность настраивал через AlwaysOn — чтобы если что, всё не накрылось медным тазом.
PostgreSQL — это для проектов, где надо что-то гибкое и открытое. Охуенная штука, кстати. Любил там с JSONB работать, когда данные полуструктурированные, как попало. И поиск полнотекстовый там — просто песня, а не функция.
MySQL / MariaDB — классика для веба. Часто с PHP или в связке LEMP. Там главное движок не перепутать — InnoDB для нормальных людей, а MyISAM... ну, для тех, кому похуй на целостность данных, только бы быстро читалось.
SQLite — лёгкий, встраиваемый, идеален для мобилок или когда прототип пишешь. В .NET приложениях его юзал — просто берёшь файлик и работает, нихуя не надо поднимать.
А вот пример, как я на C# с MS SQL через голый ADO.NET работал. Смотри, как аккуратно, чтобы ничего не утекло:
public async Task<List<User>> GetUsersAsync()
{
var users = new List<User>();
// using гарантирует закрытие соединения
using (var connection = new SqlConnection(_connectionString))
{
await connection.OpenAsync();
// using гарантирует освобождение команды
using (var command = new SqlCommand("SELECT Id, Name, Email FROM Users WHERE IsActive = @isActive", connection))
{
command.Parameters.AddWithValue("@isActive", true);
// using гарантирует закрытие DataReader
using (var reader = await command.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
users.Add(new User
{
Id = reader.GetInt32(0),
Name = reader.GetString(1),
Email = reader.GetString(2)
});
}
}
}
}
return users;
}
Но чтобы каждый раз так не извращаться, использовал ORM. Entity Framework Core — это сила, особенно когда по Code-First работаешь. А если нужно быстрее, чем EF, но удобнее, чем голый ADO, то Dapper — просто ёбушки-воробушки, микро-ORM для тех, кто любит скорость.