Вы находитесь на странице: 1из 10

9/2/2015

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

Ordenarpor: Msvalorados Msrecientes Cronolgico

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

QUIENESSOMOS? CONDICIONESDEUSO POLTICADECOOKIES AVISOLEGAL PUBLICIDAD AYUDA CONTACTO

http://www.genbetadev.com/basesdedatos/unaintroduccionamongodb

WEBLOGSSL

10/10

Вам также может понравиться