AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Killen viele BLOB-Felder die DB-Performance?
Thema durchsuchen
Ansicht
Themen-Optionen

Killen viele BLOB-Felder die DB-Performance?

Ein Thema von Gecko · begonnen am 20. Mai 2007 · letzter Beitrag vom 23. Mai 2007
Antwort Antwort
Gecko
(Gast)

n/a Beiträge
 
#1

Killen viele BLOB-Felder die DB-Performance?

  Alt 20. Mai 2007, 20:37
Datenbank: Firebird • Version: 2.0 • Zugriff über: Zeos
Killen viele BLOB-Felder die DB-Performance? Das ist die Frage!
Worum gehts genau? Es soll ein Mail-Client entwickelt werden, der die Datensätze in einer Firebird DB speichert.

Die Frage ist nun:
Die Anhänge auf der Platte ablegen und in der DB nur den Dateinamen indexieren, oder alle per BLOB in die DB packen?
Habe gehört das zuviele BLOBS nicht so bekömmlich sein sollen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 20. Mai 2007, 20:42
Es kommt auf die Datenmenge an, passen diese nicht mehr in die selbe Page, werden diese in einem anderen Bereich der DB gespeichert und in der Tabelle nur noch die Blob-ID. In diesem Fall ist kein negativer Effekt zu erwarten.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 20. Mai 2007, 20:44
Zitat von Gecko:
Killen viele BLOB-Felder die DB-Performance? Das ist die Frage!
Kommt darauf an wie du auf die Blob-Felder zugreift. I.d.R. legt eine Datenbank Blobfelder in speziellen Bereichen/Dateien ab und nur verweise auf diese Blobs in der "Haupttabelle" so das diese den normalen Suchvorgang nicht bremsen. Auch sollten diese Blobs bei normalen Selects nicht sofort über die Leitung übertragen werden. Um ganz sicher zu sein solltest du entsprechende Selects aufbauen wo kein Blob-Felder vorhanden sind.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#4

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 22. Mai 2007, 13:20
Das sagt php.net:

MySQL kann BLOBs (binary large objects) nicht fragmentarisch bearbeiten, d.h. es ist nicht möglich, ein BLOB in kleinen Teilstücken aus der Datenbank zu holen oder den hinteren Teil eines BLOBs zu holen, ohne die Bytes davor zu lesen. Obendrein ist der Sendepuffer von MySQL für BLOBs begrenzt groß, sodass nicht beliebig große BLOBs in der Datenbank abgelegt werden können.

Viele Datenbanken werden sehr ineffizient, wenn vergleichsweise große BLOBs zusammen mit anderen, sehr kleinen Objekten in derselben Tabelle gespeichert werden oder wenn eine Tabellenzeile mehr als ein BLOB enthält.

Die Meinungen gehen also auseinander....
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 22. Mai 2007, 13:23
Zitat von Gecko:
Die Meinungen gehen also auseinander....
Du redest aber von FireBird und php.net sagt etwas über MySQL aus. Wahrscheinlich wird es bei FireBird so sein, wie es die Vorredner sagen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 22. Mai 2007, 14:33
Zitat:
Wahrscheinlich wird es bei FireBird so sein, wie es die Vorredner sagen.
Ja den MySQL <> FireBird
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 22. Mai 2007, 15:05
Zitat von mkinzler:
Zitat:
Wahrscheinlich wird es bei FireBird so sein, wie es die Vorredner sagen.
Ja den MySQL <> FireBird
Das ist logisch, mkinzler, aber ich kenne FireBird nicht, deswegen kann ich dazu nichts sagen und verwies auf die Vorredner
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 22. Mai 2007, 15:12
Ich wollte ja nur deine Aussage unterstreichen
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

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

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 22. Mai 2007, 17:36
Zitat von Gecko:
Killen viele BLOB-Felder die DB-Performance?
Das würde ich mit einem eindeutigen Ja beantworten.
Ich habe folgenden Test mit dem MS SQL Server 2000 durchgeführt:
Alle Daten einer Tabelle (~30 Felder) mit 50000 Records werden mit "Select * FROM Tabelle" abgerufen.
Dann habe ich zwei Blob-Felder eingefügt.
Fast alle Blob-Felder waren leer, ungefähr bei 10 Datensätzen waren kurze Inhalte eingetragen.
Zwischen den Testläufen wurde jeweils der gesamte Cache gelöscht.
Ergebnis: ca. 15% weniger Leistung.

Meine Erklärung:
ein Blob-Feld löst allein schon durch sein Vorhandensein zusätzliche Aktionen in der DB aus.
Vorallem werden Blob-Daten physikalisch auf anderen Seiten als die Tabelle gespeichert.
Daher ergeben sich zusätzliche Festplattenzugriffe.

Workaround:
Man speichert die Blobdaten nicht direkt in der Tabelle, sondern in einer eigenen Tabelle.
Dies erfordert einen zusätzlichen Primärschlüssel für die Blobtabelle und einen Fremdschlüssel (pro Blobfeld) für die Orginaltabelle. (Datentyp int32 verwenden!)
Falls man die Blob-Daten wirklich braucht, kann man gezielt nur Blobdaten für den aktuellen Datensatz abrufen.
Andreas
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Killen viele BLOB-Felder die DB-Performance?

  Alt 23. Mai 2007, 20:17
Zitat von shmia:
Meine Erklärung:
ein Blob-Feld löst allein schon durch sein Vorhandensein zusätzliche Aktionen in der DB aus.
Vorallem werden Blob-Daten physikalisch auf anderen Seiten als die Tabelle gespeichert.
Daher ergeben sich zusätzliche Festplattenzugriffe.
Betrifft den OP aber nicht, da er sich glücklicherweise nicht mit MSSQL rumärgern muss.
Wie bereits schon von anderen beschrieben, geht Firebird den Weg des gesunden Menschenverstandes und verwendet Lob locators.
Sind sogar cooler als bei Oracle implementiert (wie mkinzler auch schon schrieb ).
Zitat:
Workaround:
Man speichert die Blobdaten nicht direkt in der Tabelle, sondern in einer eigenen Tabelle.
Dies erfordert einen zusätzlichen Primärschlüssel für die Blobtabelle und einen Fremdschlüssel (pro Blobfeld) für die Orginaltabelle. (Datentyp int32 verwenden!)
Falls man die Blob-Daten wirklich braucht, kann man gezielt nur Blobdaten für den aktuellen Datensatz abrufen.
lol, und da sieht man wieder was passiert, wenn ein DBMS ein server-basiertes Access sein will. *g*
Lob locators sind nix weiter als Pointer auf den wirklichen Lob, der an einer anderen Stelle in der Datenbank liegt.
Das heißt man kann in Firebird (oder fast jedem anderen DBMS) auch in Tabellen mit Lobs wunderbar schnell suchen und sogar Daten ändern. Die Lobs kommen erst ins Spiel wenn man sie tatsächlich anfasst.
Also praktisch das was du da selbst basteln musstest.
FB geht sogar noch weiter und wird kleine Lob-werte direkt in den Record packen, wenn dieser dann immer noch in die angefangene Page passt.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:18 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