You are on page 1of 24

Indexacinde

archivos

Tema5:Indexacindearchivos
1.Bsquedayordenacineficientesobreunarchivo
2.ndicessimplessobreunarchivo
3.Operacionesdemantenimientodeunarchivoindexado
1.Creacin,cargayescritura
2.Agregacinderegistros
3.Actualizacin
4.Eliminacin
4.ndicessecundarios
5.Listasinvertidas
6.VentajaseInconvenientes

1
Indexacinde
archivos

Bsquedayordenacineficientesobreun
archivo
Elmanejodirectodearchivosparaalmacenar
informacinplanteavariosproblemasalahorade
buscarinformacin
Sielarchivonoestordenadoelnicomtododebsquedaposiblees
secuencial,locualnoresultanieficienteniimpracticableenmuchoscasos.
Sielarchivoestordenadopuedeaplicarseunabsquedabinaria,peroen
cualquiercasopuederesultarcostosa,ysielficherorecibemuchasaltasybajas
noresultafactiblemantenerloordenado
Ordenarficherosnoresultaeficiente,ademsdeno
serfactibleenmuchoscasos
SenecesitarandelordendeO(nlogn)accesosadisco.
Pasarlosdatosdediscoamemoriaparaserordenadosesimpracticable
sielarchivoesexcesivamentegrande

2
Indexacinde
archivos

Paratrabajareficientementeconarchivossehace
necesarioelmanejodendices
Unndiceesunaestructuradedatos(enmemoria)
quepermiteelaccesoalainformacinalmacenada
enunarchivoimponiendoalgntipodeorden
Elndicemantieneenmemoria:(1)undatoque
identificaciertainformacin(2)ladireccinfsica(o
lgico)delregistroenelficheroqueguardala
informacincompleta
Normalmenteelndiceguardaladupla(<clave>,<direccin_fsica_fichero>),es
decir,laclaveyladireccinfsicadelfichero(olgica)quepermiteconunnico
accesoleerlainformacincompletaenelfichero

3
Indexacinde
archivos

Laestructuradedatoselegidaparaelndiceen
memoriaesnormalmenteunvectorordenado,peroes
mseficienteutilizaralgntipoderbolbinariode
bsqueda(p.e.unmapadeSTL)
Elnmerodeaccesosaficheroeselmnimoposible
Sloseaccedeunavezconocidalaposicinexactadeldato(parabsquedas,
actualizacionesyborrados)
Lasinsercionesdenuevosdatostambinserealizarnenposicionesconcretasdel
fichero(alfinaloaprovechandohuecosvacos)
Unmismoarchivopuedetenerasociadosdistintos
ndices,dependiendodelcampoasociadoalndicese
denominandiceprimarioondicesecundario

4
Indexacinde
archivos

ndicessimplessobreunarchivo
Unndicesimpleoprimarioesaquelqueguarda
nicamentelallaveprimaria,identificandodeforma
nicaaunregistroalmacenadoenunfichero
Seaelsiguienteficheroconinformacindecanciones:

Clave TtuloIntrpreteAoDuracin
AbbChi01 ChiquititaAbba19793:34
BeaMyb01 MyBonnieBeatles19643:45
BeaCal01 CaliforniaGirlsBeachBoys19651:27
PriIwa01 IWannaBeYourLoverPrince19791:40
EagThe01 TheLongRunEagles19791:15
AbbFer01 FernandoAbba19763:35
BeaTha01 ThankYouGirlBeatles19642:07
BobLik01 LikeARollingStoneBobDylan19651:28
BeaShe01 SheLovesYouBeatles19643:36
RoxLov01 LoveIsTheDrugRoxyMusic19763:03
FleSar01 SaraFleetwoodMac19792:13
EagHot01 HotelCaliforniaEagles19773:28
QueWea01 WeAreTheChampionsQueen19772:16
BeaShe02 She'sAWomanBeatles19643:50
5
Indexacinde
archivos

Elndiceguardaelcampoclaveyladireccinfsicadefichero.Elficheroguarda
losregistrossinordenestablecido

ClaveDireccionfich. ClaveRestodecampos

AbbChi01 0 0 AbbChi01| Chiquitita|Abba|1979|3:34


AbbFer01 170 34 BeaMyb01| MyBonnie|Beatles|1964|3:45
BeaCal01 68 68 BeaCal01| CaliforniaGirls|BeachBoys|1965|1:27
BeaMyb01 34 102 PriIwa01| IWannaBeYourLover|Prince|1979|1:40
BeaShe01 272 136 EagThe01| TheLongRun|Eagles|1979|1:15
BeaShe02 714 170 AbbFer01| Fernando|Abba|1976|3:35
BeaTha01 204 204 BeaTha01| ThankYouGirl|Beatles|1964|2:07
BobLik01 238 238 BobLik01| LikeARollingStone|BobDylan|1965|1:28
EagHot01 374 272 BeaShe01| SheLovesYou|Beatles|1964|3:36
EagThe01 136 306 RoxLov01| LoveIsTheDrug|RoxyMusic|1976|3:03
FleSar01 340 340 FleSar01| Sara|FleetwoodMac|1979|2:13
PriIwa01 102 374 EagHot01| HotelCalifornia|Eagles|1977|3:28
QueWea01 408 408 QueWea01| WeAreTheChampions|Queen|1977|2:16
RoxLov01 306 442 BeaShe02| She'sAWoman|Beatles|1964|3:50

6
Indexacinde
archivos

Operacionesdemantenimientodeun
archivoindexado
Elmanejodeunndiceimplicarealizarlassiguientes
tareas:
Crearunnuevondiceapartirdeunficherodedatos
Cargarunndiceyaexistenteenmemoriadesdeunficherodendice
Reescribirelficherodendicealfinal
Aadirregistrosalficherodedatos
Eliminarregistrosdelficherodedatos
Modificarregistrosdelfichero

7
Indexacinde
archivos

Crearunndice

Crearunnuevondicesiguelossiguientespasos:
1Recorrerelficherodedatossecuencialmenteeirextrayendodecadaregistroel
campoclave
2Crearladupla<clave,dir_fichero>,siendodir_ficheroladireccinfsicadel
ficherodondeseencuentraenregistrocondichaclave
3Insertardichaduplaenelndiceenmemoria
4Enestemomentoesconvenienteguardarelndiceenficheroparamantenerla
integridaddelsistema.Sehaceunrecorridosecuencialdelndiceyseguardala
dupla<clave,dir_fichero>enelficherodendices

8
Indexacinde
archivos

Cargarelndiceamemoria/Guardarelndiceafichero

Cargarelndiceenmemoria
Recorrerelficherodendicessecuencialmenteconlasduplas<clave,
dir_fichero>,einsertarlosdirectamenteenelndiceenmemoria
Guardarelndiceendisco
Salvarelndicedememoriaalficherodendicesantesdeterminarlaaplicacin
Elficherodedatossiemprepermaneceactualizadoperoelficherodendices
puedeestarcorruptosinosehasalvadocorrectamentedebidoaunainterrupcin
inesperadadelaaplicacin.Pararesolveresteproblemapuedemarcarseel
ficherondiceconalgunaetiquetacuandostesemodificaenmemoria.Siel
sistemafallayseencuentradichamarcaenelficherondice,sesabequehayque
regenerartodoelndiceapartirdelficherodedatos

9
Indexacinde
archivos

Aadirunnuevoregistroalfichero

Aadirunnuevoregistroalficherodedatostambin
implicaaadirunanuevaentradaalndice
1Seextraelaclavedelregistroainsertar
2Sebuscaunaposicinvlidaparainsertarelregistroenelficherodedatos(ver
insercinyactualizadoderegistrosenelTema5)yseinsertaenregistroendicha
posicin
3Seinsertaladupla<clave,dir_fichero>enelndiceenmemoria

AbbChi01 0
... ...
AbbFer01 170
340 FleSar01| Sara|FleetwoodMac|1979|2:13
BeaCal01 68
374 EagHot01| HotelCalifornia|Eagles|1977|3:28
BeaLet01 476
408 QueWea01| WeAreTheChampions|Queen|1977|2:16
BeaMyb01 34
442 BeaShe02| She'sAWoman|Beatles|1964|3:50
BeaShe01 272
476 BeaLet01| Letitbe|Beatles|1970|2:55
BeaShe02 714
BeaTha01 204
... ...

10
Indexacinde
archivos

Eliminarunregistrodefichero

Eliminarunregistroenunficherodedatostambin
implicaeliminarlaentradacorrespondienteenel
ndice
1Sebuscalaclavedeldatoaborrarenelndice,paraconocersulocalizacinen
fichero
2Segnlascaractersticasydisposicindelosdatosenficheroseutilizarun
mtododeborradouotro(verborradoderegistrosenelTema5)
3Seeliminaenmemorialadupla<clave,dir_fichero>delndice

11
Indexacinde
archivos

Actualizarunregistrodefichero

Laactualizacindeunregistroimplicados
situacionesdiferentes:
Sicambiaelvalordelcampoclave,entonces
cambiasuposicinenelndice
Quenormalmenteseimplementaabasederealizarunaoperacindeborrado,
seguidadeunaoperacindeinsercindelregistromodificado
Laactualizacinnoafectaalcampoclave,porlo
quenoelndicenosemodifica
Segneltipoderegistros(registrosdelongitudfijaovariable)elnuevoregistro
seubicaronoenlamismaposicin.Dependiendodeestoserealizaruna
simplemodificacinounaoperacindeborrado/insertado.

12
Indexacinde
archivos

Unaclaseparagestionarunndicesimple.EltipoClavePidentificaeltipode
claveprimaria.Elenterolargoidentificalaposicinfsicadelficherodondese
albergaeldato.Silosregistrosenficherotienenelmismotamaopuedeutilizarse
laposicinlgicaenlugardelafsica:

#include<map>
usingnamespacestd;

template<classClaveP>
classIndice{
map<ClaveP,longint>ind;

public:
Indice();
voidcargar(stringfDatos);
voidsalvar(stringfDatos);
voidinsertar(ClavePclave,longintpos);
longinteliminar(ClavePclave);
longintbuscar(ClavePclave);
};

13
Indexacinde
archivos

ndicessecundarios
Unndicesimplenopermitebsquedasporotros
campos,esdecir,porllavessecundarias
ElndicesimplenoesvlidoparaencontrartodoslosxitosdelosBeatles
Paraellodefinimosunndicesecundariocompuesto
porladupla:<clave_secundaria,clave_primaria>
Comovariosregistrospuedencontenerelmismo
valorenlallavesecundaria,existirnmltiples
entradasenelndicesecundarioporcadaposible
valordelallavesecundaria

14
Indexacinde
archivos

Laconsultaahorasedivideendospasos:
1Localizarla/sclave/ssecundaria/senelndicesecundario.
2Paracadaunadelasclavessecundariascoincidenteslocalizarelrestodelos
datosenelndiceprimario.

Clave_sec.Clave_prim
... ....
Beatles BeaCal01
Beatles BeaIsa01
Beatles BeaIwa01
Beatles BeaMyb01
Beatles BeaPle01
Beatles BeaShe01
Beatles BeaTwi01
... ...

15
Indexacinde
archivos

Operacionesconndicessecundarios

Aadirregistrosimplicaaadirnuevasentradasen
elficherodedatos,ndiceprimarioendices
secundarios
Elborradodeunregistrosuponeeliminartodaslas
referenciasaeseregistroenelsistemadeficheros
Espreferiblequeelndicesecundarioreferenciealaclaveprimariaenvezde
hacerlodirectamentealadireccindefichero.Deestemodopuedeevitarsela
eliminacinenlosndicessecundariossisteprocesoresultasemuyengorroso.El
ndiceprimariodetectaentonceslasincoherenciasalpermanecersiempre
actualizado

16
Indexacinde
archivos

Enlaactualizacinpodemosencontrartrescasos:
Silaactualizacinmodificalaclaveprimaria,entonceshayquemodificartodoel
sistemadeficheros
Sisloafectaalaclavesecundaria,seactualizadichondice.Existensistemas
deficherosqueoptanpornoactualizarlosndicessecundarios.Lasposibles
inconsistenciassonentoncesdetectadasalconsultarelndiceprimario.Estosuele
hacersecuandoelcostedeencontrarincoherenciasesmenorqueelcostede
actualizarlosndices
Sielcampodelndicesecundarionoseveafectadonilaclaveprimariatampoco,
laactualizacinseresuelvesinmscomovimoseneltemaanterior

17
Indexacinde
archivos

Unaclaseparalagestindeunndicesecundario:

#include<multimap>
#include<list>
usingnamespacestd;

template<classClaveS,classClaveP>
classIndiceSec{
multimap<ClaveS,ClaveP>indSec;

public:
IndiceSec();
voidcargar(stringfDatos);
voidsalvar(stringfDatos);
voidinsertar(ClaveSclaveS,ClavePclaveP);
booleliminar(ClaveSclaveS,ClavePclaveP);
list<ClaveP>buscar(ClaveSclaveS);
};

18
Indexacinde
archivos

ndicessecundariosconlistasinvertidas
Laestructuradelndicesecundariointroduceuna
entradaparacadaclavesecundariaduplicada
Paraevitarlodefinimosunnuevondicesecundario
queincluyaparacadaclaveunalistadeclaves
primarias

... ..
..
Beach BeaShu01 BeaSur01 BeaSur02 BeaSur03
Boys
Beatles BeaCal01 Bealsa01 Bealwa01 BeaMyb01
Belmonts BelCom01 BelTel01
BenE
King BenAmo01 BenSta01 BenSpa01 BenSup01
Bert
Kaempfert BerRed01 BerTen01 BerThr01 BenWon01
...

19
Indexacinde
archivos

Sielnmerodeclavessecundariasrepetidasse
esperaqueseaelevadoyelsistemaespera
bsquedasadicionalesporclaveprimaria,podra
optarsepordefinirunmapadeconjuntoscomo
ndicesecundario
Elndicesecundarioseguardaendosficheros
Elficherodendicessecundarioguardaparacada
clavesecundarialadupla<clave_sec,dir_fclave>
Siendoclave_seclaclavesecundariaydir_fclaveladireccindelficherodel
listadodeclavesdondecomienzalaprimeraetiquetadelalistainversa

20
Indexacinde
archivos

Elficherodellistadodeclavesposeeunaentrada
porcadaclaveprimaria<clave_prim,dir_fclave>
Siendoclave_primlaclaveprimariaydir_fclaveladireccindeficherodonde
aparecelasiguienteclaveprimariadelalistainvertida

....
11 BeaCal01 14
12 BeaShu01 24
... .... 13 BemAmo01 15
BeachBoys 12 14 BeaIsa01 17
Beatles 14 15 BenSta01 20
Belmonts 19 16 BeaSur02 22
BenEKing 13 17 BeaIwa01 18
... 18 BeaMyb01 1
19 BelTel01 1
20 BenSpa01 21
21 BenSup01 1
22 BeaSur03 1
23 BelCom01 19
24 BeaSur01 16

21
Indexacinde
archivos

Unaclaseparalagestindeunndicesecundariomediantelistasinvertidas:

#include<map>
#include<list>
usingnamespacestd;

template<classClaveS,classClaveP>
classIndiceSec{
map<ClaveS,list<ClaveP>>indSec;

public:
IndiceSec();
voidcargar(stringfDatos);
voidsalvar(stringfDatos);
voidinsertar(ClaveSclaveS,ClavePclaveP);
booleliminar(ClaveSclaveS,ClavePclaveP);
list<ClaveP>buscar(ClaveSclaveS);
};

22
Indexacinde
archivos

LasdiversasclasesdelSistemadeFicheros,ndice
Primario,ndicesSecundariosyFicherodeDatos
seramanejadoporlaclaseFicheroIndices
SupongamosunSistemadeFicherosenelquesemanejaunnicondice
secundario,unaposibledefinicindelaclaseFicheroIndicesseralasiguiente:

#include<map>
#include<list>
usingnamespacestd;

template<classRegistro,classClaveP,classClaveS>
classFicheroIndices{
Fichero<Registro>fDatos;
Indice<ClaveP>indPrim;
IndiceSec<ClaveS,ClaveP>indSec;

public:
FicheroIndices(stringfDatos);
~FicheroIndices();
voidinsertar(ClavePclaveP,ClaveSclaveS,constRegistro&dato);
voideliminar(ClavePclaveP);
Registrobuscar(ClavePclavep);
list<ClaveP>buscar(ClaveSclaveS);
};
23
Indexacinde
archivos

Ventajaseinconvenientesdelosndices
Losndicespermitenunaccesorpidoyeficientea
losdatosalbergadosendisco.Suestructuraes
relativamentesencillayfcildemantener
Sinembargonosonfactiblescuandoelndicees
demasiadograndeparaalbergarseenmemoria
Esposiblemantenerlosndicesendiscoconla
mismafilosofaquesemanejanenmemoria,pero
dejandesertaneficientesyrpidos
LasolucinaestoscasossonlosrbolesB

24

You might also like