Come si costruisce un database relazionale su un archivio di valori-chiave, l'interfaccia SQL di a-la Berkeley DB?

4

Ho controllato Berkeley DB e sono rimasto impressionato nel constatare che supporta un'interfaccia SQL che è "quasi identica" a SQLite.

link

Sono molto curioso, ad alto livello, di come questo tipo di interfaccia possa essere stata progettata. Ad esempio:

  • poiché i valori sono "trasparenti", come si fa a interrogare e ordinare in modo efficiente in base al valore
  • come vengono eseguiti i limiti e gli offset in modo efficace su set di risultati di grandi dimensioni
  • come sarebbero strutturate e serializzate le chiavi per una buona performance nella media dei casi
posta coleifer 26.05.2012 - 21:11
fonte

1 risposta

2

I DB Berkeley non sono così distanti dai database SQL. Ad esempio, i sistemi ISAM (che sono simili a Berkeley DB) sono stati utilizzati per costruire database relazionali (ad esempio, MyISAM backend di MySQL, warts et al.).

In sostanza, un DB Berkeley può memorizzare righe di tabelle. È possibile utilizzare l'indicizzazione di Berkeley DB per implementare gli indici relazionali sulle righe memorizzate: il limite e gli offset vengono implementati facilmente. La serializzazione non è una grande preoccupazione (è insignificante rispetto a IO).

La grande difficoltà consiste nell'implementare join e un pianificatore di query decente: il pianificatore di query è una parte cruciale di un database relazionale, analizza una query e decide come deve essere eseguita; quali tabelle devono essere interrogate, in quale ordine e usando quali indici - e quindi la query deve essere eseguita in modo efficiente (un approccio ingenuo probabilmente soffocherà sul primo join su due tabelle di grandi dimensioni - l'approccio ingenuo è quello di materializzare il pieno join esterno, e che può avere una quantità irrintracciabile di righe). Non sembra qualcosa di molto difficile, ma ci sono molte combinazioni e trovare la combinazione migliore è difficile - e il diverso tra la combinazione migliore e quella "decente" può essere enorme.

    
risposta data 27.06.2012 - 21:19
fonte

Leggi altre domande sui tag