Академический Документы
Профессиональный Документы
Культура Документы
UnaintroduccinaMongoDB
GenbetaDev
BuscaenGenbetaDevconGoogle
Buscar
Portada
Respuestas
NOTEPIERDAS
Curiosidades
Actualidad
OpenSource
Trabajarcomodesarrollador
Frameworks
Desarrolloweb
Herramientasdedesarrollo
Ms
DesarrolloparaStartups
EventosparaDesarrolladores
PUBLICIDAD
UnaintroduccinaMongoDB
10demayode2011|17:50CET
CarlosParamio
PUBLICIDAD
Comentarios15
HaceyaunosdasoshablabadeNoSQLysuconvenienciaparaciertosproyectos.Hoyosvoya
hablardelascaractersticasdeunsistemadebasededatosNoSQLenconcreto,elcualhetenido
ocasindeprobarafondoenunpardeproyectos,yquesindudasehaconvertidoenunodemis
favoritos:MongoDB.
Descripcinylicencia
MongoDBesunsistemadebasededatosmultiplataformaorientadoadocumentos,deesquema
libre.Comoyaosexpliqu,estosignificaquecadaentradaoregistropuedetenerunesquemade
datosdiferente,conatributosocolumnasquenotienenporqurepetirsedeunregistroaotro.Est
escritoenC++,loqueleconfiereciertacercanaalbaremetal,orecursosdehardwaredela
mquina,demodoqueesbastanterpidoalahoradeejecutarsustareas.Adems,estlicenciado
comoGNUAGPL3.0,demodoquesetratadeunsoftwaredelicencialibre.Funcionaensistemas
operativosWindows,Linux,OSXySolaris.
LascaractersticasquemsdestacaradeMongoDBsonsuvelocidadysuricoperosencillo
sistemadeconsultadeloscontenidosdelabasededatos.Sepodradecirquealcanzaunbalance
perfectoentrerendimientoyfuncionalidad,incorporandomuchosdelostiposdeconsultaque
utilizaramosennuestrosistemarelacionalpreferido,perosinsacrificarenrendimiento.
TerminologabsicaenMongoDB
EnMongoDB,cadaregistrooconjuntodedatossedenominadocumento.Losdocumentosse
Ennuestrosclubs
EnMovistar4GLTE:
Mejoratuproductividadcon
lared4G
puedenagruparencolecciones,lascualessepodradecirquesonelequivalentealastablasenuna
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
1/10
9/2/2015
UnaintroduccinaMongoDB
basededatosrelacional(sloquelascoleccionespuedenalmacenardocumentosconmuydiferentes
formatos,enlugardeestarsometidosaunesquemafijo).Sepuedencrearndicesparaalgunos
atributosdelosdocumentos,demodoqueMongoDBmantendrunaestructurainternaeficientepara
SigueaGenbetadev
Newsletter:
Correoelectrnico
elaccesoalainformacinporloscontenidosdeestosatributos.
Formatodelosdocumentoseideasparala
organizacindedatos
LosdistintosdocumentossealmacenanenformatoBSON,oBinaryJSON,queesunaversin
Versinmvil
Suscrbete
Versintablet
modificadadeJSONquepermitebsquedasrpidasdedatos.Parahacernosunaidea,BSON
guardadeformaexplcitalaslongitudesdeloscampos,losndicesdelosarrays,ydemsinformacin
tilparaelescaneodedatos.Esporestoque,enalgunoscasos,elmismodocumentoenBSON
ocupaunpocomsdeespaciodeloqueocuparadeestaralmacenadodirectamenteenformato
JSON.PerounadelasideasclavesenlossistemasNoSQLesqueelalmacenamientoesbarato,y
esmejoraprovecharlosiasseintroduceunconsiderableincrementoenlavelocidaddelocalizacin
deinformacindentrodeundocumento.
Sinembargo,enlaprctica,nuncaveremoselformatoenqueverdaderamentesealmacenanlos
datos,ytrabajaremossiempresobreundocumentoenJSONtantoalalmacenarcomoalconsultar
informacin.UnejemplodeundocumentoenMongoDBpodraserperfectamenteste:
{
_id:4da2c0e2e999fb56bf000002
title:UnaintroduccinaMongoDB,
body:Loremipsumdolorsitamet,
published_at:20110509T18:17:0707:00,
author_info:{
_id:4dc8919331c0c00001000002
name:CarlosParamio
},
tags:[MongoDB,NoSQL,Basesdedatos]
Regstrate | Entra oconctatecon
comments:[
{
author_info:{name:JorgeRubira,email:email1@example.com
},
body:Test,
created_at:20110510T10:14:0107:00
},
{
author_info:{name:TxemaRodrguez,email:
email2@example.com},
body:Otrotest,
created_at:20110510T10:14:0907:00
}
]
liked_by:[4d7cf768e999fb67c0000001,4da34c62ba875a19d4000001]
}
Comopodemosadivinar,estedocumentopretenderepresentarlamaneraenquepodran
almacenarselosdatoscorrespondientesaunpostdeunblog.Losatributos_id(oclaveprincipal)
puedentenerelformatoquesedesee,aunqueMongoDButilizaunvalorparecidoaunUUIDen
hexadecimalpordefectosinosehaespecificadoninguno.Apesardeparecerunvalor
completamentealeatorio(aunqueyasabemosquelaaleatoriedadrealnoexisteeninformtica),
utilizancomobaseunasemillabasadaenlaMACdelainterfazdereddelamquina(yotros
detallesdelamisma)paraevitarquedosmquinasdiferentespuedangenerarelmismovalorparala
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
2/10
9/2/2015
UnaintroduccinaMongoDB
clavedeundocumento.Ylosprimerosbytescorrespondenaunamarcadetiempo,demodoquelas
clavesseordenandeformanaturalporordendecreacin(ocasi,puesestclaroquelas
distintasmquinascorriendoMongoDBdebentenerlafechayhorasincronizadas)sintenerquemirar
culfueelltimovalorusado.Unasolucininteligente,amimododeverbastantemseficienteque
uncampoautonumrico,enespecialparaevitarqueunamquinabloqueelainsercinderegistros
enunacoleccinsloparaasegurarsequenosedancondicionesdecarreraalintentardosmquinas
diferentesescribirundocumentoconelmismovalorpara_id.Porcierto,esteatributo_idesel
nicoobligatorioparaundocumento.
Lasetiquetasyloscomentariosestnenelpropiodocumentoquerepresentaalpost,enlugarde
Utilizamoscookiespropiasydetercerosparamostrarlepublicidadrelacionadaconsus
guardarlosencoleccionesseparadasyutilizarclavesforneasparareferenciaralosmismos.Sin
preferenciassegnsunavegacin.Sicontinuanavegandoconsideramosqueaceptael
embargo,enelatributoliked_bysqueguardamosunarelacindeclaves,quecorrespondenalos
usodecookies.Msinformacin>
usuariosquehanmarcadoelpostcomoqueleshagustado.Utilizarunaformauotradependerde
lasnecesidadesdeaccesoaestosdatosEnestecaso,porejemplo,sabemosquenovamosapintar
informacinsobrelosusuariosquehanmarcadounpostconunmegusta,perosqueremosver
cuntoslohanmarcadoas,osielusuarioactualyalohamarcadoono,conloquealmacenar
nicamentelasclavesdeesosusuariosyguardarsuinformacinpersonaldetalladaenotracoleccin
eslomsconveniente.
Porsupuesto,noesnecesariopediraMongoDBquenosdevuelvatodoeldocumentocadavezque
loconsultamos.Siporejemplovamosapintarnicamenteunlistadodepostsrecientes,seguramente
seasuficienteobtenerelatributotitle,conlosdocumentosordenadosporpublished_at.As,
ahorramosanchodebandaentreelmotordebasededatosylaaplicacin,almismotiempoque
memoriadadoquenohayqueinstanciartodoeldocumento.Adems,sitenemosmuchosmilesde
visitantes,elatributoliked_bypodrallegaracrecerbastante.Aunqueeltamaodeundocumento
deMongoDBpuedellegarhastalos16Megabytes,conloquepodemosalmacenarbastante
informacindentrodeunnicodocumentosinnecesidaddeutilizarreferencias,siaslonecesitamos.
Encasodequetuviramosquealmacenarmuchoms,habraqueoptarporutilizarotroesquema.
Aveces,tocadesnormalizarparapoderteneramanolainformacinnecesariaalahoradepintar
unpost.Esporesoqueenelatributoauthor_infoheutilizadounaversinintermedia:Sibien
tenemoslaclaveprincipaldelusuarioquehaescritoestepost,comoeshabitualquepintemosel
nombredelautor,healmacenadotambindichonombreeneldocumentoquerepresentaalpost,
paraquenoseanecesariorealizarunasegundaconsultaalacoleccinusuarios.Estas
desnormalizacionesdependennuevamentedelusoquesedenalosdatos.Enestecaso,tengoclaro
queelnombredeunusuarionovaacambiardemasiado,asquerecorrertodoslospostspara
cambiarestevalorencasodequeelusuariorealiceestaoperacin,sibienesunamodificacinque
podrallevaruntiempoconsiderableparaejecutarse,noesunaoperacinhabitualfrenteala
consultadelnombredelautor,yportantocompensa.Inclusopodramosllegaratratarelpostcomo
algomspermanente,demodoqueaunqueunusuariocambiarasunombreaposteriori,elnombre
utilizadoparafirmarlospostsanterioresnovare,osencillamentelospostspuedanfirmarsecon
diferentespseudnimos.
Comocreoquehabrquedadopatenteaestasalturas,elmodeladodelesquemadedatoscon
MongoDBdependemsdelaformaenqueconsultaremosoactualizaremoslosdatosquedelas
limitacionesdelpropiosistema.
Cmoconsultarlosdatos
SinentrardemasiadoendetallesacercadetodaslasposibilidadesqueMongoDBnosofrecepara
consultarlosdatosalmacenados,squisieranombraralgunasdeellas,parahacernotarqueno
estamosfrenteaunsistemasimpledealmacenamientodeparesclavevalor.
Enprimerlugar,MongoDBnospermiteutilizarfuncionesMapyReduceescritasenJavascriptpara
seleccionarlosatributosquenosinteresandelosdatos,yagregarlos(unificarlos,simplificarlos)enla
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
3/10
9/2/2015
UnaintroduccinaMongoDB
maneradeseada,respectivamente.EstoesalgohabitualenmuchossistemasNoSQL,yenalgunos
casosesinclusolanicaformaposibledeconsultardatos.Claroestquemuchasvecesnecesitamos
algobastantemssencilloquesto.
EnMongoDBsepuedenutilizarconsultasalvalordeunatributoespecfico.Porejemplo,podemos
capturarelpostquetieneundeterminadottulo:
db.posts.find({title:UnaintroduccinaMongoDB})
Elvaloraconsultarpuedeestaranidadoenuntipodedatosmscompletoenelatributodel
documento(porejemplo,comovalordeunhashasociadoalatributo,ocomoelvalordeunodelos
temsdeunarray).Seutilizaunpuntocomoseparadordelosnombresdelasclavesdelosdiferentes
hashesquehayquerecorrerhastallegaralvalordeseado.Porejemplo,lasiguienteconsulta
devolveratodoslospostsescritosporundeterminadoautor:
db.posts.find({author_info._id:4da2c0e2e999fb56bf000002})
YestaotralospostsetiquetadosconMongoDB:
db.posts.find({tags:MongoDB})
Elhashutilizadocomoconjuntodecondicionesquedebencumplirlosdocumentosadevolver
puedeincluiroperadoresdemuydiversostipos,noslocomparadoresdelvalorabsolutobuscado.
Algunosdeellosson:
$all:Paraindicarqueelarrayalmacenadocomovalordelatributodebetenerlosmismos
elementosqueelproporcionadoenlacondicin.
$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,yotrastantas
operacionescomunessinnecesidadderecurriralfarragosoMap/Reduce.Ysiemprequelos
atributosconsultadostengandefinidosunndice,lavelocidaddelasconsultasesespectacular.
Bueno,porahoracreoqueessuficientecomoparaquesirvadeintroduccinaestefabulosomotor
debasededatos.Enfuturosartculosprocurarhablarosdesusotrascaractersticasalahorade
escalarloparasuusoenmltiplesmquinas,ascomootrosmecanismosinteresantesdeMongoDB
comolosndicesgeoespaciales.Siquerisexperimentarconl,ytrabajishabitualmenteconRuby,
talvezosintereseecharunvistazoaunObjectDocumentMapperparaestelenguajequeescrib
paraunproyecto,yquefacilitalainteraccinconelmotordesdetusmodelos:MongoODM.
Msinformacin|MongoDB,BSON,MongoODM
Categoras
Tags
Basesdedatos
NoSQL
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
4/10
9/2/2015
Productos
UnaintroduccinaMongoDB
MongoDB
PUBLICIDAD
An sin Pgina
Web?
Ahora Tu Web por solo $19 MXN.
Fcil, Rpido, Mltiples Diseos.
Artculosrecomendados
MongoDB:empezandoporelprincipio.
Insertandodatos
NoSQL:clasificacindelasbasesde
datossegnelteoremaCAP
MongoDB:lavidacambia,tusdatos
tambin.Actualizasubdocumentosy
aadedatosaunarray
MongoDB:lavidacambia,tusdatos
tambin.Operacionesdeactualizacin
simples
LlegaMySQLCluster7.2"70veces
msveloz"yconsoporteNoSQL
BasesdedatosNoSQL.Eligelaopcin
quemejorseadapteatusnecesidades
MongoDB:ques,cmofuncionay
cundopodemosusarlo(ono)
Ganapremioscazandobugsenla
nuevaversindeMongoDB
Loscomentariossehancerrado
PUBLICIDAD
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
5/10
9/2/2015
UnaintroduccinaMongoDB
15comentarios
Suscribir
Abrirtodos
Cerrartodos
INTERESANTE
etnassoft
11
15deMayode20118:27
ParalosinteresadosenestepotentesoftwareNOSQL,tenisavusestradisposicinunlibro
completamentegratuto(bajolicenciaOpenBookdeO'Reilly)enlasiguientedireccin:
TheLittleMongoDBBook
Unbuenmanualparacomplementardesdeunpuntodevistatcnicotodolovistoenesteartculo.
Saludos!
1voto|Karma33.00
Respondiendoaetnassoft:
CarlosParamio
12
http://h1labs.com
15deMayode201112:34
Carlos,tieneunapintaestupenda.Noloconoca.Muchasgraciasporlaaportacin.
0votos|Karma13.00
Respondiendoaetnassoft:
13
72558
16deSeptiembrede201216:09
Excelente!!!
JosCabo
0votos|Karma5.00
10deMayode201118:41
Nosenose...nomeconvence.Estomismosepuedeconseguirconunsistemadebasesdedatos
relacionalbastantesencillo.Msinstantneo...ymseficiente.
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
6/10
9/2/2015
UnaintroduccinaMongoDB
Todavanohevistoningnejemplocorrectode"almacndedatos"dondenoserecomiendoeluso
deunSGBDSQL.
Unsaludo.
0votos|Karma8.00
RespondiendoaJosCabo:
68143
11deMayode20112:02
Unpardeejemplosson,FacebookyTwitter
1voto|Karma15.00
Respondiendoa68143:
logoff
11deMayode20118:39
queambosusanApacheCassandra,unaNoSQLmuyvlida.
jubete
1voto|Karma18.00
10deMayode201121:09
TengocuriosidadporlassolucionesNoSQLyapreparadasylistasparausar(enrealidadguardar
cosasensitiosquenosonSGBDReslomasviejoquehay).Sonrealmentemasrapidas?
Porejemplo,enelcasodelforodelarticulo,sisehicieraporgenteigualdecompetentecon
MongoDByconMySQL(elmotorsintransaccionesporqueenunforotampocosontanimportantes
yasiesmasrapido),cualseriamasrapida?
Yquetalescalaaunoscuantosmillonesdeusuarios?
Supongoquevanbienporqueaqui(http://alt1040.com/2011/02/7tecnologiasdesoftwareque
sostienenafacebook)dicenqueFacebookusaunasolucionNoSQLyFacebook,otracosano,pero
trallatiene.
Escuriosidadsincera
0votos|Karma8.00
Respondiendoajubete:
10
logoff
11deMayode20118:41
algunacomparacindeApacheCassandraconMySQL:
http://www.scriptol.com/programming/cassandra.php
paracargasaltasganadepaliza.
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
1voto|Karma23.00
7/10
9/2/2015
UnaintroduccinaMongoDB
IrvingMontalvo
10deMayode201121:32
HaceunassemanasvengoprobandolasbasesdedatosnoSQLyMongoDBmeparecemuy
http://www.xmonty.com/
interesanteporusarBSON.
DesdeunprincipiomehicelapreguntacuandousarnoSQLyenmispruebashevistounmejor
rendimientoenserviciowebquerequieranconsultasrpidasyensistemasenqueladatanoesta
estandarizada(formatosestandarizados:recibos,boletas,etc...).
0votos|Karma5.00
68143
11deMayode20112:06
ElhechodequeseaAGPLnosoloquesetratadeunsoftwaredelicencialibrecomosedicede
maneraacertadaenelartculosinoqueademsaadelaobligacindedistribuirelsoftwaresiste
seejecutaparaofrecerserviciosatravsdeunared.
0votos|Karma5.00
Respondiendoa68143:
CarlosParamio
11deMayode20115:08
Efectivamente,Jaime.Peroojo,noserefierealadistribucindelsoftwarequeconecta
http://h1labs.com
conMongoDB,sinoalsoftwarequepudierasaadiromodificarapartirdelcdigo
basedeMongoDB.Esdecir,sicreasunserviciowebquesenutrededatos
provenientesdeMongoDB,nonecesitasliberarelcdigo,puesseconsiderauna
aplicacinseparadadeste.
Aquloexplicanbastantebien:http://www.mongodb.org/display/DOCS/Licensing
14
72558
0votos|Karma13.00
16deSeptiembrede201216:12
Hermano,Excelentepostmuyutil!!!
15
polsurf
0votos|Karma5.00
10deSeptiembrede201311:05
Buenpost,meparecesimilaralalgicadexml.Seguramentelavelocidadseaelfuertedemongo.
Slds
0votos|Karma5.00
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
8/10
9/2/2015
UnaintroduccinaMongoDB
Verms(2)
Suscribir
Abrirtodos
Cerrartodos
PUBLICIDAD
enGenbetaDev
LOMEJOR
TEMAS
PRODUCTOS
RESPUESTAS
CLUB
COMUNIDAD
STAFF
TECNOLOGA
Xataka
XatakaMvil
XatakaFoto
XatakaAndroid
XatakaWindows
XatakaCiencia
XatakaSmartHome
Applesfera
Genbeta
VidaExtra
GenbetaDev
ESTILOSDEVIDA
MOTOR
OCIO
ECONOMA
LATINOAMRICA
PARTICIPAMOSEN
Trendencias
Motorpasin
BlogdeCine
ElBlogSalmn
XatakaMxico
CirculaSeguro
TrendenciasBelleza
MotorpasinMoto
VayaTele!
PymesyAutnomos
MotorpasinMxico
CirculaSeguroPT
TrendenciasHombre
MotorpasinFuturo
DiariodelViajero
AhorroDiario
DirectoAlPaladarMxico
Actibva
XatakaAndroidMxico
AnexoM
DirectoalPaladar
VidaExtraMxico
HappingMagazine
BebsyMs
VitnicaMxico
BlogSage
Vitnica
TrendenciasHombreMxico OptimismoDigital
TrendenciasLifestyle
PapelenBlanco
Decoesfera
EnNaranja
Embelezzia
BlogginZenith
Poprosa
Urbanfire
Tecnologadetat
Ciudadano0,0
MiMundoPhilips
BBVAcontuempresa
BershkaBscene
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
9/10
9/2/2015
UnaintroduccinaMongoDB
InstitutodelaFelicidad
BlogLenovo
http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb
WEBLOGSSL
10/10