Sto scrivendo un servizio di hosting di risorse Http generico e sto memorizzando oggetti più grandi come BLOB in un database Oracle. Voglio essere in grado di impostare l'intestazione 'Content-Length' quando si restituisce un oggetto memorizzato, il che significa che ho bisogno di conoscere la dimensione del BLOB prima di iniziare a scriverlo sul client (so che potrei usare la codifica chunked, e sono in alcuni casi). Qualcuno ha esperienza con l'impatto sulle prestazioni che chiama dbms_lob.getlength() avrà su ogni lettura o dovrei calcolare la dimensione BLOB su INSERT e memorizzarla nella tabella? In media, mi aspetto che i tassi di scrittura siano più alti dei tassi di lettura. Sto scrivendo un punto di riferimento in questo momento per provare a vedere quale sia l'impatto, ma sembra una domanda così comune che ho pensato che qualcuno avrebbe già potuto capirlo. Inoltre, usando JDBC/Spring 3, come potrei calcolare la dimensione del BLOB in scrittura? (e non posso usare trigger o stored procedure) Grazie.Blob Oracle: dimensioni del negozio o calcolo?
risposta
Ho fatto un controllo rapido selezionando un BLOB da una tabella e poi un LENGTH (BLOB) e DBMS_LOB.GETLENGTH (BLOB). Selezionando il BLOB stesso, ho ottenuto 44 risultati coerenti. Quando ho selezionato la lunghezza (con entrambi i metodi) ho ottenuto 7 risultati coerenti.
In base a ciò, quando ottengo la lunghezza, non recupera l'intero blob e ne calcola la lunghezza. È ragionevole assumere che la lunghezza memorizzata all'inizio del BLOB (come la lunghezza di un valore VARCHAR2 è memorizzata) e che venga utilizzata direttamente.
Come tale, non ci dovrebbe essere un grande sovraccarico nel derivare la lunghezza piuttosto che memorizzarla. Riduce anche la possibilità di un'incoerenza.
C'è un INDICE LOB che è un segmento separato, quindi se il LOB non può essere memorizzato in linea, può trovare rapidamente quanti blocchi devono essere utilizzati. In breve, l'OP dovrebbe, quando recupera un singolo LOB, recuperare DBMS_LOB.GETLENGTH() allo stesso tempo invece di memorizzare un valore potenzialmente non corretto. –
Inoltre, con 11g è possibile utilizzare una colonna virtuale per fornire la lunghezza del blob. – JavaRocky
Dal momento non vedo alcuna risposta ancora ..
non ho personalmente misurato nulla, ma il nostro DBA raccomandato immagazzinare le loro dimensioni (lo so, è solo che mi ha detto così). È piuttosto bravo, quindi personalmente credo che la memorizzazione delle dimensioni sia la strada da percorrere, almeno se si tratta di prestazioni critiche (avremmo dovuto chiamare .length() A LOT).
Alcuni DBA diranno qualsiasi cosa vecchia. Un buon DBA sarà in grado di far saltare un esempio di codice per giustificare le loro asserzioni. – APC
Perché i nostri CHIAZZE comprimono bene in generale, abbiamo preso questo approccio: -
- negozio BLOB compresso. La compressione viene eseguita sul lato java mentre lo stream è
- registra la dimensione non compressa in byte in un'altra colonna nella stessa tabella
- decomprimi tramite uno stream mentre inviamo di nuovo il BLOB fuori, sapendo quale sia la dimensione del contenuto sarà
Potresti considerare questo approccio se i tuoi BLOB sono comprimibili.
- 1. Yii2 salvataggio del file su Oracle BLOB
- 2. Oracle BLOB vs VARCHAR
- 3. dbms_lob.getlength() Lunghezza vs.() per trovare dimensioni blob in Oracle
- 4. Immagine del negozio MySQL Prestazioni di cattiva pratica BLOB
- 5. ricerca testo blob oracle
- 6. Calcolo delle dimensioni del backup del DB
- 7. Calcolo dimensioni directory
- 8. configura e guarda log4net usando il negozio BLOB
- 9. Calcolo giorni lavorativi in Oracle SQL (senza funzioni o procedura)
- 10. troppo complicata JDBC Oracle movimentazione BLOB
- 11. convertire blob oracle in xml tipo
- 12. Dimensioni di un campo blob in Firebird
- 13. Perché EnumerateFiles è molto più veloce del calcolo delle dimensioni
- 14. Calcolo delle dimensioni di un buffer sprintf()
- 15. Date di calcolo in oracle sql
- 16. Differenze tra BLOB BLOB BLOB BLOB e BLOB della pagina?
- 17. LONG Blob innodb o MyISAM
- 18. URL del negozio in mysql
- 19. Come ottengo il contenuto testuale da BLOB in Oracle SQL
- 20. Come selezionare una parte di un campo BLOB in Oracle?
- 21. SQL FileStream + Entity negozio Framework file di grandi dimensioni
- 22. Monitoraggio del movimento e tracciamento del BLOB
- 23. Inserisci blob nel database di Oracle con C#
- 24. Inserire BLOB utilizzando java per DB2 e Oracle
- 25. Condizioni (come "mi piace") su campo binario (blob) in oracle
- 26. Calcolo della complessità del tempo
- 27. Oracle: LONG o CLOB?
- 28. Recupera blob di grandi dimensioni dal database sqlite di Android
- 29. Come ottenere la valuta del negozio Magento
- 30. Attuazione del calcolo combinatore
Misura, misura, misura. Le ipotesi sono solo supposizioni. – skaffman
Come sempre, ma con qualcosa come Oracle (usato da migliaia) questo sembrava un paradigma piuttosto frequente e uno che molti DBA hanno già affrontato. Se ci fossero dei "trucchi", mi piacerebbe saperlo. – Gandalf