2012-02-22 10 views
6

Obecnie pracuję nad zaprojektowaniem i wdrożeniem oprogramowania, które musi implementować operacje CRUD na dwóch tabelach z arytmetyczną szczegółowością. Nagłówek zawiera około pół miliona wierszy i zawiera około miliona wierszy.Najlepsze praktyki z dużym zestawem danych w języku C#

Wypełnij wszystkie te dane w zbiorze danych jest szalony, również dane mogą ulec zmianie i nie jestem zainteresowany, aby mieć lokalną kopię bazy danych. Jestem zainteresowany tym oprogramowaniem, które działa płynnie. Chociaż zestaw danych może nie być najlepszym rozwiązaniem, powinienem użyć tego, aby zachować spójność z innymi częściami oprogramowania.

Najpierw myślę, aby użyć TypedDataset i niektórych metod takich jak GetNext(), GetFirst(), GetByCod(), ale nie jestem pewien, czy jest to najlepsze rozwiązanie ... Robię mały test i nie działają bardzo płynnie.

Chciałbym wiedzieć, jak robią to inni programiści, najlepsze praktyki i "najlepszy wybór" do wykonywania operacji na dużych danych.

Używam programu Visual Studio 2008 i SQL Server 2005.

DODANO: Kiedy mówimy o korzystania SqlDataReader masz na myśli coś takiego?

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"); 
     } 
+1

Przede wszystkim nie używałabym zestawów danych. A któż byś zapytał wszystkie wiersze naraz? Kiedy musisz przetworzyć dużą ilość adta, użyłbym datareadera, kiedy musisz zaoferować łatwy interfejs, który poleciłbym używając OR Mappera –

+0

Tak, zgadzam się z Boas Enkler. Zapytanie o wymagane dane tylko w wymaganym czasie. –

+0

Zwróć uwagę w swoich zapytaniach, aby używać indeksów w tabeli i żądaj tylko określonych informacji w zapytaniach. Niech baza danych wykona swoją pracę :-) – Schwarzie2478

Odpowiedz

4

Myślę, że nie ma sposobu na zarządzanie tak dużym zbiorem danych.

Potrzebujesz programu DataReader, a nie DataSet.

lokalną kopię bazy danych z bardzo dużą ilością danych jest skutecznym sposobem, aby osiągnąć coś takiego (szybkie odpowiedzi od aplikacji), ale będziesz miał problemy z synchronizacją (replikacja), współbieżności etc ..

Najlepszy Praktyka pobiera z serwera tylko te dane, których użytkownik naprawdę potrzebuje. Musisz używać przetwarzania po stronie serwera, według procedur przechowywanych itp.

Nadal nie wiem, jakie dane mają być przetwarzane i jaki jest cel aplikacji, ale istnieje również inna wada dużych ilości danych po stronie klienta - Twoja aplikacja będzie wymagać dużej ilości pamięci RAM i szybkiego procesora. Być może twój komputer jest szybki i może sobie z tym poradzić, ale zastanów się, co się stanie, gdy ktoś zainstaluje twoją aplikację na tablecie z procesorem Atomowym 1 GHz. To będzie katastrofa.

+0

@arturn Co chcesz zrobić z tym dużym zestawem danych? –

+0

Robię formularz Master-detail. – arturn

+0

Formularz z milionami wierszy? To jest szalone. – Kamil

3

Rzadko powinien istnieć scenariusz, w którym należy pobrać wszystkie dane naraz.

można rozważyć następujące:

  • Wpisz widoków obsługujących konkretne mniejsze zestawy danych.
  • Rozważ użycie stronicowania przy użyciu funkcji OVER() wprowadzonej w SQL Server 2005
  • Nie używaj zestawów danych dla dużych ilości danych. DataReaders są znacznie bardziej wydajne w tym przypadku.

Osobiście uważam, że należy unikać ładowania dużej ilości danych do pamięci, chyba że masz pełną kontrolę nad ilością załadowywanych danych i ich usuwaniem. Pamiętaj, że jeśli zarządzasz serwerem po stronie danych, używasz zasobów, których może potrzebować inny proces.

Powinieneś zawsze próbować pracować z mniejszymi porcjami na raz, najlepiej jak najkrócej. Zapobiega to procesowi hoggingu zasobów przez długi czas.

+0

Cześć, dziękuję za odpowiedź! – arturn