Защо
?
Стефан Кънев
http://skanev.com/
@skanev
OpenFest
21 Ноември 2010
София
Monday, November 22, 2010
Аз съм Стефан,
приятно ми е.
Monday, November 22, 2010
програмист
Monday, November 22, 2010
Monday, November 22, 2010
Monday, November 22, 2010
Monday, November 22, 2010
http://skanev.com/
Monday, November 22, 2010
особен стил
Monday, November 22, 2010
говоря бързо
Monday, November 22, 2010
ръкомахам
Monday, November 22, 2010
“п.с.	
  това	
  момче	
  отдясно	
  рапър	
  ли	
  е	
  ;)	
  ?”
OpenFest 2009
Monday, November 22, 2010
много слайдове
Monday, November 22, 2010
210
Monday, November 22, 2010
нещо ново!
Monday, November 22, 2010
Мариян
Monday, November 22, 2010
Аз ползвам
Windows 7
OpenFest 2009
Monday, November 22, 2010
Аз ползвам
Visual Source Safe
P2P 2010
Monday, November 22, 2010
коварно: тази година той
говори последен
Monday, November 22, 2010
“Класически” Мариян
Monday, November 22, 2010
ала Salvador Dali
Monday, November 22, 2010
Friendly Mutton Chops
Monday, November 22, 2010
The Real Stuff
Monday, November 22, 2010
Monday, November 22, 2010
Имате въпроси?
Monday, November 22, 2010
1. Проблеми на релационните бази от данни
2. MongoDB отдалеч
3. Работа с MongoDB
4. Предимства и недостатъци
5. Някои прил...
Disclaimer
Релационните бази работят, доказани са
и имат ред успешни приложения. Ако се
захващате с алтернативни сте в
екс...
1. Проблеми на релационните бази от данни
2. MongoDB отдалеч
3. Работа с MongoDB
4. Предимства и недостатъци
5. Някои прил...
Релационните	
  бази	
  са	
  сложни!DDL & DML
нормализация
индекси
inner/outer join
транзакции/изолация
6NF
денормализаци...
скубете си косата...
...или сте си оскубали косата
Monday, November 22, 2010
R MO
Monday, November 22, 2010
bject-to- elational apperR MO
Monday, November 22, 2010
клас таблица
Monday, November 22, 2010
не съвсем съвместими
Monday, November 22, 2010
ON DELETE CASCASE vs. callback в кода
Monday, November 22, 2010
несъвместимост между типовете
(например дати)
Monday, November 22, 2010
в кода vs. в базата
Monday, November 22, 2010
OOP RDBMS
ORM
В “думите” на господин Вен...
...само общата част от двата свята
Monday, November 22, 2010
лош програмен модел
Monday, November 22, 2010
Edgar Codd
Monday, November 22, 2010
Релационен
модел
Monday, November 22, 2010
Релационен
модел
Monday, November 22, 2010
теория
Monday, November 22, 2010
теория	
  ≠	
  практика
Monday, November 22, 2010
на	
  теория:
Поставяте	
  данните	
  в	
  релации,
пишете	
  заявка	
  и	
  системата
автоматично	
  намира	
  как	
  да	...
на	
  практика:
Уф,	
  ‘що	
  не	
  ползва	
  тоя	
  иднекс?
Може	
  би	
  трябва	
  да	
  
денормализирам	
  тази	
  табл...
Monday, November 22, 2010
SQL	
  е	
  ужасен
Monday, November 22, 2010
Don Chamberlin
говори за SQL:
Monday, November 22, 2010
“Ray	
  and	
  I	
  thought	
  that	
  we	
  were	
  
developing	
  a	
  language	
  that	
  would	
  be	
  used	
  
mainl...
“...we	
  were	
  trying	
  to	
  make	
  databases	
  
accessible	
  to	
  a	
  new	
  class	
  of	
  users	
  who	
  
we...
“We	
  expected	
  to	
  see	
  SQL	
  used	
  directly	
  by	
  
financial	
  analysts,	
  urban	
  planners,	
  and	
  
o...
“In	
  fact,	
  over	
  the	
  years	
  a	
  great	
  deal	
  of	
  SQL	
  
code	
  has	
  been	
  generated	
  by	
  auto...
Monday, November 22, 2010
Monday, November 22, 2010
концептуални	
  проблеми
Monday, November 22, 2010
не	
  твърдя:
“Релационните	
  бази	
  са	
  
неизползвамеви	
  за	
  повечето	
  
приложения”
Monday, November 22, 2010
твърдя:
“Релационните	
  бази	
  са	
  
скъпи	
  за	
  повечето	
  
приложения”
Monday, November 22, 2010
Monday, November 22, 2010
NoSQL
Monday, November 22, 2010
Scientists have discovered
that 83% of all projects are better
of with MongoDB.True story.
Barney Stinson, Programmer
Mond...
1. Проблеми на релационните бази от данни
2. MongoDB отдалеч
3. Работа с MongoDB
4. Предимства и недостатъци
5. Някои прил...
Monday, November 22, 2010
документно-­‐ориентирана
Monday, November 22, 2010
scalability,	
  performances,
tons	
  of	
  features
Monday, November 22, 2010
OMG,	
  индекси!
(ако си мислите, че това не е проблем, пробвайте CouchDB)
Monday, November 22, 2010
производителност
функционалност
• memcached
• key/value
• RDBMS
• MongoDB
(според Mike Dirolf, един от авторите)
Monday, N...
“MyISAM	
  on	
  meth”
Monday, November 22, 2010
бази	
  ›	
  колекции	
  ›	
  документи
Monday, November 22, 2010
колекции	
  ≈	
  таблици
Monday, November 22, 2010
документите	
  са	
  JSON*
* с уговорки
Monday, November 22, 2010
{
"title": "Haskell rocks",
"text": "Today I played with...",
"tags": ["programming", "haskell"],
"author": {
"name": "Ste...
{
"title": "Haskell rocks",
"body": "Today I played with...",
"notes": "Monads in Go?"
}
{
"title": "Io is awesome",
"tags...
Типове
• нищо: null
• булева стойност: true, false
• 32bit/64bit цели числа: 42
• 64bit float: 3.1415
• низове: “chunky bac...
документите	
  всъщонст	
  са	
  BSON*
* бърз двоичен формат, MongoDB измислица
Monday, November 22, 2010
JavaScript	
  конзола
Monday, November 22, 2010
репликация
Monday, November 22, 2010
master-­‐slave
Monday, November 22, 2010
replica	
  set
Monday, November 22, 2010
auto-­‐sharding
Monday, November 22, 2010
1. Проблеми на релационните бази от данни
2. MongoDB отдалеч
3. Работа с MongoDB
4. Предимства и недостатъци
5. Някои прил...
{
"title": "Haskell rocks",
"author": "skanev",
"text": "Today I played with...",
"tags": ["programming", "haskell"],
"vie...
> db.posts.insert({
"title": "Haskell rocks",
"author": "skanev",
"text": "Today I played with...",
"tags": ["programming"...
> db.posts.find()
{
"_id" : ObjectId("4ce653278f4f936035707875"),
"title" : "Haskell rocks",
"author" : "skanev",
"text" :...
_id
• специален ключ,
• всеки документ го има
• уникален е в рамките на колекция
• какъвто и да е тип
Monday, November 22,...
> db.posts.update({title: "Haskell rocks"}, {
title: "Haskell is cool",
author: "skanev",
body: "Today I played with..."
}...
> db.posts.findOne()
{
"_id" : ObjectId("4ce653278f4f936035707875"),
"title" : "Haskell is cool",
"author" : "skanev",
"bo...
> db.posts.update({_id:"4ce653278f4f936035707875"},{
title: "Haskell is cool",
author: "skanev",
body: "Today I played wit...
db.posts.update(
{'title': 'Haskell rocks'},
{'$set': {'title': 'Haskell is weird'}}
)
Промяна на единично поле
Monday, No...
Модификатори ($set)
• Не са имена на полета
• Значат нещо специално за Mongo
• Започват с $
• Prefix-а може да се промени п...
инкрементиране на брояч
Monday, November 22, 2010
var views = db.posts.
findOne({title: "Haskell rocks"}).views
db.posts.update(
{'title': 'Haskell rocks'},
{'$set': {'view...
...но по-добрият вариант е
db.posts.update(
{'title': 'Haskell rocks'},
{'$inc': {'views': 1}}
)
Monday, November 22, 2010
работа с масиви
Monday, November 22, 2010
{
"title": "Haskell rocks",
"tags": ["weird", "haskell"],
}
Документ
Monday, November 22, 2010
Добавяне на таг
db.posts.update(
{'title': 'Haskell rocks'},
{'$push': {'tags': 'fun'}}
)
> db.posts.findOne()
{
"_id" : O...
Или пък
db.posts.update(
{'title': 'Haskell rocks'},
{'$addToSet': {'tags': 'weird'}}
)
Monday, November 22, 2010
вложени документи
Monday, November 22, 2010
{
"title": "Haskell rocks",
"author": {
"name": "Stefan Kanev",
"email": "stefan.kanev@example.org"
}
}
Документът...
Mond...
...и промяната
db.posts.update(
{"author.name": "Stefan Kanev"},
{"$set": {"author.email": "skanev@example.com"}}
)
Monday...
заявки за търсене
Monday, November 22, 2010
db.posts.find({"author": "skanev"})
Съвпадение по поле
Monday, November 22, 2010
Само определени полета
db.posts.find(
{"author": "skanev"},
{"title": 1, "tags": 1}
)
Monday, November 22, 2010
Сравнения
db.posts.find({"views": {"$gt": 1000}})
db.posts.find({"views": {"$gt": 1000, "$lt": 2000}})
Monday, November 22...
$in
db.posts.find({
"author": {"$in": ['skanev', 'stefan', 'kanev']}
})
Monday, November 22, 2010
Дизюнкция
(или на прост български: OR)
db.posts.find({
"$or": [
{"author": "skanev"},
{"views": {"$gte": 1000}}
]
})
Monda...
Търсене в масиви
db.posts.find({"tags": "haskell"})
db.posts.find({
"tags": {"$all": ["programming", "haskell"]}
})
db.pos...
Вложени документи
db.people.find({
"name.first": "Stefan",
"name.last": "Kanev"
})
Monday, November 22, 2010
има и още...
$gt $lt $gte $lte $ne
$all $in $nin $not $mod
$size $exists $type $elemMatch
Monday, November 22, 2010
$where
db.people.find({
"$where": function() {
return this.age % 2 == 0;
}
})
Monday, November 22, 2010
MapReduce
Monday, November 22, 2010
GridFS
Monday, November 22, 2010
server-­‐side	
  javascript
Monday, November 22, 2010
1. Проблеми на релационните бази от данни
2. MongoDB отдалеч
3. Работа с MongoDB
4. Предимства и недостатъци
5. Някои прил...
Corey Haines
Monday, November 22, 2010
#positivember
Monday, November 22, 2010
Хубавото в MongoDB
Monday, November 22, 2010
бързо
Monday, November 22, 2010
horizontal	
  scalability
Monday, November 22, 2010
feature-­‐rich
Monday, November 22, 2010
Лошото в MongoDB
Monday, November 22, 2010
администрация	
  ;(
Monday, November 22, 2010
memory	
  mapped-­‐files
Monday, November 22, 2010
особености	
  при	
  back-­‐up
Monday, November 22, 2010
no	
  single-­‐server	
  durability
Monday, November 22, 2010
много	
  инстанции	
  на	
  mongo
Monday, November 22, 2010
сега	
  е	
  #positivember,	
  а
всичко	
  това	
  е	
  много	
  негативно;
затова	
  мислете	
  така:
Monday, November 22...
улеснява	
  програмирането	
  за	
  
сметка	
  на	
  системната	
  
администрация
Monday, November 22, 2010
балансира	
  сложността	
  между	
  
програмистите	
  и	
  админите
Monday, November 22, 2010
намира	
  работа	
  на	
  админите
Monday, November 22, 2010
кара	
  администраторите	
  да	
  се	
  
чустват	
  полезни
Monday, November 22, 2010
мизантропи и
социопати
пълноценни
членове на
обществото
Системни администратори
принос,
самочувствие
Monday, November 22, ...
MongoDB	
  е	
  полезно	
  за	
  
админите
Monday, November 22, 2010
Monday, November 22, 2010
...но	
  сериозно...
Monday, November 22, 2010
1. Проблеми на релационните бази от данни
2. MongoDB отдалеч
3. Работа с MongoDB
4. Предимства и недостатъци
5. Някои прил...
три проблема, които не са
директно с производителност
Monday, November 22, 2010
1
Monday, November 22, 2010
MyISAM
120	
  000	
  000	
  записа
200	
  GB	
  таблица
Monday, November 22, 2010
...искам	
  да	
  добавя	
  нова	
  колона
Monday, November 22, 2010
ALTER TABLE articles
около	
  20	
  часа
Monday, November 22, 2010
спъва	
  развитието	
  на	
  продукта
прави	
  deploy-­‐а	
  ръчен
никой	
  не	
  иска	
  да	
  смъкне	
  сайта
Monday, No...
без заключване на таблици
Monday, November 22, 2010
1. променяме кода да работи с двата
варианта
2. времеемка миграция, която не заключва
нищо
3. премахваме поддръжката за ст...
2
Monday, November 22, 2010
импортираме	
  от	
  legacy	
  база...
...от	
  таблица	
  с	
  188	
  колони
Monday, November 22, 2010
Monday, November 22, 2010
orgnr skatter_AB soliditet_AB sumomstillg_KONC roresfdisp_KONC antalanst_KONC_X
lan aretsres_AB kaslikv_AB sparrkonto_KONC...
1 таблица, 1 ред
⇓
7 таблици, 30 реда
Monday, November 22, 2010
1.	
  показваме	
  на	
  една	
  страница
2.	
  даваме	
  на	
  SOLR	
  за	
  иднексация
Monday, November 22, 2010
7 класа + 7 таблици = bloat
Monday, November 22, 2010
по-­‐просто
по-­‐бързо
Monday, November 22, 2010
3
Monday, November 22, 2010
клиент	
  с	
  кофти	
  изисквания
Monday, November 22, 2010
“Ще	
  правим	
  магазин.	
  Искам	
  да	
  
мога	
  да	
  добавям	
  нови	
  типове	
  
продукти	
  и	
  да	
  променям	
...
entity-­‐attribute-­‐value
id key value
1 name hoodie
1 color blue
2 name shirt
Monday, November 22, 2010
трудни	
  заявки
губите	
  типове
няма	
  индекси
бавно
Monday, November 22, 2010
сериализиран	
  обект
json,	
  yaml,	
  pickle
Monday, November 22, 2010
никакви	
  заявки
никакви	
  индекси
външен	
  софтуер
Monday, November 22, 2010
Monday, November 22, 2010
1. Проблеми на релационните бази от данни
2. MongoDB отдалеч
3. Работа с MongoDB
4. Предимства и недостатъци
5. Някои прил...
Monday, November 22, 2010
Monday, November 22, 2010
Monday, November 22, 2010
Въпроси
Monday, November 22, 2010
Upcoming SlideShare
Loading in...5
×

Защо MongoDB?

2,042
-1

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,042
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Защо 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×