Slide 1

Slide 1 text

Python Meets MongoDB 2 0 1 2 / 0 4 / 0 7 ( S a t . ) ϓ ϩ ά ϥ ϛ ϯ ά ੜ ์ ૹ 1 4 t h

Slide 2

Slide 2 text

͓લͩΕΑ 1995(ฏ੒7)೥ੜ·Ε, ߴߍ2೥ੜ Pythonista, WebܥϓϩάϥϚ @yosida95, id:yosida95 http://yosida95.com/

Slide 3

Slide 3 text

Python Meets MongoDB

Slide 4

Slide 4 text

Python Meets MongoDB εςϚ

Slide 5

Slide 5 text

εςϚ͠ʹདྷͨ΋ͷ #TwitActivity http://twit.yosida95.com/ OAuthೝূͨ͠ϢʔβʔͷTwitter্Ͱͷձ ࿩Λin_reply_toʹج͖ͮऩू࣌͠ܥྻʹද ࣔ͢ΔαʔϏε

Slide 6

Slide 6 text

εςϚ͠ʹདྷͨ΋ͷ #TwitActivity http://twit.yosida95.com/ OAuthೝূͨ͠ϢʔβʔͷTwitter্Ͱͷձ ࿩Λin_reply_toʹج͖ͮऩू࣌͠ܥྻʹද ࣔ͢ΔαʔϏε ετʔΧʔޚ༻ୡπʔϧ

Slide 7

Slide 7 text

ར༻ऀͷ੠ ޷͖ͳ͋ͷ່ͱ஥ͷྑ͍ਓ͕෼͔ͬͨ(16ࡀஉੑ) ؾʹͳΔ͋ͷਓ͕Φϑձ͢Δࣄ͕෼͔ͬͨ(16ࡀஉੑ) ޷͖ͳ͋ͷ່͕ࣗ෼Ҏ֎Λ޷͖ͳࣄ͕൑໌(16ࡀஉੑ)

Slide 8

Slide 8 text

ར༻ऀͷ੠ ޷͖ͳ͋ͷ່ͱ஥ͷྑ͍ਓ͕෼͔ͬͨ(16ࡀஉੑ) ؾʹͳΔ͋ͷਓ͕Φϑձ͢Δࣄ͕෼͔ͬͨ(16ࡀஉੑ) ޷͖ͳ͋ͷ່͕ࣗ෼Ҏ֎Λ޷͖ͳࣄ͕൑໌(16ࡀஉੑ)

Slide 9

Slide 9 text

#TwitActivity http://twit.yosida95.com Python +Pyramid Nginx uWSGI MySQL + memcache

Slide 10

Slide 10 text

#TwitActivity http://twit.yosida95.com Python +Pyramid Nginx uWSGI MySQL + memcache

Slide 11

Slide 11 text

#TwitActivity http://twit.yosida95.com Python +Pyramid Nginx uWSGI MongoDB

Slide 12

Slide 12 text

What’s MongoDB ? ࠓ࿩୊ͷNoSQL( NoRDB ) υΩϡϝϯτࢦ޲σʔλϕʔε JSONϥΠΫͳBSONͱ͍͏σʔλܗࣜ

Slide 13

Slide 13 text

Python Meets MongoDB Python͔ΒMongoDBΛѻ͏Ϟδϡʔϧ PyMongo σʔλϕʔεͱͷ઀ଓΛ୲౰ MySQLdb΍ PyMySQLͷΑ͏ͳҐஔ MongoEngine ODM, SQLAlchemyͷΑ͏ͳҐஔ σʔλϕʔε઀ଓʹPyMongoΛ࢖༻

Slide 14

Slide 14 text

σʔλεΩʔϜͷఆٛ 1 #-*- coding: utf-8 -*- 2 3 from mongoengine import ( 4 connection, 5 Document, 6 EmbeddedDocument, 7 EmbeddedDocumentField, 8 BooleanField, 9 StringField, 10 EmailField, 11 ImageField, 12 GeoPointField, 13 ListField, 14 ) 15 16 connection('test_db', host='mongo.example.com', port=27017) 17 18 19 class Person(Document): 20 given_name = StringField() 21 email = EmailField() 22 is_male = BooleanField(default=True) 23 photo = ImageField() 24 25 26 class Home(EmbeddedDocument): 27 family_name = StringField() 28 families = ListField(field=EmbeddedDocumentField(Person)) 29 address = GeoPointField() 30 meta = { 31 'indexes': ['family_name', ('family_name', 'address')], 32 }

Slide 15

Slide 15 text

1 #-*- coding: utf-8 -*- 2 3 from mongoengine import ( 4 connection, 5 Document, 6 EmbeddedDocument, 7 EmbeddedDocumentField, 8 BooleanField, 9 StringField, 10 EmailField, 11 ImageField, 12 GeoPointField, 13 ListField, 14 ) 15 16 connection('test_db', host='mongo.example.com', port=27017) 17 18 19 class Person(Document): 20 given_name = StringField() 21 email = EmailField() 22 is_male = BooleanField(default=True) 23 photo = ImageField() 24 25 26 class Home(EmbeddedDocument): 27 family_name = StringField() 28 families = ListField(field=EmbeddedDocumentField(Person)) 29 address = GeoPointField() 30 meta = { 31 'indexes': ['family_name', ('family_name', 'address')], 32 }

Slide 16

Slide 16 text

֤छૢ࡞ 1 #-*- coding: utf-8 -*- 2 3 from models import ( 4 Family, 5 ) 6 7 8 # ݕࡧΫΤϦ 9 # Ո଒ʹ໊͕ʮ߉ฏʯͷਓ͕ډΔՈ଒Λݕࡧ 10 kohei = Family.objects.filter(families__given_name=u'߉ฏ') 11 12 # ੏͕ʮ٢ాʯͷՈ଒Λݕࡧ͠ɺ࠷ॳͷσʔλΛyoshidaʹ୅ೖ 13 yoshida = Family.objects.filter(family_name=u'٢ా').first() 14 15 16 # ߋ৽ 17 # ٢ా͔Βླ໦ʹվ੏ 18 yoshida.family_name = u'ླ໦' 19 yoshida.save() 20 21 # ΍ͬͨͶʂՈ଒͕૿͑ͨΑ 22 yoshida.families.append(Person(given_name=u'ϓϩੜͪΌΜ')) 23 yoshida.save() 24 25 # ࡟আ 26 # ϓϩੜͪΌΜΛՈ଒ʹܴ͑ೖΕͨ݁Ռɺ٢ా͞Μ͕ҰՈ΋Ζͱ΋ফ͞Εͨ 27 yoshida.delete()

Slide 17

Slide 17 text

1 #-*- coding: utf-8 -*- 2 3 from models import ( 4 Family, 5 ) 6 7 8 # ݕࡧΫΤϦ 9 # Ո଒ʹ໊͕ʮ߉ฏʯͷਓ͕ډΔՈ଒Λݕࡧ 10 kohei = Family.objects.filter(families__given_name=u'߉ฏ') 11 12 # ੏͕ʮ٢ాʯͷՈ଒Λݕࡧ͠ɺ࠷ॳͷσʔλΛyoshidaʹ୅ೖ 13 yoshida = Family.objects.filter(family_name=u'٢ా').first() 14 15 16 # ߋ৽ 17 # ٢ా͔Βླ໦ʹվ੏ 18 yoshida.family_name = u'ླ໦' 19 yoshida.save() 20 21 # ΍ͬͨͶʂՈ଒͕૿͑ͨΑ 22 yoshida.families.append(Person(given_name=u'ϓϩੜͪΌΜ')) 23 yoshida.save() 24 25 # ࡟আ 26 # ϓϩੜͪΌΜΛՈ଒ʹܴ͑ೖΕͨ݁Ռɺ ٢ా͞Μ͕ҰՈ΋Ζͱ΋ফ͞Εͨ 27 yoshida.delete()

Slide 18

Slide 18 text

ϕϯνϚʔΫ Apache Bench uWSGI͕ࢮΜͰϕϯνϚʔΫऔΕͳ ͔ͬͨ httperf Apache Benchͷ݁ՌʹΨοΫϦདྷͯ MySQLͷσʔλফͪ͠Όͬͨ(ũųųƅƁ

Slide 19

Slide 19 text

ϕϯνϚʔΫ ମײ଎౓ ΊͬͪΌ଎͐͑͑͑͑͑͑͑͑͑͑

Slide 20

Slide 20 text

MongoDB׵૷ͷײ૝ PyMongo ίωΫγϣϯϓʔϧʹඪ४ରԠ ؾΛ࢖ΘͣʹίωΫγϣϯΛҡ࣋Ͱ͖Δ MongoEngine DjangoͷORMϥΠΫ

Slide 21

Slide 21 text

MongoDB׵૷ͷײ૝ ૯ධ MongoDB଎͗͢ϫϩλ ద੾ʹΠϯσοΫεுΔͱߋʹૣ͍

Slide 22

Slide 22 text

·ͱΊ ΋ͬͱૣ͘MongoDBΛ͍͍ͬͯ͡Ε͹ྑ ͔ͬͨ

Slide 23

Slide 23 text

ࢀߟࢿྉ MongoEngine User Documentation http://readthedocs.org/docs/mongoengine- odm/en/latest/ mongoDB Manual http://www.mongodb.org/display/DOCS/ Manual

Slide 24

Slide 24 text

εςϚͦͷ2 Զ

Slide 25

Slide 25 text

εςϚͦͷ2 ݱࡏɺΞϧόΠτΛ͍͚ͤͯͨͩ͞Δͱ͜Ζ Λ୳͍ͯ͠·͢ɻ ͝ڵຯɺ͓৺ลΓ͕͋Ε͹ɺ΅͘ͱ͓࿩ͤ͞ ͍ͯͩ͘͞ɻ

Slide 26

Slide 26 text

Thank You For Listening ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠