Transcript
  • 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:

    [email protected]},

    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