10
 9/ 2/2015 Una intro du cción a MongoDB ht t p:/ / www.genb et adev.com/base s-d e-dat os/una-int ro ducci o n-a-mon go db 1/10 PUBLICIDAD En nuestros clubs En Movistar 4G LTE: Mejora tu productivida d con la red 4G Carlos Paramio Una introducción a MongoDB 10 de mayo de 2011 | 17:50 CET  Hace ya unos días os hablaba de NoSQL y su conveniencia para ciertos proyectos. Hoy os voy a hablar de las características de un sistema de base de datos NoSQL en concreto, el cual he tenido ocasión de probar a fondo en un par de proyectos, y que sin duda se ha convertido en uno de mis favoritos: MongoDB. Descripción y licencia MongoDB es un sistema de base de datos multiplataforma  orientado a documentos , de esquema libre. Como ya os expliqué, esto significa que cada entrada o registro puede tener un esquema de datos diferente, con atributos o “columnas” que no tienen por qué repetirse de un registro a otro. Está escrito en C++, lo que le confiere cierta cercanía al bare metal , o recursos de hardware de la máquina, de modo que es bastante rápido a la hora de ejecutar sus tareas. Además, está licenciado como GNU AGPL 3.0, de modo que se trata de un software de licencia libre. Funciona en sistemas operativos Windows, Linux, OS X y Solaris. Las características que más destacaría de MongoDB son su velocidad y su rico pero sencillo sistema de consulta de los contenidos de la base de datos. Se podría decir que alcanza un balance perfecto entre rendimiento y funcionalidad, incorporando muchos de los tipos de consulta que utilizaríamos en nuestro sistema relacional preferido, pero sin sacrificar en rendimiento. Terminología básica en MongoDB En MongoDB, cada registro o conjunto de datos se denomina documento . Los documentos se pueden agrupar en colecciones, las cuales se podría decir que son el equivalente a las tablas en una    Respuestas  Ac t ual i dad Tr abajar como desarrollador Desarrol lo web Más » Desarrollo para S tart u ps NO TE PIERDAS » Curiosidades  Open Source  Frameworks  Herramientas de desarrollo  Eventos para Desarrolladores PUBLICIDAD Genbeta Dev  Busca en Genbeta Dev con G Buscar « » Comentarios 15

Una Introducción a MongoDB

Embed Size (px)

DESCRIPTION

Instroduccion a mongodb

Citation preview

  • 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