Лучшие практики с большим набором данных в C # - PullRequest
6 голосов
/ 22 февраля 2012

В настоящее время я работаю над разработкой и реализацией программного обеспечения, которое должно реализовывать операции CRUD над двумя таблицами с архитектурой master-detail.Заголовок содержит около полумиллиона строк, а детализация - около миллиона строк.

Заполнить все эти данные в наборе данных просто безумие, данные также могут измениться, и мне не интересно иметь локальную копию базы данных.Я заинтересован в том, чтобы программное обеспечение работало свободно.Хотя набор данных может быть не лучшим решением, я должен использовать его для согласования с другими частями программного обеспечения.

Сначала я думаю использовать TypedDataset и некоторые методы, такие как GetNext (), GetFirst (), GetByCod (), ноЯ не уверен, что это лучшее решение ... Я делаю небольшой тест и не очень бегло работаю.

Мне интересно знать, как другие разработчики делают это, Лучшие практики ичто такое «лучший выбор» для операций с большими данными.

Я использую Visual Studio 2008 и Sql Server 2005.

ДОБАВЛЕНО: Когда вы говорите оиспользуя SqlDataReader вы имеете в виду что-то вроде этого?

using (SqlConnection con = new SqlConnection(CON)) {

            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE");
            cmd.Connection = con;
            SqlDataReader rd = cmd.ExecuteReader();
            BindingSource bindingSource = new BindingSource();
            bindingSource.DataSource = rd;
            bindingNavigator1.BindingSource = bindingSource;

            txtFCOD.DataBindings.Add("Text", bindingSource, "FIELD");
        }

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

Я думаю, что нет способа управлять таким большим набором данных.

Вам нужен DataReader, а не DataSet.

Локальная копия базы данных с действительно большим объемом данных является эффективным способом достижения чего-то подобного (быстрый ответ из вашего приложения), но у вас будут проблемы с синхронизацией (репликация), параллелизмом и т. Д.

Рекомендуется получать с сервера только те данные, которые действительно нужны пользователю. Вы должны использовать обработку на сервере , с помощью хранимых процедур и т. Д.

Я до сих пор не знаю, какими данными вы хотите манипулировать и какова цель вашего приложения, но есть еще один недостаток больших объемов данных на стороне клиента - вашему приложению потребуется много оперативной памяти и быстрого процессора. Возможно, ваш компьютер быстр и способен справиться с этим, но подумайте, что произойдет, когда кто-нибудь установит ваше приложение на планшет с процессором Atom 1 ГГц. Это будет катастрофа.

3 голосов
/ 22 февраля 2012

В редких случаях должен быть сценарий, в котором вам нужно получить все данные одновременно.

Можно рассмотреть следующее:

  • Использовать представления для обслуживания определенных небольших наборов данных..
  • Рассмотрите возможность использования подкачки с использованием функции OVER (), представленной в SQL Server 2005
  • Не используйте наборы данных для больших объемов данных.Считыватели данных в этом случае гораздо более эффективны.

Лично я считаю, что вам следует избегать загрузки больших объемов данных в память, если вы не полностью контролируете объем загружаемых данных и время их утилизации.Помните, что при обработке данных на стороне сервера вы используете ресурсы, которые могут понадобиться другому процессу.

Вы всегда должны стараться работать с небольшими порциями за раз, и желательно как можно более короткое время.Это предотвращает задержку ресурсов вашим процессом в течение длительных периодов времени.

...