Slide 1

Slide 1 text

minneͷݕࡧΛ Ruby ͱ Solr Ͱ ͪΐͬͱศརʹͨ͠࿩‗ GMOϖύϘ ߔ্ ཽଠ࿠ ϖύϘςοΫΧϯϑΝϨϯεʲ෱Ԭʳ

Slide 2

Slide 2 text

ࣗݾ঺հ • ߔ্ ཽଠ࿠ (github.com/mizoR) • minneࣄۀ෦ ΤϯδχΞ • Ruby / Rails

Slide 3

Slide 3 text

minne ʹ͍ͭͯ • ೔ຊ࠷େڃͷϋϯυϝΠυϚʔέοτ • ొ࿥࡞඼਺ɿ131ສ఺ • ࡞Ո਺ɿ12.4ສਓ • TV CM શࠃ์ө

Slide 4

Slide 4 text

ΞδΣϯμ • ੒௕ʹͱ΋ͳ͏՝୊ • ͳͥݕࡧ݁Ռͱ࣮σʔλͱͷؒʹζϨ͕͋Δ? • Ͳ͏΍ͬͯૣ͘͢Δ͔? • ·ͱΊ

Slide 5

Slide 5 text

੒௕ʹͱ΋ͳ͏՝୊

Slide 6

Slide 6 text

࡞඼ͷݕࡧ݁Ռʹ ചΓ੾Ε͕໨ཱͭ

Slide 7

Slide 7 text

ϑʔϓ ΞΫηαϦʔɾϐΞε ൢചத ݕࡧ݁Ռ

Slide 8

Slide 8 text

ϑʔϓ ΞΫηαϦʔɾϐΞε ൢചத ݕࡧ݁Ռ ചΓ੾Ε

Slide 9

Slide 9 text

ͳͥݕࡧ݁Ռͱ࣮σʔλͱͷ ؒʹζϨ͕͋Δʁ

Slide 10

Slide 10 text

minneͷݕࡧΛࢧ͑Δٕज़ • ϑϨʔϜϫʔΫɿRuby on Rails • શจݕࡧΤϯδϯɿSolr 4 (master-slave ߏ੒) • ΫϥΠΞϯτɿsunspot

Slide 11

Slide 11 text

ݕࡧΠϯσοΫεߋ৽ઓུ • શ݅࠶ΠϯσΩγϯά 1.ݹ͍ΠϯσοΫεΛશͯফͯ͠ɺ 2.৽͘͠ΠϯσοΫεΛ࡞੒͢Δ

Slide 12

Slide 12 text

શ݅࠶ΠϯσΩγϯάͰ ݕࡧͰ͖ΔΑ͏ʹͳΔ·Ͱ • ΠϯσοΫεΛશ෦ফͯ͠࡞Γ௚͢ NBTUFS TMBWF #BUDI BQQ BQQ BQQ TMBWF TMBWF %BUBCBTF ɿ ɿ

Slide 13

Slide 13 text

• ϨϓϦέʔγϣϯΛ࣮ߦ NBTUFS TMBWF TVOTQPUJOEFY BQQ BQQ BQQ TMBWF TMBWF %BUBCBTF ɿ ɿ શ݅࠶ΠϯσΩγϯάͰ ݕࡧͰ͖ΔΑ͏ʹͳΔ·Ͱ

Slide 14

Slide 14 text

શ݅࠶ΠϯσΩγϯά ☀όονΛ࣮ߦ͢Δ͚ͩ ☀ਖ਼֬ͳΠϯσοΫε͕ੜ੒͞ΕΔ ☔ΠϯσΩγϯά్தͰϨϓϦέʔγϣϯͰ͖ͳ͍ 㱺 ݕࡧ݁Ռͷ൓өϥά͕େ͖͘ͳΔ (3~4࣌ؒ͘Β͍͔͔Δ)

Slide 15

Slide 15 text

Ͳ͏΍ͬͯૣ͘͢Δ͔?

Slide 16

Slide 16 text

શ݅࠶ΠϯσΩγϯά ‑ ࠩ෼ΠϯσΩγϯά

Slide 17

Slide 17 text

• ࠩ෼ΠϯσΩγϯά • ඞཁͳ෼͚ͩΠϯσΩγϯάΛߦ͏ ݕࡧΠϯσοΫεߋ৽ઓུᶄ

Slide 18

Slide 18 text

ࠩ෼ΠϯσΩγϯάͰ ݕࡧͰ͖ΔΑ͏ʹͳΔ·Ͱ • ݕࡧʹؔ࿈ͨ͠৘ใͷมߋ͕ཁٻɾ࣮ߦ͞ΕΔ NBTUFS TMBWF BQQ BQQ BQQ TMBWF TMBWF %BUBCBTF ɿ ɿ +PC ࡞඼ͷߋ৽ ࡞Ոͷߋ৽

Slide 19

Slide 19 text

• ΠϯσΩγϯάλεΫΛΩϡʔΠϯά͢Δ NBTUFS TMBWF BQQ BQQ BQQ TMBWF TMBWF %BUBCBTF ɿ ɿ +PC ࡞඼ͷߋ৽ ࡞Ոͷߋ৽ ࠩ෼ΠϯσΩγϯάͰ ݕࡧͰ͖ΔΑ͏ʹͳΔ·Ͱ

Slide 20

Slide 20 text

• ϨϓϦέʔγϣϯΛ࣮ߦ NBTUFS TMBWF BQQ BQQ BQQ TMBWF TMBWF %BUBCBTF ɿ ɿ +PC ࡞඼ͷߋ৽ ࡞Ոͷߋ৽ ࠩ෼ΠϯσΩγϯάͰ ݕࡧͰ͖ΔΑ͏ʹͳΔ·Ͱ

Slide 21

Slide 21 text

࡞඼σʔλͷมߋ࣌ʹ ࠩ෼ΠϯσΩγϯάΛߦ͏ # /app/models/item.rb class Item < ActiveRecord::Base after_commit(if: :persisted?) {self.delay.perform_index} def perform_index indexable? ? index : remove_from_index end end shops items 0..*

Slide 22

Slide 22 text

࡞඼ʹؔ࿈ͨ͠σʔλͷมߋ࣌ʹ ࠩ෼ΠϯσΩγϯάΛߦ͏ # /app/models/shop.rb class Shop < ActiveRecord::Base has_many :items after_commit(if: :persisted?) { ItemsIndexing.perform_later(items) } end # /app/jobs/items_indexing.rb class ItemsIndexing < ActiveJob::Base def perform(items) items.find_in_batches(batch_size: 50) do |group| Sunspot.batch { group.each(&:perform_index) } end end end

Slide 23

Slide 23 text

☀͍ͭϨϓϦέʔγϣϯͯ͠΋OK 㱺 ݕࡧ݁Ռͷߋ৽ϥάΛখ͘͞Ͱ͖Δ (3~4࣌ؒˠ10෼લޙ) ☀࣮૷΋೉͘͠ͳ͍ ࠩ෼ΠϯσΩγϯά

Slide 24

Slide 24 text

·ͱΊ

Slide 25

Slide 25 text

·ͱΊ • ൓өϥάΛখ͘͞ͳͬͯ޾ͤʢϏδωεతଆ ໘ʣ • ࢓૊Έ΋ίʔυ΋γϯϓϧʢٕज़తଆ໘ʣ Ϗδωε × ٕज़ =

Slide 26

Slide 26 text

͋Γ͕ͱ͏͍͟͝·ͨ͠