Oracle ha recentemente rilasciato a Berkeley DB back-end to SQLite. Mi capita di avere un database SQLite da centinaia di megabyte che potrebbe trarre beneficio da "prestazioni, concorrenza, scalabilità e affidabilità migliorate", ma il sito di Oracle sembra privo di tutte le misurazioni dei miglioramenti. Qualcuno ha fatto qualche benchmarking?Quanto è veloce Berkeley DB SQL rispetto a SQLite?
risposta
Ho partecipato alla valutazione beta del codice SQLite BDB e una delle cose che ho cercato di gestire è stata la differenza di prestazioni. A questo punto, Non riesco a pubblicare esattamente quello che ho trovato fino a quando non ho almeno un'altra persona valutare il mio codice, eseguire i test e confermare i numeri che ho ricevuto (che è stato effettuato ). Tuttavia, posso generalizzare qui e dire che ci sono casi in cui BDB offre miglioramenti significativi delle prestazioni su SQLite, in particolare nell'area di gestione di carichi pesanti che coinvolgono la concorrenza di scrittura.
ci sono, in genere, due misure di diritto "fast" - (1) efficienza: quanto tempo ci vuole per un singolo processo per fare XYZ vs. (2) concorrenza: quante volte can molti processi fai XYZ per unità di tempo. Il problema principale degli indirizzi BDB è la concorrenza - elaborazione di transazioni su larga scala. Pertanto, si pensa a molte connessioni simultanee che scrivono e/o modificano il contenuto del database.
SQLite by design utilizza il blocco a livello di database in modo che vi sia un massimo di uno scrittore che può funzionare nel database alla volta. Pertanto, la transazione della transazione di SQLite rimane più o meno costante con il numero di connessioni simultanee, quindi la scalabilità nelle applicazioni ad alta intensità di scrittura è misurata in realtà dall'efficienza (1).
BDB invece utilizza il blocco a livello di pagina, che consente a più autori a lavorare nel database in un determinato momento (purché stanno lavorando pagine separate). Quindi il tasso di BDB aumenta potenzialmente con il numero di connessioni e quindi la sua scalabilità è sia una questione di efficienza (1) che di concorrenza (2), che può sommarsi.
Principalmente ciò che si riduce è la concorrenza (scrittura). BDB può inviare più TPS rispetto a SQLite per più writer. Per transazione, intendo qualcosa che modifica il database (come sono di qualsiasi aiuto reale per le operazioni di sola lettura?). Detto questo, per la concorrenza in lettura (app che fanno principalmente SELECT), SQLite potrebbe benissimo andare testa a testa con BDB perché il blocco non è più un problema critico.
Per quanto riguarda la dimensione del set di dati, non sono sicuro. Non ho esaminato lo . In definitiva, entrambi usano B-tree per l'archiviazione. Potrebbero esserci dei fattori in da considerare nelle rispettive implementazioni, ma non l'ho studiato. I sa che SQLite può gestire con garbo set di dati in centinaia di MB e GB a doppia cifra (e forse più ora che l'implementazione della mappa di pagina sporca è stata modificata).
Pertanto, se si dispone di un'applicazione che utilizza molte connessioni che modificano un determinato database e il conflitto di pagine è relativamente basso, BDB può offrire miglioramenti significativi delle prestazioni di . Ma la contesa di pagina è una variabile importante . Nel limite, se disponevi di un database BDB i cui dati consistevano in una singola pagina , le sue prestazioni corrispondevano a quelle di SQLite in tutti i casi perché il blocco a livello di pagina qui degenera effettivamente nell'equivalente del blocco di livello di database - tutti sta combattendo per una cosa. Tuttavia, poiché il numero di pagine aumenta in BDB (e il conflitto di pagine diminuisce), il TPS massimo inizierà a crescere con il numero di connessioni simultanee. Quindi da quel punto, la memoria diventa il prossimo fattore limitante. Ma questa è un'altra storia di .
BTW, sono in procinto di scrivere un articolo sull'utilizzo di BDB per quelli in arrivo da SQLite .
link articolo:
Oracle Berkeley DB SQL API vs. SQLite API – A Technical Evaluation
Oracle Berkeley DB SQL API vs. SQLite API – Integration, Benefits and Differences
Questa è una domanda carica. I risultati sarebbero variare notevolmente a seconda delle velocità di accesso al disco, dimensione della cache in memoria, il numero di inserti contro leggono, divisioni di pagina, la concorrenza, ecc, ecc, ecc
Nel complesso, BerkeleyDB può essere estremamente veloce - Di recente ho progettato una piattaforma di analisi dei dati per un datore di lavoro che fosse in grado di eseguire 40k inserti al secondo su un sistema x86 a 8 core (mentre allo stesso tempo eseguiva migliaia di letture al secondo) con un set di dati nell'intervallo 30G. Questo era con la piena protezione transazionale.
Questo era il caso migliore, tuttavia - c'erano tempi in cui gli inserti potevano scendere fino a 2k al secondo, a seconda dei dati in arrivo e di quello che era attualmente memorizzato in Berkeley. Le prestazioni si riducono in modo significativo se si dispone di I/O su disco lento e di una percentuale di hit della cache insufficiente o si espande costantemente il DB causando la divisione delle pagine. C'è anche un'enorme quantità di tuning che puoi fare per aumentare le prestazioni per il tuo set di dati particolare.
Nel complesso è un sistema eccellente, ma la documentazione e la conoscenza sono piuttosto ridotte. Raccomando The BerkeleyDB Book come probabilmente il miglior riferimento attualmente disponibile.
Oltre alla Berkeley DB Libro che Brian cita, si può anche trovare le seguenti risorse utili:
- I I forum online di Berkeley DB possono fornire molti suggerimenti sia da parte degli utenti sia gli sviluppatori del prodotto. Vedi Berkeley DB forum,
- Il set di documentazione Berkeley DB, che può essere trovato here. In particolare, ci sono diverse sezioni nella Guida di riferimento che riguardano la messa a punto, le prestazioni e il rendimento.
- 1. Quanto è veloce Data.Sequence.Seq rispetto a []?
- 2. Quanto veloce è SQLite via Python
- 3. Scegliere tra Berkeley DB Core e Berkeley DB JE
- 4. GUI per Berkeley DB
- 5. Quanto è veloce Data.Array?
- 6. Berkeley DB in applicazioni con multithreading
- 7. Il miglior modulo Python per Berkeley DB?
- 8. Cabinet Kyoto/Berkeley DB: Limiti di dimensione tabella hash
- 9. SQLite è davvero più veloce di MySQL?
- 10. Quanto è facile Lua con Qt, rispetto a QtScript?
- 11. Quanto più veloce è NUnit paragonato a MSTest
- 12. Quanto è veloce Google App Engine?
- 13. Quanto è universale l'istruzione LIMIT in SQL?
- 14. Errore Berkeley DB: impossibile bloccare il file je.lck
- 15. Android MediaStore sqlite db posizione
- 16. Database non sql più veloce e stabile?
- 17. Quanto più veloce è la memoria di solito rispetto al disco?
- 18. Come determinare il motivo esatto, perché berkeley db restituisce EINVAL su db-> open?
- 19. Quanto è costoso un cast GUID e confronto rispetto a un confronto di stringhe
- 20. Prestazioni MDX rispetto a T-SQL
- 21. Connessione a SQL CE db utilizzando SQLConnection
- 22. Esporta sqlite db nell'app phoneseg
- 23. Informazioni protette contenute su iPhone SQLite DB
- 24. Un modo più veloce unisce due database SQLITE
- 25. SQL Server Compact Edition è una valida alternativa a SQLite?
- 26. Quanto è veloce std :: swap per i tipi interi?
- 27. Quanto più veloce è un database in esecuzione nella RAM?
- 28. Il modo più veloce per migrare da sql server a sqlite per dataset di grandi dimensioni
- 29. INSERT SQL veloce senza AGGIORNAMENTI
- 30. Best practice per SQLite DB e ContentProvider
Come viene questo articolo? –
Tornato un po 'indietro. È fuori dalle mie mani ora. Non so quando, dove sarà pubblicato. Potrei sentire qualcosa la prossima settimana. –
Ecco i due white paper dall'articolo: http://www.oracle.com/technetwork/database/berkeleydb/learnmore/bdbvssqlite-wp-186779.pdf http://www.oracle.com/technetwork/database/berkeleydb /learnmore/bdbvssqlite-wp-186779.pdf –