AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Massendaten täglich in eine DB speichern - Was macht Sinn?
Thema durchsuchen
Ansicht
Themen-Optionen

Massendaten täglich in eine DB speichern - Was macht Sinn?

Ein Thema von Piro · begonnen am 25. Nov 2010 · letzter Beitrag vom 26. Nov 2010
Antwort Antwort
Seite 3 von 3     123   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#21

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 00:09
@alzaimar: könntest du mir eventuell einen beispielhafteren Code geben und kurz erklären was der macht. Der Ansatz ist echt gut.
1. Zeile: Erzeugen einer Tagestabelle auf Grundlage einer Vorlage.
2. Zeile: Wir erzeugen einen Index
3. Zeile: Wir importieren eine CSV-Datei wuppdiwupp-und-eins-fix-drei 1:1 in die Tagestabelle

Die genaue Syntax kann ich morgen posten. Hier habe ich sie nicht. Du kannst sie aber selbst ergoogeln. "MSSQL BULK INSERT"
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 01:32
Code:
BULK INSERT
in eine frische Tabelle ist das richtige Stichwort.

Nehmen wir mal an deine Tabelle mit den Daten heißt
Code:
IMPORT_DATA
Dann würde ich wie folgt vorgehen:
1. CSV-Daten per BULK INSERT in die Tabelle
Code:
IMPORT_DATA_<YYYYMMDD>
(ersetze "<YYYYMMDD>" mit dem Tagesdatum) importieren.
2. Ist alles korrekt importiert worden dann innerhalb einer Transaktion
Code:
DROP TABLE IMPORT_DATA;
EXEC sp_rename '<Schema>.IMPORT_DATA_20101126', 'IMPORT_DATA';
Sollte der Import mal nicht funktionieren, dann sind die alten Daten noch da.

Wenn die Daten auch noch für einen Zeitraum x archiviert werden sollen, dann erzeuge eine Archiv-Tabelle mit folgenden Feldern:
Code:
Zeitpunkt [PRIMARY KEY]
ZeitID [PRIMARY KEY] // der Index aus IMPORT_DATA
// jetzt die restlichen Felder aus IMPORT_DATA
Über den Zeitpunkt kannst du dann Reorganisieren.

Sollte es Performance-Probleme geben, ist es ratsam diese Archiv-Tabelle auf einer anderen Festplatte anzulegen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#23

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 06:16
Hi Piro,

nur ein kleiner Hinweis:
ich weiss nicht wie das bei MSSQL gehandhabt wird aber bei SQlite ist es so, dass gelöschte Daten nicht verschwinden, sondern nur als gelöscht markiert werden. Ein compress ist bei SQlite, zumindest von wrapper seite aus, nicht möglich (nur aus dem Kommandozeientool). Wir sind deshalb, bei SQlite, auch dazu übergegngen ganze Tabellen zu löschen,die Struktur neu zu erstellen und dann die Daten neu reinzuschreiben.Bei uns geschieht das im Monat einmal, ist also ein vergleichsweise geringer Aufwand.
Ein viel grösseres Problem als die überlaufende ID sollte die absolute Grösse deiner DB darstellen.

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
534 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 08:14
Ist ja alles ganz nett.
Aber wenn die Daten wirklich nicht mehr gebraucht werden
bitte den Tabelleninhalt mit TRUNCATE löschen.
Die Indizies bleiben erhalten, der Speicherplatz wird freigegeben
und die Aktion 100'000 Records zu löschen dauert ca 0.0023 Sekunden auf unserem Sql Server.

Also wo ist das Problem?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#25

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 08:25
Also wo ist das Problem?
An ganz anderer Stelle. Lies einfach den Thread durch.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
534 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 08:50
Lies einfach den Thread durch.
Hab ich nun noch mal gemacht.
Ich hatte das ursprüngliche Problem so interpretiert dass der Thread Ersteller
Daten in einer Tabelle hat die er nicht mehr braucht und mit neuen füllen will.
Bedenken lagen dann irgendwo bei einem Ueberlauf des Primärindexes.
Ausserdem waren dann noch Hinweise auf die Schnellste Methode.

Ich habe dann darauf hingewiesen das TRUNCATE diese beiden Probleme lösen würde.

Aber vielleicht sollte ich mich noch mehr zurückhalten und wieder arbeiten.

Sorry.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
pixfreak

Registriert seit: 6. Jul 2007
112 Beiträge
 
Delphi XE3 Professional
 
#27

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 10:57
Moin zusammen,

wenn wirklich richtig löschen, dann Truncate, wie bereits gesagt....

Aber wie der Teufel es will, brauchst Du die Daten in zehn Jahren doch noch mal.
Also ein PK auf bigint Basis, bei (signed) kann er 9.223.372.036.854.775.808 Werte annehmen, bevor er überläuft (ins negative...)
Bei 100.000 Daten täglich sind das:
92.233.720.368.548 Tage
252.695.124.297 Jahre
252.695.124 Jahrtausende
...
Selbst wenn Dein Programm länger als Du lebst am Laufen bleiben muss, wird es bei selbst x mal sovielen Daten wie jetzt die jetzige und zukunftsnahe Computerarchitekturen locker überleben.

Ich würde daher auch noch das Datum speichern (vielleicht in einer zweiten Tabelle) und man kann auf die Daten dann doch noch später zugreifen oder ab einer bestimmten Zeit löschen.

Nebenbei: Maximales erreichbares Alter unserer Sonne: 11,112 Milliarden Jahre (lt. Wikipedia) Danach, bzw. "kurz" davor ist es eh egal...


VG Pixfreak
... und noch nen C++ Builder XE2
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#28

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 11:03
[OT]
Nebenbei: Maximales erreichbares Alter unserer Sonne: 11,112 Milliarden Jahre (lt. Wikipedia) Danach, bzw. "kurz" davor ist es eh egal...
Weit davor haben wir hoffentlich andere Systeme besiedelt und die wichtigen Daten auf einem Holowürfel mitgenommen
[/OT]
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#29

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 11:31
Wenn man anstelle eines AUTO-INC Feldes ein normales (Int-)Feld verwendet, dann stellt sich das Problem doch gar nicht, da man den Schlüsselwert selbst vergibt.
Beim Import zählt man einfach beginnend mit 1 nach oben.

Vorrausgesetzt man braucht die alten Daten nicht und löscht diese z.B. mit TRUNCATE TABLE.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#30

AW: Massendaten täglich in eine DB speichern - Was macht Sinn?

  Alt 26. Nov 2010, 21:01
Vielen vielen Dank an alle. Dank der guten Diskussion habe ich vieles gelernt.

Ich werde jetzt folgendes machen.

1. vorhandene Daten mit "TRUNCATE" löschen
2. Daten neu speichern
3. ID selber vergeben

Danke noch mal an alle. Tolles Forum.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz