![]() |
AW: Firebird Datenbankgröße
Hallo Thomas...
ich bin ein wenig von der Größe überfahren worden. Im Leben hätte ich (Bauchgefühl) nicht mit der Größe gerechnet. Zum Thema Statistik:
Delphi-Quellcode:
... bedeutet ja, daß reichlich Platz verschwendet wird. Die Inserts laufen als Block wie hier empfohlen
T_RECORD_DATA (153)
Primary pointer page: 150, Index root page: 172 Data pages: 82929, data page slots: 82929, average fill: 63% Fill distribution: 0 - 19% = 0 20 - 39% = 1 40 - 59% = 0 60 - 79% = 82928 80 - 99% = 0 Index FK_T_RECORD_DATA_1 (0) Depth: 3, leaf buckets: 8073, nodes: 21680580 Average data length: 0.00, total dup: 21679353, max dup: 19155 Fill distribution: 0 - 19% = 1 20 - 39% = 0 40 - 59% = 2451 60 - 79% = 0 80 - 99% = 5621 Index T_RECORD_DATA_IDX1 (2) Depth: 3, leaf buckets: 7010, nodes: 21680580 Average data length: 0.06, total dup: 20624315, max dup: 87 Fill distribution: 0 - 19% = 0 20 - 39% = 0 40 - 59% = 1 60 - 79% = 0 80 - 99% = 7009 ![]()
Delphi-Quellcode:
Alle Blöcke laufen in einer Transaktion. Wo läßt sich da noch was rausholen.
execute block as begin //25Kb je Block
insert into T_RECORD_DATA... // 200x je Block. Änderung der Menge machte keinen Unterschied. end Zitat:
|
AW: Firebird Datenbankgröße
Vielleicht kannst Du Deine Speicherung auch der auf dem Gerät angleichen. Wenn ich mir die Struktur aus dem OP ansehe, habe ich da so Vermutungen:
Nachteil wäre die Rechnerei die Du beim Auswerten hättest. Immer das Selbe: Platzersparnis <> Performance. |
AW: Firebird Datenbankgröße
Ist das mit dem Platz im Jahr 2014 wirklich ein Problem?
|
AW: Firebird Datenbankgröße
Zitat:
Übersehen nicht, nur nicht explizit drauf eingegangen. Aufgrund der Beschreibung bin ich davon ausgegangen, dass die Daten einmal importiert werden um dann für Auswertungen vorgehalten werden bzw. bei Aktualisierungen die Daten als "Masseninserts" rein kommen und nicht individuell von den Anwendern geändert werden können / sollen. Und hier würde ich (wenn die DB-Größe wirklich ein Thema sein sollte) ggf. die beschrieben Dinge anwenden. Unter 2.5 soll es ja auch möglich sein über StoredProcedures auf anderen DBs zugreifen zu können. Somit könnten diese Gerätedaten in eigene, ggf. auch als Read-OnlyDBs ausgelagert werden und die Pages voll gemacht werden. Aber hier müsste der Threadstarter vielleicht noch Licht ins Dunkel bringen... |
AW: Firebird Datenbankgröße
Zitat:
Leider ist das Denken "wieso Performance? Ich hab unendlich viel Speicher und Dutzende von Prozessorkernen." genau so weit verbreitet wie die Verwechselung einer IDE mit einem Point-And-Click-Adventure. |
AW: Firebird Datenbankgröße
Danke an Alle...:thumb:
@Union: interessante Ansätze. Zitat:
Zitat:
Im Beispiel: letzter DS = 1398999942 erster = 1381299573 Zitat:
Zitat:
PS: Es geht um Temperaturaufzeichnungen in der Lebensmittelbranche und Pharmaciebranche. Die genauen Speicherzeiträumen per Gesetzt sind mir unbekannt. Da aber das Finanzamt 10 Jahre Aufbewahrung hat ging ich mal ebenso davon aus. Rein theoretisch hat das Gerät einen Speicherzyklus von 1-3 Jahren je nach Auflösung. Dann werden die ersten Daten wieder überschrieben. Per Gesetz sind die so zugelassen und man könnte die DB Speicherung auch darauf begrenzen. Ich will aber einen Mehrwert für den Kunden. Quasi das was die Hardware nicht leistet. Zitat:
|
AW: Firebird Datenbankgröße
Zitat:
Das man Fehler speziell am Anfang vermeiden soll, ist mir auch klar, nur baut man manchmal eben auch am Anfang Fehler ein. Und wenn man schon überlegt, mit sparse-array Techniken hier Platz zu sparen, dachte ich mir, ich hebe mal einen Zeigefinger. Wir leben im Jahr 2014, wo Festplattenspeicherplatz in Tera- und Petabytes gemessen wird. Wir sollten uns nicht darüber über Gebühr Gedanken machen, eine Datenbank von 1.6GB auf vielleicht 800GB zu komprimieren. Da spart man an Festplatten eigentlich kaum was (ok, sagen wir: alle 500 Jahre eine TB-Platte, oder bei 500 Geräten 1x pro Jahr 1 TB). Wenn es ein Bug oder eine Fehleinstellung ist: Ja, natürlich muss man das in Ordnung bringen. Wenn ich signifikant Geld spare, auch ok. Aber das muss man immer wieder neu überlegen. Ich persönlich würde mich hüten, hier zu viel Energie hineinzustecken. |
AW: Firebird Datenbankgröße
Zitat:
Zitat:
Zitat:
aber wieso dann 10 Stellen? wäre es da nicht vllt. besser ein Char (0,1,A..z..) und ein float-Feld zu nutzen? (ich kenn die FB-Typen nicht sooo genau) Noch ein Nachsatz zum Platzsparen. es ist Blödsinn Informationen so zu verstümmeln, daß sie u.U. wertlos werden - die Erhöhung eines Basidatums gehört für mich dazu. Aber die Einstellung Festplattenkapazität mißt sich in TByte da kann ich auch mal ein paar GByte über die Leitung schicken baut beim Anwender gewaltig Frust auf wenn er, weil sein Netzanschluß unterdimensioniert ist, wieder einmal 2 Minuten auf eine Antwort/Sendung warten darf. (nichts für ungut, aber heute war unser Firmennetz wieder vollkommen zu ...) Gruß K-H Gruß K-H |
AW: Firebird Datenbankgröße
Zitat:
Wenn also die Messdaten wirklich nur abgelegt werden sollen, ist eine Einzelspeicherung u.U. auch ein Overkill. Du könntest die Daten einfach in ein 'Array Of TRecord' ablegen und z.B. jeweils Arrays a 1000 Werte mit Zeitstempel ablegen. Ist zwar ziemlich bescheuert, aber mit SQL willst Du an die Einzeldaten dann ja eh nicht. Man kann auch zippen, um Redundanzen herauszuziehen und so z.B. eine ganze Stunde Messdaten eines temperierten Raumes (da ändert sich dann nicht viel) ziemlich platzsparend unterbringen. Die Daten sind in einem BLOB und der ist in einer separaten Datei und bis auf den Header in der Tabelle ist alles andere dynamisch. |
AW: Firebird Datenbankgröße
Liste der Anhänge anzeigen (Anzahl: 1)
Gut, ich drösel das mal auf: :P
1 Gerät, 1-100 Devices(Busadressen) im 485er Bus. Jedes Device hat unterschiedliche Parameter (F_PARAMETER_ID) (Anzahl und Typ) welche von mir vor dem Datenabholen eine eindeutige ID bekommen. Diese wird dann in den RecordDaten den Bezug zum Gerät/Adresse herstellen. Im Schnitt hat jedes Device(Busadresse) 13 Parameter, mal mehr mal weniger. Jeder Parameter kann entweder einen String (*, +), einen Index (0-4), einen Boolean (0,1) oder einen Float Wert (-999.99 - 999.99) haben. Deshalb die Speicherung als Char was alles abdeckt. Beispiel: Bild 1 Zitat:
Zitat:
Zitat:
damit ergeben sich pro Minute 100 Adressen * 13 Parameter * 4 = 5200 Datensätze/ Meßwerte Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz