С какими системами управления базами данных (СУБД) вы работали?

Ответ

Мой основной опыт включает работу со следующими реляционными СУБД:

  • 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 для тех, кто любит скорость.