#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 для чтения строк как можно быстрее.