Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Защо MongoDB?

2,338 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Защо MongoDB?

  1. 1. Защо ? Стефан Кънев http://skanev.com/ @skanev OpenFest 21 Ноември 2010 София Monday, November 22, 2010
  2. 2. Аз съм Стефан, приятно ми е. Monday, November 22, 2010
  3. 3. програмист Monday, November 22, 2010
  4. 4. Monday, November 22, 2010
  5. 5. Monday, November 22, 2010
  6. 6. Monday, November 22, 2010
  7. 7. http://skanev.com/ Monday, November 22, 2010
  8. 8. особен стил Monday, November 22, 2010
  9. 9. говоря бързо Monday, November 22, 2010
  10. 10. ръкомахам Monday, November 22, 2010
  11. 11. “п.с.  това  момче  отдясно  рапър  ли  е  ;)  ?” OpenFest 2009 Monday, November 22, 2010
  12. 12. много слайдове Monday, November 22, 2010
  13. 13. 210 Monday, November 22, 2010
  14. 14. нещо ново! Monday, November 22, 2010
  15. 15. Мариян Monday, November 22, 2010
  16. 16. Аз ползвам Windows 7 OpenFest 2009 Monday, November 22, 2010
  17. 17. Аз ползвам Visual Source Safe P2P 2010 Monday, November 22, 2010
  18. 18. коварно: тази година той говори последен Monday, November 22, 2010
  19. 19. “Класически” Мариян Monday, November 22, 2010
  20. 20. ала Salvador Dali Monday, November 22, 2010
  21. 21. Friendly Mutton Chops Monday, November 22, 2010
  22. 22. The Real Stuff Monday, November 22, 2010
  23. 23. Monday, November 22, 2010
  24. 24. Имате въпроси? Monday, November 22, 2010
  25. 25. 1. Проблеми на релационните бази от данни 2. MongoDB отдалеч 3. Работа с MongoDB 4. Предимства и недостатъци 5. Някои приложения 6. MongoDB в живия живот Monday, November 22, 2010
  26. 26. Disclaimer Релационните бази работят, доказани са и имат ред успешни приложения. Ако се захващате с алтернативни сте в експериментална територия и трябва да сте готови да се оправяте сами. Monday, November 22, 2010
  27. 27. 1. Проблеми на релационните бази от данни 2. MongoDB отдалеч 3. Работа с MongoDB 4. Предимства и недостатъци 5. Някои приложения 6. MongoDB в живия живот Monday, November 22, 2010
  28. 28. Релационните  бази  са  сложни!DDL & DML нормализация индекси inner/outer join транзакции/изолация 6NF денормализация Monday, November 22, 2010
  29. 29. скубете си косата... ...или сте си оскубали косата Monday, November 22, 2010
  30. 30. R MO Monday, November 22, 2010
  31. 31. bject-to- elational apperR MO Monday, November 22, 2010
  32. 32. клас таблица Monday, November 22, 2010
  33. 33. не съвсем съвместими Monday, November 22, 2010
  34. 34. ON DELETE CASCASE vs. callback в кода Monday, November 22, 2010
  35. 35. несъвместимост между типовете (например дати) Monday, November 22, 2010
  36. 36. в кода vs. в базата Monday, November 22, 2010
  37. 37. OOP RDBMS ORM В “думите” на господин Вен... ...само общата част от двата свята Monday, November 22, 2010
  38. 38. лош програмен модел Monday, November 22, 2010
  39. 39. Edgar Codd Monday, November 22, 2010
  40. 40. Релационен модел Monday, November 22, 2010
  41. 41. Релационен модел Monday, November 22, 2010
  42. 42. теория Monday, November 22, 2010
  43. 43. теория  ≠  практика Monday, November 22, 2010
  44. 44. на  теория: Поставяте  данните  в  релации, пишете  заявка  и  системата автоматично  намира  как  да  я изпълни  оптимално. Monday, November 22, 2010
  45. 45. на  практика: Уф,  ‘що  не  ползва  тоя  иднекс? Може  би  трябва  да   денормализирам  тази  таблица...   Monday, November 22, 2010
  46. 46. Monday, November 22, 2010
  47. 47. SQL  е  ужасен Monday, November 22, 2010
  48. 48. Don Chamberlin говори за SQL: Monday, November 22, 2010
  49. 49. “Ray  and  I  thought  that  we  were   developing  a  language  that  would  be  used   mainly  by  ‘casual  users’...” Monday, November 22, 2010
  50. 50. “...we  were  trying  to  make  databases   accessible  to  a  new  class  of  users  who   were  not  trained  computer  scientists...” Monday, November 22, 2010
  51. 51. “We  expected  to  see  SQL  used  directly  by   financial  analysts,  urban  planners,  and   other  professionals  who  needed  access  to   data  but  did  not  want  to  write  computer   programs” Monday, November 22, 2010
  52. 52. “In  fact,  over  the  years  a  great  deal  of  SQL   code  has  been  generated  by  automatic   tools,  a  development  that  was  not   foreseen  in  the  early  days.” Monday, November 22, 2010
  53. 53. Monday, November 22, 2010
  54. 54. Monday, November 22, 2010
  55. 55. концептуални  проблеми Monday, November 22, 2010
  56. 56. не  твърдя: “Релационните  бази  са   неизползвамеви  за  повечето   приложения” Monday, November 22, 2010
  57. 57. твърдя: “Релационните  бази  са   скъпи  за  повечето   приложения” Monday, November 22, 2010
  58. 58. Monday, November 22, 2010
  59. 59. NoSQL Monday, November 22, 2010
  60. 60. Scientists have discovered that 83% of all projects are better of with MongoDB.True story. Barney Stinson, Programmer Monday, November 22, 2010
  61. 61. 1. Проблеми на релационните бази от данни 2. MongoDB отдалеч 3. Работа с MongoDB 4. Предимства и недостатъци 5. Някои приложения 6. MongoDB в живия живот Monday, November 22, 2010
  62. 62. Monday, November 22, 2010
  63. 63. документно-­‐ориентирана Monday, November 22, 2010
  64. 64. scalability,  performances, tons  of  features Monday, November 22, 2010
  65. 65. OMG,  индекси! (ако си мислите, че това не е проблем, пробвайте CouchDB) Monday, November 22, 2010
  66. 66. производителност функционалност • memcached • key/value • RDBMS • MongoDB (според Mike Dirolf, един от авторите) Monday, November 22, 2010
  67. 67. “MyISAM  on  meth” Monday, November 22, 2010
  68. 68. бази  ›  колекции  ›  документи Monday, November 22, 2010
  69. 69. колекции  ≈  таблици Monday, November 22, 2010
  70. 70. документите  са  JSON* * с уговорки Monday, November 22, 2010
  71. 71. { "title": "Haskell rocks", "text": "Today I played with...", "tags": ["programming", "haskell"], "author": { "name": "Stefan Kanev", "email": "stefan@example.org" } "views": 42 } Блог пост Monday, November 22, 2010
  72. 72. { "title": "Haskell rocks", "body": "Today I played with...", "notes": "Monads in Go?" } { "title": "Io is awesome", "tags": ['io', 'awesome'], "notes": 5 } Гъвкава схема различни полета различни типове Monday, November 22, 2010
  73. 73. Типове • нищо: null • булева стойност: true, false • 32bit/64bit цели числа: 42 • 64bit float: 3.1415 • низове: “chunky bacon” • дати: new Date() • регулярен израз: /foobar/i • код: function(x) { return x * x; } • масиви: [2, 3, 5, 7, 11] • обекти/документи: {foo: 1, bar: 2} Monday, November 22, 2010
  74. 74. документите  всъщонст  са  BSON* * бърз двоичен формат, MongoDB измислица Monday, November 22, 2010
  75. 75. JavaScript  конзола Monday, November 22, 2010
  76. 76. репликация Monday, November 22, 2010
  77. 77. master-­‐slave Monday, November 22, 2010
  78. 78. replica  set Monday, November 22, 2010
  79. 79. auto-­‐sharding Monday, November 22, 2010
  80. 80. 1. Проблеми на релационните бази от данни 2. MongoDB отдалеч 3. Работа с MongoDB 4. Предимства и недостатъци 5. Някои приложения 6. MongoDB в живия живот Monday, November 22, 2010
  81. 81. { "title": "Haskell rocks", "author": "skanev", "text": "Today I played with...", "tags": ["programming", "haskell"], "views": 42 } Примерен документ Monday, November 22, 2010
  82. 82. > db.posts.insert({ "title": "Haskell rocks", "author": "skanev", "text": "Today I played with...", "tags": ["programming", "haskell"], "views": 42 }) Добавяне глобална променлива в конзолата за текущата база име на колекцията команда Monday, November 22, 2010
  83. 83. > db.posts.find() { "_id" : ObjectId("4ce653278f4f936035707875"), "title" : "Haskell rocks", "author" : "skanev", "text" : "Today I played with...", "tags" : [ "programming", "haskell" ], "views" : 42 } ...и резултатът Monday, November 22, 2010
  84. 84. _id • специален ключ, • всеки документ го има • уникален е в рамките на колекция • какъвто и да е тип Monday, November 22, 2010
  85. 85. > db.posts.update({title: "Haskell rocks"}, { title: "Haskell is cool", author: "skanev", body: "Today I played with..." }) Обновяване на документ Monday, November 22, 2010
  86. 86. > db.posts.findOne() { "_id" : ObjectId("4ce653278f4f936035707875"), "title" : "Haskell is cool", "author" : "skanev", "body" : "Today I played with..." } След записа tags и views ги няма Monday, November 22, 2010
  87. 87. > db.posts.update({_id:"4ce653278f4f936035707875"},{ title: "Haskell is cool", author: "skanev", body: "Today I played with..." }) Обикновено ползвате _id Monday, November 22, 2010
  88. 88. db.posts.update( {'title': 'Haskell rocks'}, {'$set': {'title': 'Haskell is weird'}} ) Промяна на единично поле Monday, November 22, 2010
  89. 89. Модификатори ($set) • Не са имена на полета • Значат нещо специално за Mongo • Започват с $ • Prefix-а може да се промени при клиента Monday, November 22, 2010
  90. 90. инкрементиране на брояч Monday, November 22, 2010
  91. 91. var views = db.posts. findOne({title: "Haskell rocks"}).views db.posts.update( {'title': 'Haskell rocks'}, {'$set': {'views': views + 1}} ) Може така... ...но има проблеми Monday, November 22, 2010
  92. 92. ...но по-добрият вариант е db.posts.update( {'title': 'Haskell rocks'}, {'$inc': {'views': 1}} ) Monday, November 22, 2010
  93. 93. работа с масиви Monday, November 22, 2010
  94. 94. { "title": "Haskell rocks", "tags": ["weird", "haskell"], } Документ Monday, November 22, 2010
  95. 95. Добавяне на таг db.posts.update( {'title': 'Haskell rocks'}, {'$push': {'tags': 'fun'}} ) > db.posts.findOne() { "_id" : ObjectId("4ce7acf86fe4256367d98353"), "tags" : ["weird", "haskell", "fun"], "title" : "Haskell rocks" } Monday, November 22, 2010
  96. 96. Или пък db.posts.update( {'title': 'Haskell rocks'}, {'$addToSet': {'tags': 'weird'}} ) Monday, November 22, 2010
  97. 97. вложени документи Monday, November 22, 2010
  98. 98. { "title": "Haskell rocks", "author": { "name": "Stefan Kanev", "email": "stefan.kanev@example.org" } } Документът... Monday, November 22, 2010
  99. 99. ...и промяната db.posts.update( {"author.name": "Stefan Kanev"}, {"$set": {"author.email": "skanev@example.com"}} ) Monday, November 22, 2010
  100. 100. заявки за търсене Monday, November 22, 2010
  101. 101. db.posts.find({"author": "skanev"}) Съвпадение по поле Monday, November 22, 2010
  102. 102. Само определени полета db.posts.find( {"author": "skanev"}, {"title": 1, "tags": 1} ) Monday, November 22, 2010
  103. 103. Сравнения db.posts.find({"views": {"$gt": 1000}}) db.posts.find({"views": {"$gt": 1000, "$lt": 2000}}) Monday, November 22, 2010
  104. 104. $in db.posts.find({ "author": {"$in": ['skanev', 'stefan', 'kanev']} }) Monday, November 22, 2010
  105. 105. Дизюнкция (или на прост български: OR) db.posts.find({ "$or": [ {"author": "skanev"}, {"views": {"$gte": 1000}} ] }) Monday, November 22, 2010
  106. 106. Търсене в масиви db.posts.find({"tags": "haskell"}) db.posts.find({ "tags": {"$all": ["programming", "haskell"]} }) db.posts.find({"tags": {"$size": 2}}) Monday, November 22, 2010
  107. 107. Вложени документи db.people.find({ "name.first": "Stefan", "name.last": "Kanev" }) Monday, November 22, 2010
  108. 108. има и още... $gt $lt $gte $lte $ne $all $in $nin $not $mod $size $exists $type $elemMatch Monday, November 22, 2010
  109. 109. $where db.people.find({ "$where": function() { return this.age % 2 == 0; } }) Monday, November 22, 2010
  110. 110. MapReduce Monday, November 22, 2010
  111. 111. GridFS Monday, November 22, 2010
  112. 112. server-­‐side  javascript Monday, November 22, 2010
  113. 113. 1. Проблеми на релационните бази от данни 2. MongoDB отдалеч 3. Работа с MongoDB 4. Предимства и недостатъци 5. Някои приложения 6. MongoDB в живия живот Monday, November 22, 2010
  114. 114. Corey Haines Monday, November 22, 2010
  115. 115. #positivember Monday, November 22, 2010
  116. 116. Хубавото в MongoDB Monday, November 22, 2010
  117. 117. бързо Monday, November 22, 2010
  118. 118. horizontal  scalability Monday, November 22, 2010
  119. 119. feature-­‐rich Monday, November 22, 2010
  120. 120. Лошото в MongoDB Monday, November 22, 2010
  121. 121. администрация  ;( Monday, November 22, 2010
  122. 122. memory  mapped-­‐files Monday, November 22, 2010
  123. 123. особености  при  back-­‐up Monday, November 22, 2010
  124. 124. no  single-­‐server  durability Monday, November 22, 2010
  125. 125. много  инстанции  на  mongo Monday, November 22, 2010
  126. 126. сега  е  #positivember,  а всичко  това  е  много  негативно; затова  мислете  така: Monday, November 22, 2010
  127. 127. улеснява  програмирането  за   сметка  на  системната   администрация Monday, November 22, 2010
  128. 128. балансира  сложността  между   програмистите  и  админите Monday, November 22, 2010
  129. 129. намира  работа  на  админите Monday, November 22, 2010
  130. 130. кара  администраторите  да  се   чустват  полезни Monday, November 22, 2010
  131. 131. мизантропи и социопати пълноценни членове на обществото Системни администратори принос, самочувствие Monday, November 22, 2010
  132. 132. MongoDB  е  полезно  за   админите Monday, November 22, 2010
  133. 133. Monday, November 22, 2010
  134. 134. ...но  сериозно... Monday, November 22, 2010
  135. 135. 1. Проблеми на релационните бази от данни 2. MongoDB отдалеч 3. Работа с MongoDB 4. Предимства и недостатъци 5. Някои приложения 6. MongoDB в живия живот Monday, November 22, 2010
  136. 136. три проблема, които не са директно с производителност Monday, November 22, 2010
  137. 137. 1 Monday, November 22, 2010
  138. 138. MyISAM 120  000  000  записа 200  GB  таблица Monday, November 22, 2010
  139. 139. ...искам  да  добавя  нова  колона Monday, November 22, 2010
  140. 140. ALTER TABLE articles около  20  часа Monday, November 22, 2010
  141. 141. спъва  развитието  на  продукта прави  deploy-­‐а  ръчен никой  не  иска  да  смъкне  сайта Monday, November 22, 2010
  142. 142. без заключване на таблици Monday, November 22, 2010
  143. 143. 1. променяме кода да работи с двата варианта 2. времеемка миграция, която не заключва нищо 3. премахваме поддръжката за стария вариант Рецепта Monday, November 22, 2010
  144. 144. 2 Monday, November 22, 2010
  145. 145. импортираме  от  legacy  база... ...от  таблица  с  188  колони Monday, November 22, 2010
  146. 146. Monday, November 22, 2010
  147. 147. orgnr skatter_AB soliditet_AB sumomstillg_KONC roresfdisp_KONC antalanst_KONC_X lan aretsres_AB kaslikv_AB sparrkonto_KONC omsattfor_KONC oms_KONC_X kommun likvmed_AB kasflfror_AB maskoinv_KONC forsumtillg_KONC resfbok_KONC_X bolform kundford_AB avkegkap_AB sumanltillg_KONC regdatum_AB aretsres_KONC_X ftgnamn varulager_AB avktotkap_AB sumtillg_KONC styrelse_AB sumtillg_KONC_X copers ovromstillg_AB lonekanst_AB levskuld_KONC histnamn_AB aktiekap_KONC_X utdadress sumomstillg_AB roresfdisp_AB sumkortfsk_KONC firmteck_AB sumegkap_KONC_X postnr sparrkonto_AB omsattfor_AB sumlangfsk_KONC bolord_AB netrespoms_KONC_X postort maskoinv_AB forsumtillg_AB obesres_KONC regdatum_HB vinstmarg_KONC_X riktnr sumanltillg_AB bokslut_start_KONC aktiekap_KONC styrelse_HB omsanst_KONC_X abbnr sumtillg_AB bokslut_slut_KONC ovrbundkap_KONC histnamn_HB soliditet_KONC_X verkstat levskuld_AB aktieutd_KONC obunegkap_KONC firmteck_HB kaslikv_KONC_X aktivstat sumkortfsk_AB antalanst_KONC sumegkap_KONC bolord_HB avktotkap_KONC_X sni sumlangfsk_AB lonoers_KONC sumskegkap_KONC status_konk_HB lonekanst_KONC_X dkm_AB obesres_AB oms_KONC goodwill_KONC status_likv_HB omsattfor_KONC_X bokslut_start_AB aktiekap_AB resfavskr_KONC panter_KONC sekv_HB bolstatus bokslut_slut_AB ovrbundkap_AB avskr_KONC ansvar_KONC antalanst_AB_X styrelse_X aktieutd_AB obunegkap_AB reseavskr_KONC fastigheter_KONC oms_AB_X fbokstav antalanst_AB sumegkap_AB finint_KONC revanm_KONC resfbok_AB_X bolord_X lonoers_AB sumskegkap_AB finkostn_KONC ntstart_KONC aretsres_AB_X histnamn_X oms_AB goodwill_AB resefin_KONC ntslut_KONC sumtillg_AB_X regdatum_X resfavskr_AB panter_AB extordint_KONC resfavspoms_KONC aktiekap_AB_X koncern_X avskr_AB ansvar_AB extordkost_KONC netrespoms_KONC sumegkap_AB_X publikt_X reseavskr_AB fastigheter_AB resfbok_KONC vinstmarg_KONC netrespoms_AB_X kommun_X finint_AB revanm_AB boksldisp_KONC omsanst_KONC vinstmarg_AB_X senaste_AB finkostn_AB ntstart_AB skatter_KONC soliditet_KONC omsanst_AB_X senaste_KONC resefin_AB ntslut_AB aretsres_KONC kaslikv_KONC soliditet_AB_X skod extordint_AB resfavspoms_AB likvmed_KONC kasflfror_KONC kaslikv_AB_X tkod extordkost_AB netrespoms_AB kundford_KONC avkegkap_KONC avktotkap_AB_X datum resfbok_AB vinstmarg_AB varulager_KONC avktotkap_KONC lonekanst_AB_X forgnr boksldisp_AB omsanst_AB ovromstillg_KONC lonekanst_KONC omsattfor_AB_X antal_cfar antal_ort ort 188 колони Monday, November 22, 2010
  148. 148. 1 таблица, 1 ред ⇓ 7 таблици, 30 реда Monday, November 22, 2010
  149. 149. 1.  показваме  на  една  страница 2.  даваме  на  SOLR  за  иднексация Monday, November 22, 2010
  150. 150. 7 класа + 7 таблици = bloat Monday, November 22, 2010
  151. 151. по-­‐просто по-­‐бързо Monday, November 22, 2010
  152. 152. 3 Monday, November 22, 2010
  153. 153. клиент  с  кофти  изисквания Monday, November 22, 2010
  154. 154. “Ще  правим  магазин.  Искам  да   мога  да  добавям  нови  типове   продукти  и  да  променям   атрибутите  на  съществуващите,   както  и  да  има  търсене  по  тях” Monday, November 22, 2010
  155. 155. entity-­‐attribute-­‐value id key value 1 name hoodie 1 color blue 2 name shirt Monday, November 22, 2010
  156. 156. трудни  заявки губите  типове няма  индекси бавно Monday, November 22, 2010
  157. 157. сериализиран  обект json,  yaml,  pickle Monday, November 22, 2010
  158. 158. никакви  заявки никакви  индекси външен  софтуер Monday, November 22, 2010
  159. 159. Monday, November 22, 2010
  160. 160. 1. Проблеми на релационните бази от данни 2. MongoDB отдалеч 3. Работа с MongoDB 4. Предимства и недостатъци 5. Някои приложения 6. MongoDB в живия живот Monday, November 22, 2010
  161. 161. Monday, November 22, 2010
  162. 162. Monday, November 22, 2010
  163. 163. Monday, November 22, 2010
  164. 164. Въпроси Monday, November 22, 2010

×