Download - Una Introducción a MongoDB
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 1/10
PUBLICIDAD
Ennuestrosclubs
EnMovistar4GLTE:Mejoratuproductividadconlared4G
CarlosParamio
UnaintroduccinaMongoDB10demayode2011|17:50CET
HaceyaunosdasoshablabadeNoSQLysuconvenienciaparaciertosproyectos.HoyosvoyahablardelascaractersticasdeunsistemadebasededatosNoSQLenconcreto,elcualhetenidoocasindeprobarafondoenunpardeproyectos,yquesindudasehaconvertidoenunodemisfavoritos:MongoDB.
DescripcinylicenciaMongoDBesunsistemadebasededatosmultiplataformaorientadoadocumentos,deesquemalibre.Comoyaosexpliqu,estosignificaquecadaentradaoregistropuedetenerunesquemadedatosdiferente,conatributosocolumnasquenotienenporqurepetirsedeunregistroaotro.EstescritoenC++,loqueleconfiereciertacercanaalbaremetal,orecursosdehardwaredelamquina,demodoqueesbastanterpidoalahoradeejecutarsustareas.Adems,estlicenciadocomoGNUAGPL3.0,demodoquesetratadeunsoftwaredelicencialibre.FuncionaensistemasoperativosWindows,Linux,OSXySolaris.
LascaractersticasquemsdestacaradeMongoDBsonsuvelocidadysuricoperosencillosistemadeconsultadeloscontenidosdelabasededatos.Sepodradecirquealcanzaunbalanceperfectoentrerendimientoyfuncionalidad,incorporandomuchosdelostiposdeconsultaqueutilizaramosennuestrosistemarelacionalpreferido,perosinsacrificarenrendimiento.
TerminologabsicaenMongoDBEnMongoDB,cadaregistrooconjuntodedatossedenominadocumento.Losdocumentossepuedenagruparencolecciones,lascualessepodradecirquesonelequivalentealastablasenuna
Portada Respuestas Actualidad Trabajarcomodesarrollador Desarrolloweb Ms DesarrolloparaStartups
NOTEPIERDAS Curiosidades OpenSource Frameworks Herramientasdedesarrollo EventosparaDesarrolladoresPUBLICIDAD
GenbetaDev
BuscaenGenbetaDevconGoogle Buscar
Comentarios15
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 2/10
SigueaGenbetadev
Newsletter:
Correoelectrnico Suscrbete
Versinmvil Versintablet
basededatosrelacional(sloquelascoleccionespuedenalmacenardocumentosconmuydiferentesformatos,enlugardeestarsometidosaunesquemafijo).Sepuedencrearndicesparaalgunosatributosdelosdocumentos,demodoqueMongoDBmantendrunaestructurainternaeficienteparaelaccesoalainformacinporloscontenidosdeestosatributos.
FormatodelosdocumentoseideasparalaorganizacindedatosLosdistintosdocumentossealmacenanenformatoBSON,oBinaryJSON,queesunaversinmodificadadeJSONquepermitebsquedasrpidasdedatos.Parahacernosunaidea,BSONguardadeformaexplcitalaslongitudesdeloscampos,losndicesdelosarrays,ydemsinformacintilparaelescaneodedatos.Esporestoque,enalgunoscasos,elmismodocumentoenBSONocupaunpocomsdeespaciodeloqueocuparadeestaralmacenadodirectamenteenformatoJSON.PerounadelasideasclavesenlossistemasNoSQLesqueelalmacenamientoesbarato,yesmejoraprovecharlosiasseintroduceunconsiderableincrementoenlavelocidaddelocalizacindeinformacindentrodeundocumento.
Sinembargo,enlaprctica,nuncaveremoselformatoenqueverdaderamentesealmacenanlosdatos,ytrabajaremossiempresobreundocumentoenJSONtantoalalmacenarcomoalconsultarinformacin.UnejemplodeundocumentoenMongoDBpodraserperfectamenteste:
{
_id:4da2c0e2e999fb56bf000002
title:UnaintroduccinaMongoDB,
body:Loremipsumdolorsitamet,
published_at:20110509T18:17:0707:00,
author_info:{
_id:4dc8919331c0c00001000002
name:CarlosParamio
},
tags:[MongoDB,NoSQL,Basesdedatos]
comments:[
{
author_info:{name:JorgeRubira,email:[email protected]
},
body:Test,
created_at:20110510T10:14:0107:00
},
{
author_info:{name:TxemaRodrguez,email:
body:Otrotest,
created_at:20110510T10:14:0907:00
}
]
liked_by:[4d7cf768e999fb67c0000001,4da34c62ba875a19d4000001]
}
Comopodemosadivinar,estedocumentopretenderepresentarlamaneraenquepodranalmacenarselosdatoscorrespondientesaunpostdeunblog.Losatributos_id(oclaveprincipal)puedentenerelformatoquesedesee,aunqueMongoDButilizaunvalorparecidoaunUUIDenhexadecimalpordefectosinosehaespecificadoninguno.Apesardeparecerunvalorcompletamentealeatorio(aunqueyasabemosquelaaleatoriedadrealnoexisteeninformtica),utilizancomobaseunasemillabasadaenlaMACdelainterfazdereddelamquina(yotrosdetallesdelamisma)paraevitarquedosmquinasdiferentespuedangenerarelmismovalorparala
Regstrate | Entra oconctatecon
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 3/10
clavedeundocumento.Ylosprimerosbytescorrespondenaunamarcadetiempo,demodoquelasclavesseordenandeformanaturalporordendecreacin(ocasi,puesestclaroquelasdistintasmquinascorriendoMongoDBdebentenerlafechayhorasincronizadas)sintenerquemirarculfueelltimovalorusado.Unasolucininteligente,amimododeverbastantemseficientequeuncampoautonumrico,enespecialparaevitarqueunamquinabloqueelainsercinderegistrosenunacoleccinsloparaasegurarsequenosedancondicionesdecarreraalintentardosmquinasdiferentesescribirundocumentoconelmismovalorpara_id.Porcierto,esteatributo_ideselnicoobligatorioparaundocumento.
Lasetiquetasyloscomentariosestnenelpropiodocumentoquerepresentaalpost,enlugardeguardarlosencoleccionesseparadasyutilizarclavesforneasparareferenciaralosmismos.Sinembargo,enelatributoliked_bysqueguardamosunarelacindeclaves,quecorrespondenalosusuariosquehanmarcadoelpostcomoqueleshagustado.UtilizarunaformauotradependerdelasnecesidadesdeaccesoaestosdatosEnestecaso,porejemplo,sabemosquenovamosapintarinformacinsobrelosusuariosquehanmarcadounpostconunmegusta,perosqueremosvercuntoslohanmarcadoas,osielusuarioactualyalohamarcadoono,conloquealmacenarnicamentelasclavesdeesosusuariosyguardarsuinformacinpersonaldetalladaenotracoleccineslomsconveniente.
Porsupuesto,noesnecesariopediraMongoDBquenosdevuelvatodoeldocumentocadavezqueloconsultamos.Siporejemplovamosapintarnicamenteunlistadodepostsrecientes,seguramenteseasuficienteobtenerelatributotitle,conlosdocumentosordenadosporpublished_at.As,ahorramosanchodebandaentreelmotordebasededatosylaaplicacin,almismotiempoquememoriadadoquenohayqueinstanciartodoeldocumento.Adems,sitenemosmuchosmilesdevisitantes,elatributoliked_bypodrallegaracrecerbastante.AunqueeltamaodeundocumentodeMongoDBpuedellegarhastalos16Megabytes,conloquepodemosalmacenarbastanteinformacindentrodeunnicodocumentosinnecesidaddeutilizarreferencias,siaslonecesitamos.Encasodequetuviramosquealmacenarmuchoms,habraqueoptarporutilizarotroesquema.
Aveces,tocadesnormalizarparapoderteneramanolainformacinnecesariaalahoradepintarunpost.Esporesoqueenelatributoauthor_infoheutilizadounaversinintermedia:Sibientenemoslaclaveprincipaldelusuarioquehaescritoestepost,comoeshabitualquepintemoselnombredelautor,healmacenadotambindichonombreeneldocumentoquerepresentaalpost,paraquenoseanecesariorealizarunasegundaconsultaalacoleccinusuarios.Estasdesnormalizacionesdependennuevamentedelusoquesedenalosdatos.Enestecaso,tengoclaroqueelnombredeunusuarionovaacambiardemasiado,asquerecorrertodoslospostsparacambiarestevalorencasodequeelusuariorealiceestaoperacin,sibienesunamodificacinquepodrallevaruntiempoconsiderableparaejecutarse,noesunaoperacinhabitualfrentealaconsultadelnombredelautor,yportantocompensa.Inclusopodramosllegaratratarelpostcomoalgomspermanente,demodoqueaunqueunusuariocambiarasunombreaposteriori,elnombreutilizadoparafirmarlospostsanterioresnovare,osencillamentelospostspuedanfirmarsecondiferentespseudnimos.
Comocreoquehabrquedadopatenteaestasalturas,elmodeladodelesquemadedatosconMongoDBdependemsdelaformaenqueconsultaremosoactualizaremoslosdatosquedelaslimitacionesdelpropiosistema.
CmoconsultarlosdatosSinentrardemasiadoendetallesacercadetodaslasposibilidadesqueMongoDBnosofreceparaconsultarlosdatosalmacenados,squisieranombraralgunasdeellas,parahacernotarquenoestamosfrenteaunsistemasimpledealmacenamientodeparesclavevalor.
Enprimerlugar,MongoDBnospermiteutilizarfuncionesMapyReduceescritasenJavascriptparaseleccionarlosatributosquenosinteresandelosdatos,yagregarlos(unificarlos,simplificarlos)enla
Utilizamoscookiespropiasydetercerosparamostrarlepublicidadrelacionadaconsus
preferenciassegnsunavegacin.Sicontinuanavegandoconsideramosqueaceptael
usodecookies.Msinformacin>
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 4/10
maneradeseada,respectivamente.EstoesalgohabitualenmuchossistemasNoSQL,yenalgunoscasosesinclusolanicaformaposibledeconsultardatos.Claroestquemuchasvecesnecesitamosalgobastantemssencilloquesto.
EnMongoDBsepuedenutilizarconsultasalvalordeunatributoespecfico.Porejemplo,podemoscapturarelpostquetieneundeterminadottulo:
db.posts.find({title:UnaintroduccinaMongoDB})
Elvaloraconsultarpuedeestaranidadoenuntipodedatosmscompletoenelatributodeldocumento(porejemplo,comovalordeunhashasociadoalatributo,ocomoelvalordeunodelostemsdeunarray).Seutilizaunpuntocomoseparadordelosnombresdelasclavesdelosdiferenteshashesquehayquerecorrerhastallegaralvalordeseado.Porejemplo,lasiguienteconsultadevolveratodoslospostsescritosporundeterminadoautor:
db.posts.find({author_info._id:4da2c0e2e999fb56bf000002})
YestaotralospostsetiquetadosconMongoDB:
db.posts.find({tags:MongoDB})
Elhashutilizadocomoconjuntodecondicionesquedebencumplirlosdocumentosadevolverpuedeincluiroperadoresdemuydiversostipos,noslocomparadoresdelvalorabsolutobuscado.Algunosdeellosson:
$all:Paraindicarqueelarrayalmacenadocomovalordelatributodebetenerlosmismoselementosqueelproporcionadoenlacondicin.
$exists:Paracomprobarqueelatributoexisteeneldocumento.
$mod:Paracomprobarelrestodeunadivisindelvalordelatributoporunnmero.
$ne:Paraindicarqueelvalornopuedeserelproporcionado.
$in:Paraindicarqueelvalordebeestarentrealgunodelosproporcionados.
$nin:Contrariode$in.
$or:Paraindicarquesedebecumpliralmenosunacondicindeentreungrupodecondiciones.
$nor:Contrariode$or.
$size:Paraindicarelnmerodeelementosquedebehaberenelarrayalmacenadocomovalor.
$type:Paracomprobareltipodelvaloralmacenado(nmero,cadena)
Expresionesregulares:Elvalordebeconcordarconlaexpresinregularindicada.
Ymuchos,muchosms.Losresultadossepuedenagrupar,ordenar,contar,paginar,yotrastantasoperacionescomunessinnecesidadderecurriralfarragosoMap/Reduce.Ysiemprequelosatributosconsultadostengandefinidosunndice,lavelocidaddelasconsultasesespectacular.
Bueno,porahoracreoqueessuficientecomoparaquesirvadeintroduccinaestefabulosomotordebasededatos.Enfuturosartculosprocurarhablarosdesusotrascaractersticasalahoradeescalarloparasuusoenmltiplesmquinas,ascomootrosmecanismosinteresantesdeMongoDBcomolosndicesgeoespaciales.Siquerisexperimentarconl,ytrabajishabitualmenteconRuby,talvezosintereseecharunvistazoaunObjectDocumentMapperparaestelenguajequeescribparaunproyecto,yquefacilitalainteraccinconelmotordesdetusmodelos:MongoODM.
Msinformacin|MongoDB,BSON,MongoODM
Categoras Basesdedatos
Tags NoSQL
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 5/10
PUBLICIDAD
Loscomentariossehancerrado
PUBLICIDAD
Productos MongoDB
An sin PginaWeb?
Ahora Tu Web por solo $19 MXN.Fcil, Rpido, Mltiples Diseos.
Artculosrecomendados
MongoDB:empezandoporelprincipio.Insertandodatos
NoSQL:clasificacindelasbasesdedatossegnelteoremaCAP
MongoDB:lavidacambia,tusdatostambin.Actualizasubdocumentosyaadedatosaunarray
MongoDB:lavidacambia,tusdatostambin.Operacionesdeactualizacinsimples
LlegaMySQLCluster7.2"70vecesmsveloz"yconsoporteNoSQL
BasesdedatosNoSQL.Eligelaopcinquemejorseadapteatusnecesidades
MongoDB:ques,cmofuncionaycundopodemosusarlo(ono)
GanapremioscazandobugsenlanuevaversindeMongoDB
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 6/10
Ordenarpor: Msvalorados Msrecientes Cronolgico15comentarios
Suscribir Abrirtodos Cerrartodos
11 etnassoft 15deMayode20118:27
ParalosinteresadosenestepotentesoftwareNOSQL,tenisavusestradisposicinunlibrocompletamentegratuto(bajolicenciaOpenBookdeO'Reilly)enlasiguientedireccin:
TheLittleMongoDBBook
Unbuenmanualparacomplementardesdeunpuntodevistatcnicotodolovistoenesteartculo.
Saludos!
1voto|Karma33.00
INTERESANTE
Respondiendoaetnassoft:
12 CarlosParamio
http://h1labs.com
15deMayode201112:34
Carlos,tieneunapintaestupenda.Noloconoca.Muchasgraciasporlaaportacin.
0votos|Karma13.00
Respondiendoaetnassoft:
13 72558 16deSeptiembrede201216:09
Excelente!!!
0votos|Karma5.00
2 JosCabo 10deMayode201118:41
Nosenose...nomeconvence.Estomismosepuedeconseguirconunsistemadebasesdedatosrelacionalbastantesencillo.Msinstantneo...ymseficiente.
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 7/10
Todavanohevistoningnejemplocorrectode"almacndedatos"dondenoserecomiendoelusodeunSGBDSQL.
Unsaludo.
0votos|Karma8.00
RespondiendoaJosCabo:
5 68143 11deMayode20112:02
Unpardeejemplosson,FacebookyTwitter
1voto|Karma15.00
Respondiendoa68143:
9 logoff 11deMayode20118:39
queambosusanApacheCassandra,unaNoSQLmuyvlida.
1voto|Karma18.00
3 jubete 10deMayode201121:09
TengocuriosidadporlassolucionesNoSQLyapreparadasylistasparausar(enrealidadguardarcosasensitiosquenosonSGBDReslomasviejoquehay).Sonrealmentemasrapidas?
Porejemplo,enelcasodelforodelarticulo,sisehicieraporgenteigualdecompetenteconMongoDByconMySQL(elmotorsintransaccionesporqueenunforotampocosontanimportantesyasiesmasrapido),cualseriamasrapida?
Yquetalescalaaunoscuantosmillonesdeusuarios?
Supongoquevanbienporqueaqui(http://alt1040.com/2011/02/7tecnologiasdesoftwarequesostienenafacebook)dicenqueFacebookusaunasolucionNoSQLyFacebook,otracosano,perotrallatiene.
Escuriosidadsincera
0votos|Karma8.00
Respondiendoajubete:
10 logoff 11deMayode20118:41
algunacomparacindeApacheCassandraconMySQL:
http://www.scriptol.com/programming/cassandra.php
paracargasaltasganadepaliza.
1voto|Karma23.00
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 8/10
4 IrvingMontalvo
http://www.xmonty.com/
10deMayode201121:32
HaceunassemanasvengoprobandolasbasesdedatosnoSQLyMongoDBmeparecemuyinteresanteporusarBSON.
DesdeunprincipiomehicelapreguntacuandousarnoSQLyenmispruebashevistounmejorrendimientoenserviciowebquerequieranconsultasrpidasyensistemasenqueladatanoestaestandarizada(formatosestandarizados:recibos,boletas,etc...).
0votos|Karma5.00
6 68143 11deMayode20112:06
ElhechodequeseaAGPLnosoloquesetratadeunsoftwaredelicencialibrecomosedicedemaneraacertadaenelartculosinoqueademsaadelaobligacindedistribuirelsoftwaresisteseejecutaparaofrecerserviciosatravsdeunared.
0votos|Karma5.00
Respondiendoa68143:
7 CarlosParamio
http://h1labs.com
11deMayode20115:08
Efectivamente,Jaime.Peroojo,noserefierealadistribucindelsoftwarequeconectaconMongoDB,sinoalsoftwarequepudierasaadiromodificarapartirdelcdigobasedeMongoDB.Esdecir,sicreasunserviciowebquesenutrededatosprovenientesdeMongoDB,nonecesitasliberarelcdigo,puesseconsideraunaaplicacinseparadadeste.
Aquloexplicanbastantebien:http://www.mongodb.org/display/DOCS/Licensing
0votos|Karma13.00
14 72558 16deSeptiembrede201216:12
Hermano,Excelentepostmuyutil!!!
0votos|Karma5.00
15 polsurf 10deSeptiembrede201311:05
Buenpost,meparecesimilaralalgicadexml.Seguramentelavelocidadseaelfuertedemongo.
Slds
0votos|Karma5.00
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 9/10
Verms(2)
Suscribir Abrirtodos Cerrartodos
ESTILOSDEVIDA
Trendencias
TrendenciasBelleza
TrendenciasHombre
TrendenciasLifestyle
DirectoalPaladar
BebsyMs
Vitnica
Decoesfera
Embelezzia
Poprosa
MOTOR
Motorpasin
MotorpasinMoto
MotorpasinFuturo
OCIO
BlogdeCine
VayaTele!
DiariodelViajero
PapelenBlanco
ECONOMA
ElBlogSalmn
PymesyAutnomos
AhorroDiario
LATINOAMRICA
XatakaMxico
MotorpasinMxico
DirectoAlPaladarMxico
XatakaAndroidMxico
VidaExtraMxico
VitnicaMxico
TrendenciasHombreMxico
PARTICIPAMOSEN
CirculaSeguro
CirculaSeguroPT
Actibva
AnexoM
HappingMagazine
BlogSage
OptimismoDigital
EnNaranja
BlogginZenith
Urbanfire
Tecnologadetat
Ciudadano0,0
MiMundoPhilips
BBVAcontuempresa
BershkaBscene
PUBLICIDAD
TECNOLOGA
+enGenbetaDev
LOMEJOR
TEMAS
PRODUCTOS
RESPUESTAS
CLUB
COMUNIDAD
STAFF
Xataka XatakaMvil XatakaFoto XatakaAndroid XatakaSmartHome
XatakaWindows XatakaCiencia Applesfera VidaExtra
Genbeta GenbetaDev
-
9/2/2015 UnaintroduccinaMongoDB
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb 10/10
InstitutodelaFelicidad
BlogLenovo
QUIENESSOMOS? CONDICIONESDEUSO POLTICADECOOKIES AVISOLEGAL PUBLICIDAD AYUDA CONTACTOWEBLOGSSL