Запрос большого набора данных .NET Core для сериализации

#sql #json #serialization #.net-core

#sql #json #сериализация #.net-core

Вопрос:

У меня довольно большая база данных SQL (~ 7 ГБ) со многими таблицами. Перебор этих таблиц с помощью автоматического запроса SELECT приводит к наборам данных различного размера — некоторые из них меньше, в то время как другие имеют тенденцию к увеличению. Хотя небольшие наборы данных не создают проблем, большие наборы данных замедляют процесс, и он никогда не завершается (или, может быть, это займет несколько дней, я на самом деле не пробовал этого по понятным причинам).

Все данные должны быть сериализованы (здесь используется Newtonsoft JSON).

Код прост:

  private void GetConnection(string connectionString, string statement)
    {
        var ds = new DataSet();
        var da = new SqlDataAdapter(statement, connectionString);
        da.Fill(ds);
        SerializeDataSet(ds);
    }
  

Пожалуйста, обратите внимание, что:

  • Это консольное приложение .NET Core
  • Я не имею права вносить изменения в базу данных (например, разбивать большие таблицы на меньшие. Это то, что есть.)
  • Приемы, которые могут сработать при создании приложения для пользователей (такие как отложенная загрузка данных, разбивка на страницы), здесь не сработают, поскольку я сериализуюданные в JSON, поэтому мне нужно получить все данные сразу.

Ищете полезное решение, если оно у вас есть, спасибо.

Комментарии:

1. Преобразование данных объемом 7 ГБ в строку JSON всегда будет медленным и приведет к получению файлов, которые в несколько раз больше оригинала. Использование для этого наборов данных увеличит требуемую оперативную память и время.

2. Что вы пытаетесь сделать? Зачем вообще преобразовывать базу данных в строки JSON? Это, мягко говоря, очень …. необычное требование. В любом случае, то, что вы задаете, является вопросом ETL, а наборы данных и адаптеры не предназначены для таких заданий. Используйте SqlCommand и ExecuteReader для чтения строк как можно быстрее.