Greach 2011 - Engrandeciendo Grails con MongoDB

1,078 views

Published on

Ponencia de Enrique Medina en Greach 2011
Engrandeciendo Grails con MongoDB

Published in: Technology, Business
2 Comments
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
1,078
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
7
Comments
2
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • * En la pregunta final, la estrategia de acceso a datos se refiere a si quieres un lenguaje de alto nivel para hacer consultas, tipo SQL, o te sientes mejor trabajando a bajo nivel, con Map/Reduce o incluso operaciones sobre colecciones\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • * Mencionar el uso de Spring Datastore como API por debajo de la integración de Grails con NoSQL\n* Recomendar no usar GORM; sólo ‘embedded’ cuando se necesite, pero el resto propiedades de clase normales (generan un DBRef)\n
  • * TRANSACCIONALIDAD --> Consiste en mantener una lista de cambios pendientes que no se mandan realmente a MongoDB hasta que no se hace el flush. Sin embargo, no solucionan la atomicidad del lado de MongoDB en el caso de varias operaciones. Por ejemplo, transferencias entre cuentas de dos bancos\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • * Hacer notar que no se puede obtener la colección de Detalles de un Maestro ordenada, ya que la colección del Maestro simplemente tiene las referencias --> Workaround: definir ‘detalles’ en Maestro como una Lista, de forma que se guarde ordenada en MongoDB\n* Demostrar que si cambio el hasMany por un simple List<Detalle> detalles, no funciona porque MongoDB no sabe cómo convertir un Detalle a BSON (habría que usar un ‘Custom Type’ - ver documentación del plugin)\n* Comentar que más adelante veremos el tema de los índices para optimizar las búsquedas\n
  • * Matizar que la colección embebida tiene el “_embeddedClassName” para que Grails sepa cómo transformar el BSON de vuelta a un ‘detalle’\n* Fijarse en que al haber usado una colección de tipo List, los ‘detalles’ están ordenados\n* Comentar que por defecto vuelve a guardar la colección entera cuando añadimos un elemento, con lo que quizás sería mucho más óptimo usar la API de bajo nivel y hacer un $push\n
  • * Comentar que el nombre del Detalle es su identificador ahora, pero lo ideal sería crearle uno realmente único (por si permite nombres duplicados - por ejemplo, los artículos de una factura)\n
  • * El ejemplo típico de usar M:1 para definir una 1:M sería el de Factura y Artículos --> Factura.getArticulos() { Articulo.findAllByFactura(this) }\n* Comentar que se miren los Trees como diseño embebido en relaciones estrictas de padre/hijo\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • * Queremos buscar los detalles cuyo maestro sea “Maestro1”\n* Notar que el plugin hace la query contra el $id, no contra la referencia, con lo que la indexación definida como constraint en la clase no sirve de nada\n
  • * Queremos buscar los detalles cuyo maestro sea “Maestro1”\n* Notar que el plugin hace la query contra el $id, no contra la referencia, con lo que la indexación definida como constraint en la clase no sirve de nada\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • * Explicar que al estar embebido el Detalle, se recupera la colección contenedora y entonces se busca el Detalle específico porque puede tener otros campos de los cuales queremos saber su valor\n
  • * Explicar que al estar embebido el Detalle, se recupera la colección contenedora y entonces se busca el Detalle específico porque puede tener otros campos de los cuales queremos saber su valor\n
  • * Explicar que al estar embebido el Detalle, se recupera la colección contenedora y entonces se busca el Detalle específico porque puede tener otros campos de los cuales queremos saber su valor\n
  • * Explicar que al estar embebido el Detalle, se recupera la colección contenedora y entonces se busca el Detalle específico porque puede tener otros campos de los cuales queremos saber su valor\n
  • * Explicar que al estar embebido el Detalle, se recupera la colección contenedora y entonces se busca el Detalle específico porque puede tener otros campos de los cuales queremos saber su valor\n
  • * Comentar que hay dos formas de modelar esto: la primera es la que se muestra aquí, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripción de Articulo\n* Destacar el hecho de usar el ‘collect’ para recuperar los objetos Articulos como tal, ya que en Factura sólo tenemos una parte del Articulo y queremos ver todas las características de todos los artículos\n
  • * Comentar que hay dos formas de modelar esto: la primera es la que se muestra aquí, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripción de Articulo\n* Destacar el hecho de usar el ‘collect’ para recuperar los objetos Articulos como tal, ya que en Factura sólo tenemos una parte del Articulo y queremos ver todas las características de todos los artículos\n
  • * Comentar que hay dos formas de modelar esto: la primera es la que se muestra aquí, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripción de Articulo\n* Destacar el hecho de usar el ‘collect’ para recuperar los objetos Articulos como tal, ya que en Factura sólo tenemos una parte del Articulo y queremos ver todas las características de todos los artículos\n
  • * Comentar que hay dos formas de modelar esto: la primera es la que se muestra aquí, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripción de Articulo\n* Destacar el hecho de usar el ‘collect’ para recuperar los objetos Articulos como tal, ya que en Factura sólo tenemos una parte del Articulo y queremos ver todas las características de todos los artículos\n
  • * Comentar que hay dos formas de modelar esto: la primera es la que se muestra aquí, donde embebemos parte del Articulo (codigo, descripcion) en la Factura, de forma que podemos buscar directamente en la Factura por descripción de Articulo\n* Destacar el hecho de usar el ‘collect’ para recuperar los objetos Articulos como tal, ya que en Factura sólo tenemos una parte del Articulo y queremos ver todas las características de todos los artículos\n
  • * La query busca las facturas donde todavía no hay cobros, es decir, las facturas sin cobrar.\n
  • * La query busca las facturas donde todavía no hay cobros, es decir, las facturas sin cobrar.\n
  • * Rendimiento penalizado: se ejecuta el código JS para cada uno de los objetos escaneados.\n* Comentar el db.eval() para ‘server side processing’\n
  • * Rendimiento penalizado: se ejecuta el código JS para cada uno de los objetos escaneados.\n* Comentar el db.eval() para ‘server side processing’\n
  • * Notar el uso de la API en DBRef, con especial énfasis en el segundo parámetro, que puede dar lugar a confusión\n
  • * Notar el uso de la API en DBRef, con especial énfasis en el segundo parámetro, que puede dar lugar a confusión\n
  • * Comentar que el Map/Reduce no tiene mucho sentido implementarlo en el plugin\n* Explicar que Map/Reduce es una tecnología mediante la cual se puede agrupar información de manera óptima en paralelo y que viene de las BigTable de Google\n
  • * Comentar que es una alternativa rápida al Map/Reduce, pero que no funciona en configuraciones ‘sharded’\n
  • * Comentar que es una alternativa rápida al Map/Reduce, pero que no funciona en configuraciones ‘sharded’\n
  • * No permite ‘sharding’ debido sobre todo al tema de los ‘write lock’\n* Comentar que podemos almacenar la definición de la función JS mediante --> db.system.js.insert({_id: “nombre”, value: function(x) { return x * x; }});\n
  • * No permite ‘sharding’ debido sobre todo al tema de los ‘write lock’\n* Comentar que podemos almacenar la definición de la función JS mediante --> db.system.js.insert({_id: “nombre”, value: function(x) { return x * x; }});\n
  • * No permite ‘sharding’ debido sobre todo al tema de los ‘write lock’\n* Comentar que podemos almacenar la definición de la función JS mediante --> db.system.js.insert({_id: “nombre”, value: function(x) { return x * x; }});\n
  • \n
  • \n
  • Greach 2011 - Engrandeciendo Grails con MongoDB

    1. 1. Welcome to the Jungle! Dav Glass, Hacker @davglassMonday, November 7, 2011
    2. 2. Welcome to the Jungle - GnRMonday, November 7, 2011
    3. 3. Welcome to the Jungle - GnR "Imagine youre hearing awesome music here, because imagining it is a lot cheaper than getting licenses to actually play it." @yaypieMonday, November 7, 2011
    4. 4. Welcome to YUIConf 2011Monday, November 7, 2011
    5. 5. Welcome to YUIConf 2011Monday, November 7, 2011
    6. 6. Welcome to YUIConf 2011 @yuilibrary #yuiconfMonday, November 7, 2011
    7. 7. Welcome to YUIConf 2011 @yuilibrary #yuiconf yuiconf yuiconf2011Monday, November 7, 2011
    8. 8. Conference Events Today 9:00 - 5:30 - Talks 12:00 - 1:00 - Lunch 5:30 - 6:30 - Dinner 6:30 - 8:30 -Douglas Crockford Tomorrow 9:00 - 5:30 - Talks 12:00 - 1:00 - LunchMonday, November 7, 2011
    9. 9. YUI Conf brought to you by: Lunch both days provided by: Yahoo! Mail Dinner tonight provided by:Monday, November 7, 2011
    10. 10. Special Shout OutsMonday, November 7, 2011
    11. 11. Special Shout OutsMonday, November 7, 2011
    12. 12. Special Shout OutsMonday, November 7, 2011
    13. 13. Special Shout OutsMonday, November 7, 2011
    14. 14. Special Shout OutsMonday, November 7, 2011
    15. 15. Back in Black - AC/DCMonday, November 7, 2011
    16. 16. Back in Black - AC/DC "Imagine youre hearing awesome music here, because imagining it is a lot cheaper than getting licenses to actually play it." @yaypieMonday, November 7, 2011
    17. 17. New MembersMonday, November 7, 2011
    18. 18. New MembersMonday, November 7, 2011
    19. 19. New MembersMonday, November 7, 2011
    20. 20. Gallery GrowthMonday, November 7, 2011
    21. 21. Gallery GrowthMonday, November 7, 2011
    22. 22. Gallery Growth Last YUIConf: 206 modulesMonday, November 7, 2011
    23. 23. Gallery Growth Last YUIConf: 206 modules Today: 350 modulesMonday, November 7, 2011
    24. 24. Gallery Growth Last YUIConf: 206 modules Today: 350 modules New CLA’s: 76Monday, November 7, 2011
    25. 25. Top Gallery ContributorsMonday, November 7, 2011
    26. 26. Top Gallery Contributors AlloyUI - Liferay 70 modulesMonday, November 7, 2011
    27. 27. Top Gallery ContributorsMonday, November 7, 2011
    28. 28. Top Gallery Contributors Anthony Pipkin 29 modulesMonday, November 7, 2011
    29. 29. Top Gallery ContributorsMonday, November 7, 2011
    30. 30. Top Gallery Contributors John Lindal 26 modulesMonday, November 7, 2011
    31. 31. Top Gallery ContributorsMonday, November 7, 2011
    32. 32. Top Gallery Contributors Luke Smith 17 modulesMonday, November 7, 2011
    33. 33. Top Gallery ContributorsMonday, November 7, 2011
    34. 34. Top Gallery Contributors Caridy Patino 12 modulesMonday, November 7, 2011
    35. 35. Forum GrowthMonday, November 7, 2011
    36. 36. Forum GrowthMonday, November 7, 2011
    37. 37. Forum GrowthMonday, November 7, 2011
    38. 38. Forum Growth +25,000 posts +10,000 usersMonday, November 7, 2011
    39. 39. New ComponentsMonday, November 7, 2011
    40. 40. New Components ✦ App Framework ✦ Graphics ✦ Autocomplete ✦ Highlight ✦ Calendar ✦ Panel ✦ Charts ✦ Resize* ✦ DataTable ✦ Scrollview ✦ Dial ✦ Text ✦ EscapeMonday, November 7, 2011
    41. 41. UpdatesMonday, November 7, 2011
    42. 42. Updates ✦ Core System ✦ Loader Refactor ✦ GBS UpdatesMonday, November 7, 2011
    43. 43. GBS UpdateMonday, November 7, 2011
    44. 44. GBS Update As of our last update (7/12/11), weve decoupled the Graded Browser Support development strategy from the testing methodology. The "Browser Test Baseline" is a representative set of browsers chosen to provide the maximum testing coverage over the minimal testing surface.Monday, November 7, 2011
    45. 45. Today - Smashing PumpkinsMonday, November 7, 2011
    46. 46. Today - Smashing Pumpkins "Imagine youre hearing awesome music here, because imagining it is a lot cheaper than getting licenses to actually play it." @yaypieMonday, November 7, 2011
    47. 47. Faster ReleasesMonday, November 7, 2011
    48. 48. Faster ReleasesMonday, November 7, 2011
    49. 49. Faster ReleasesMonday, November 7, 2011
    50. 50. Faster Releases ✦ Sprint based releases ✦ More PR releases ✦ Better scheduling ✦ More Community Involvement ✦ Schedule Announcing ✦ Github IntegrationMonday, November 7, 2011
    51. 51. Github IntegrationMonday, November 7, 2011
    52. 52. Github IntegrationMonday, November 7, 2011
    53. 53. Github IntegrationMonday, November 7, 2011
    54. 54. Github IntegrationMonday, November 7, 2011
    55. 55. New ImageMonday, November 7, 2011
    56. 56. New ImageMonday, November 7, 2011
    57. 57. New ImageMonday, November 7, 2011
    58. 58. New ImageMonday, November 7, 2011
    59. 59. New ImageMonday, November 7, 2011
    60. 60. New ImageMonday, November 7, 2011
    61. 61. New ImageMonday, November 7, 2011
    62. 62. New ImageMonday, November 7, 2011
    63. 63. New ImageMonday, November 7, 2011
    64. 64. New ImageMonday, November 7, 2011
    65. 65. New ImageMonday, November 7, 2011
    66. 66. New ImageMonday, November 7, 2011
    67. 67. New ImageMonday, November 7, 2011
    68. 68. Livin on the Edge - AerosmithMonday, November 7, 2011
    69. 69. Livin on the Edge - Aerosmith "Imagine youre hearing awesome music here, because imagining it is a lot cheaper than getting licenses to actually play it." @yaypieMonday, November 7, 2011
    70. 70. NodeJSMonday, November 7, 2011
    71. 71. NodeJS ✦ First class environment ✦ Formal support in Y.UA ✦ Conditional Loading ✦ TestedMonday, November 7, 2011
    72. 72. NodeJSMonday, November 7, 2011
    73. 73. NodeJSMonday, November 7, 2011
    74. 74. NodeJSMonday, November 7, 2011
    75. 75. NodeJSMonday, November 7, 2011
    76. 76. Component Updates In 3.5.0, DataTable will be my primary focus. It will undergo an architectural overhaul, with plans to move it to a Model/ ModelList + View based internal structure, which will allow more flexibility in rendering and data interchange with server bound data.Monday, November 7, 2011
    77. 77. Component Updates ✦ Core ✦ Bidi/RTL/Skins ✦ Get ✦ Loader ✦ DataTable In 3.5.0, DataTable will be my primary focus. It will undergo ✦ App Framework an architectural overhaul, with plans to move it to a Model/ ModelList + View based internal structure, which will allow more flexibility in rendering and data interchange with server bound data.Monday, November 7, 2011
    78. 78. New ComponentsMonday, November 7, 2011
    79. 79. New Components ✦ HandlebarsMonday, November 7, 2011
    80. 80. New Components ✦ Handlebars ✦ PjaxMonday, November 7, 2011
    81. 81. New Components ✦ Handlebars ✦ Pjax ✦ Test ConsoleMonday, November 7, 2011
    82. 82. New Components ✦ Handlebars ✦ Pjax ✦ Test Console ✦ TreeViewMonday, November 7, 2011
    83. 83. New Components ✦ Handlebars ✦ Pjax ✦ Test Console ✦ TreeView ✦ Widget LiteMonday, November 7, 2011
    84. 84. New Components ✦ Handlebars ✦ Pjax ✦ Test Console ✦ TreeView ✦ Widget Lite ✦ Uploader in HTML5Monday, November 7, 2011
    85. 85. New Components ✦ Handlebars ✦ Pjax ✦ Test Console ✦ TreeView ✦ Widget Lite ✦ Uploader in HTML5 ✦ Button WidgetMonday, November 7, 2011
    86. 86. New Components ✦ Handlebars ✦ Pjax ✦ Test Console ✦ TreeView ✦ Widget Lite ✦ Uploader in HTML5 ✦ Button Widget ✦ Windowing ComponentsMonday, November 7, 2011
    87. 87. New Components ✦ Handlebars ✦ Pjax ✦ Test Console ✦ TreeView ✦ Widget Lite ✦ Uploader in HTML5 ✦ Button Widget ✦ Windowing Components ✦ TooltipMonday, November 7, 2011
    88. 88. New Components ✦ Handlebars ✦ Pjax ✦ Test Console ✦ TreeView ✦ Widget Lite ✦ Uploader in HTML5 ✦ Button Widget ✦ Windowing Components ✦ Tooltip ✦ DialogMonday, November 7, 2011
    89. 89. New Components ✦ Handlebars ✦ Pjax ✦ Test Console ✦ TreeView ✦ Widget Lite ✦ Uploader in HTML5 ✦ Button Widget ✦ Windowing Components ✦ Tooltip ✦ Dialog ✦ PointerMonday, November 7, 2011
    90. 90. The Book of YUI 3 (not the real title)Monday, November 7, 2011
    91. 91. The YUI 3 Cookbook Evan Goer goer@yahoo-inc.com The YUI 3 Cookbook contains 150 recipes. Each recipe includes a self-contained working example. Most examples are deliberately very short, but have an extensive discussion.Monday, November 7, 2011
    92. 92. The YUI 3 Cookbook Evan Goer goer@yahoo-inc.com http://goer.org/YUI To download a free sample pack of three PDF chapters. These chapters are raw and contain typos, red TODOs, and errors. Youve been warned!Monday, November 7, 2011
    93. 93. YUI Easy Testing Interface - YetiMonday, November 7, 2011
    94. 94. YUI Easy Testing Interface - Yeti Video Here: www.youtube.com/watch?v=85Q06z7_B0wMonday, November 7, 2011
    95. 95. Talk Dirty to Me - PoisonMonday, November 7, 2011
    96. 96. Talk Dirty to Me - Poison "Imagine youre hearing awesome music here, because imagining it is a lot cheaper than getting licenses to actually play it." @yaypieMonday, November 7, 2011
    97. 97. Component TalksMonday, November 7, 2011
    98. 98. Component Talks Allen Rabinovich @allenrMonday, November 7, 2011
    99. 99. Component Talks Allen Rabinovich @allenr Architecting and building a module from scratch. Lessons in careful planning, optimization and feature- setting that go into module design.Monday, November 7, 2011
    100. 100. Component Talks Jeff ConniffMonday, November 7, 2011
    101. 101. Component Talks Jeff Conniff The Dial widget is a circular value input control. Its like a real-world, analog, volume control dial, but with much finer UI control.Monday, November 7, 2011
    102. 102. Component Talks Tripp BridgesMonday, November 7, 2011
    103. 103. Component Talks Tripp Bridges The API and feature set. Including some exciting demonstrations from Jeff ConniffMonday, November 7, 2011
    104. 104. Component Talks Eric Ferraiuolo @ericfMonday, November 7, 2011
    105. 105. Component Talks Eric Ferraiuolo @ericf YUI App Framework: Youve Been Wanting ThisMonday, November 7, 2011
    106. 106. Component Talks Luke Smith @ls_nMonday, November 7, 2011
    107. 107. Component Talks Luke Smith @ls_n From one, many; from many, one — class inheritance and composition in YUIMonday, November 7, 2011
    108. 108. Component Talks Derek Gathright @derekMonday, November 7, 2011
    109. 109. Component Talks Derek Gathright @derek Why YUI?Monday, November 7, 2011
    110. 110. Notable Talks YQLMonday, November 7, 2011
    111. 111. Notable Talks YQLMonday, November 7, 2011
    112. 112. Notable Talks YQLMonday, November 7, 2011
    113. 113. Notable Talks YQLMonday, November 7, 2011
    114. 114. Community TalksMonday, November 7, 2011
    115. 115. Community Talks Jeff Craig @foxxtrot Demystifying Loader: Advanced Module ConfigurationMonday, November 7, 2011
    116. 116. Community Talks Ryan Cannon @rcanine There is no off-season: NFL.coms move to YUIMonday, November 7, 2011
    117. 117. Community Talks Jeff Pihach @FromAnEgg YUI For DesignersMonday, November 7, 2011
    118. 118. Community Talks Jeff Pihach @FromAnEgg aka Hatch on irc YUI For DesignersMonday, November 7, 2011
    119. 119. Community Talks Pat Cavit @tivac Automating Website OptimizationMonday, November 7, 2011
    120. 120. Community Talks Eduardo Lundgren Introducing AlloyUI DiagramBuilderMonday, November 7, 2011
    121. 121. Community Talks Andrew Wooldridge @triptych YUI Hidden GemsMonday, November 7, 2011
    122. 122. Closing Time - SemisonicMonday, November 7, 2011
    123. 123. Closing Time - Semisonic "Imagine youre hearing awesome music here, because imagining it is a lot cheaper than getting licenses to actually play it." @yaypieMonday, November 7, 2011
    124. 124. Images All images used are copyright of the original publisher. Album artwork pulled from Wikipedia. Darth Vader image from bootspring.com Mobile device images from apple.com, google.com and motorola.com Harley image from harley- davidson.com Github images from github.comMonday, November 7, 2011
    125. 125. Enjoy The Conference Dav Glass, Hacker @davglassMonday, November 7, 2011

    ×