2009-03-13 18 views
8

Za pośrednictwem usługi internetowej zdalne komputery wysyłają zestaw wierszy do wstawienia do naszego centralnego serwera sql.Najszybsza metoda zbiorczego wstawiania wierszy do serwera sql

Jaki jest najlepszy sposób (pod względem wydajności) do wstawienia tych wierszy? Za każdym razem można wstawić od 50 do 500 wierszy.

Wiem, że mogę zrobić zbiorczą wstawkę lub sformatować dane jako XML, które wstawiają to w ten sposób, ale nigdy wcześniej tego nie robiłem w ustawieniach przedsiębiorstwa.

Aktualizacje przy użyciu usług internetowych wcf (lub może jeszcze nie jestem pewien) i SQL Server 2008 standard.

+1

Stwierdzenie wersję serwera SQL naprawdę robi różnicę. – AnthonyWJones

Odpowiedz

3

Jaki to rodzaj usługi internetowej?

Jeśli jest .NET, zwykle najlepszym sposobem jest załadowanie wejście do DataTable, a następnie strzelać do serwera SQL przy użyciu klasy

5

SqlBulkCopy Chyba że działa na 10-letniego komputera , 50-500 rzędów to niewiele; możesz dosłownie wysłać instrukcje SQL i przekierować je bezpośrednio do bazy danych i uzyskać doskonałą wydajność. Zakładając, że ufasz usługom wysyłającym dane, oczywiście :-)

Jeśli wydajność naprawdę jest problemem, wysłanie pliku bcp jest absolutnie najszybszym sposobem zakleszczenia danych w bazie danych. Z twojego pytania wynika, że ​​już wiesz, jak to zrobić.

+0

Mam 10-letni komputer z uruchomionym programem SQL Server 2000, nie byłby on masowy przy wstawieniu 500 wierszy. ;) – AnthonyWJones

+0

Czy ma więcej niż 32 MB pamięci głównej? –

2

50-500 wierszy nie powinno stanowić problemu! Nie ma potrzeby strojenia wydajności! Wykonuj normalne (przygotowane) instrukcje SQL w swojej aplikacji.

Nie zabijaj go ze złożonością i zbytnie.

Kiedy powinieneś włożyć więcej niż 250.000 wierszy, powinieneś pomyśleć o skalowaniu!

Nie zmieniaj ograniczeń, możesz zabić DB.

4

Tylko 50-500 rekordów nie stanowi "wkładki zbiorczej". Mechanizm wkładek masowych został zaprojektowany z myślą o naprawdę masowym importowaniu danych, które należy niezwłocznie monitorować za pomocą kopii zapasowej.

W usłudze sieciowej po prostu przekazałbym XML do serwera SQL. Szczegóły będą zależne od wersji.

+0

Serwer sql 2008. Ale co, jeśli mam tysiące klientów przesyłających dane. – bigint

+0

Tysiące klientów? Jak można takie posty dziennie?Być może innym sposobem spojrzenia na to, ile rekordów nad aktywnymi okresami aplikacji w danym dniu można się spodziewać w sumie? – AnthonyWJones

2

Aby powtórzyć wszystkie pozostałe odpowiedzi, 500 wierszy nie stanowi problemu dla serwera SQL. Jeśli musisz wstawić dużą liczbę rekordów, najszybszym sposobem jest z wbudowanym przechowywanych proc nazwie BulkInsert,

BulkInsert

który (wierzę) to punkt wejścia do narzędzia SQL Server przeznaczony specjalnie na ten sposób nazywa bcp.exe

bcp

Powiązane problemy