ð Solr倧éããŒã¿ã€ã³ããŒãã2æéâ20åã«æ¹åãã話
ITæè¡
ã¯ããã«ïŒãªãé«éåãå¿ èŠã ã£ãã®ãïŒ
ç§ãæ åœããŠãããããžã§ã¯ãã§ã¯ã倧éã®ç©ä»¶ããŒã¿ãæ±ã£ãŠããŸãã
Solrã³ã¢ã«ä¿åãããŠãããå
ãšãªãç©ä»¶ããŒã¿ããããŠãŒã¶ãŒãåºèã«èŠããããã®åœ¢ã«æŽåœ¢ããå¥ã®Solrã³ã¢ãžä¿åãçŽãââ
ãããªäžé£ã®åŠçãæ¥ã
åããŠããŸãã
ãã®ãšãã«åé¡ã«ãªãã®ããç©ä»¶ããŒã¿ã®ã€ã³ããŒãé床ã§ãã
ã€ã³ããŒãåŠçãé
ããªããšãã©ãããŠãããŒã¿ã®åæ ãåŸãåãã«ãªããçµæãšããŠç©ä»¶ããŒã¿ã®é®®åºŠãèœã¡ãŠããŸããŸãã
ç©ä»¶ã®é®®åºŠãèœã¡ããšãå®éã®ãµãŒãã¹ã«ã圱é¿ãåºãŠããŸãã
- ãŠãŒã¶ãŒããç©ä»¶ã®åãåããããã£ãŠãããã§ã«æçŽæžã¿ã ã£ã
- 衚瀺ãããç©ä»¶ãæžãããŠãŒã¶ãŒã®éžæè¢ãçãŸã£ãŠããŸã
ã©ã¡ãããŠãŒã¶ãŒäœéšã倧ããæãªãèŠå ã§ãã
ãã®ãããã®ãããžã§ã¯ãã§ã¯ã
ãããã«éãã»å®å®ããŠç©ä»¶ããŒã¿ãã€ã³ããŒãã§ãããããããšãŠãéèŠãªããŒãã«ãªã£ãŠããã
Solrãžã®å€§éããŒã¿ã€ã³ããŒãã®é«éåã«åãçµãããšã«ãªããŸããã
çŸç¶ã®èª²é¡:
å ãšãªãSolrã³ã¢ããã®ããŒã¿ååŸãæŽåœ¢ããããŠå¥ã³ã¢ãžã®ä¿åãŸã§ã®äžé£ã®åŠçãåŸã ã«é ããªã£ãŠããŠãããšããåé¡ãæ±ããŠããŸããã
å¹³æã§ããã°çŽ20åã§å®äºããŠããåŠçãã
ç¶æ³ã«ãã£ãŠã¯2æé以äžãããããšããããŸãã
ããã«åä»ãªã®ã¯ãäžåºŠåŠçã«æéããããå§ãããšã
次å以éã®å®è¡ã§ãåæ§ã«æéãããã£ãŠããŸããšããæªåŸªç°ã«é¥ãç¹ã§ãã
ãŸããåŠçå
šäœããã©ãã¯ããã¯ã¹åããŠããã
ãååŸã»å å·¥ã»ä¿åãã®ã©ããããã«ããã¯ã«ãªã£ãŠããã®ãåãããªãç¶æ
ã§ããã
ãã®ãŸãŸã§ã¯ã广çãªæ¹åçãæã€ããšãã§ããŸããã
åœç¶ãªããããã®åŠçãé
ããªãã»ã©ãææ°ã®ç©ä»¶ããŒã¿ããŠãŒã¶ãŒã®ç®ã«å±ããŸã§ã®æéãé·ããªããŸãã
çµæãšããŠãããŒã¿ã®é®®åºŠäœäžã«ã€ãªããããµãŒãã¹å質ã«ã圱é¿ãäžããŠããŸããŸãã
åæ
- SolrããŒãžã§ã³ïŒ6.6.6ïŒæ§ç³»çµ±ïŒ
- 䜿çšã©ã€ãã©ãªïŒ
rsolrïŒRubyïŒ - 察象ããŒã¿ä»¶æ°ïŒæ°åäžãæ°çŸäžä»¶åŠçå
容ïŒ
- Solrããã®ååŸ â å å·¥ â Solrã³ã¢ãžæå ¥
- ååŸããSolrãšæå ¥ããSolrã¯åäžãµãŒããŒã§åããŠãããã³ã¢ãåãããŠããã
- åŠçæ¹åŒïŒãããåäœã§è€æ°ããã»ã¹äžŠåå®è¡
- å®è¡ç°å¢ïŒCloud Run Job
ðã¹ããã1ïŒããã«ããã¯ã®ç¹å®ãšèšæž¬
æãæéãããã£ãŠããéšåãç¹å®ããããšããå§ããŸãã
ðã€ã³ããŒãåŠçãããŒã®å確èª
ããŒã¿ãœãŒã¹ïŒSolrïŒããã®ååŸ â 倿ã»å å·¥ â Solrãžã®éä¿¡ â Solrã§ã®ã€ã³ããã¯ã¹äœæã»ã³ããã
ãã®äžé£ã®åŠçãéœéåºçãå°æ¹ããšã«äžŠåã§å®è¡ããŠãã
ðããã«ããã¯ã®èª¿æ»æºå
ãŸãæåã«åãçµãã ã®ã¯ã
ãã©ãã§æéãããã£ãŠããã®ããå¯èŠåããããšãã§ããã
ãããŸã§ã¯ããå
šäœãšããŠé
ããããšã¯åãã£ãŠããŠãã
åŠçã®ã©ããåå ãªã®ããæ£ç¢ºã«ææ¡ã§ããŠããŸããã§ããã
ããã§ãåŠçã®å®æ
ãææ¡ããããã«ã
èšæž¬å°çšã®ã¬ããŒãçšDBãæ°ãã«çšæãã
以äžã®æ
å ±ããããåŠçããšã«èšé²ããããã«ããŸããã
- åŠçã®éå§æéã»çµäºæé
- ããŒã¿ãœãŒã¹ïŒSolrïŒããååŸããä»¶æ°
- 倿ã»å å·¥åŸã®ä»¶æ°
ããã«ããã
ãã©ã®ããããããã©ã®å·¥çšã§ããã©ããããæéã䜿ã£ãŠããã®ãã
ãæ°å€ãšããŠè¿œããããã«ãªããŸããã
ããããŠãæ¢åã®ã¢ããªã±ãŒã·ã§ã³ãã°ãæ¹ããŠç¢ºèªããŸããã
åŠçæéãé·ããªã£ãŠããããªç®æãæŽãåºãããã®ååŸã®ãã°ã詳ãã远ã£ãŠããããšã§ã
å®éã«æãæéãæ¶è²»ããŠããåŠçãç¹å®ããŠãããŸããã
ãã®2ã€ã®ã¢ãããŒããçµã¿åãããããšã§ã
æèŠã§ã¯ãªããäºå®ããŒã¹ã§ããã«ããã¯ã倿ã§ããç¶æ
ãäœãããšãã§ããŸããã
ðããã«ããã¯ã®ç¹å®
ãŸãåé¡ã«ãªã£ãŠããã®ãã
Solrã®Â select ã¯ãšãªã®å®è¡æéããæé垯ã«ãã£ãŠæ¥µç«¯ã«ã°ãã€ãç¹ã§ãã
åãæ€çŽ¢åŠçãç¹°ãè¿ãå®è¡ããŠããã«ããããããã
- 0æå°ïŒ1ç§ãããããã«çµäº
- 9æå°ïŒ15ç§ä»¥äžããã£ãŠçµäº
ãšããããã«ãæãããªå·®ãçºçããŠããŸããã
調æ»ãé²ãããšããã
ãã®ãé
ãæé垯ãã¯ãããŒã¿ãœãŒã¹åŽã®Solrã«å€§éããŒã¿ãæå
¥ããŠããæé垯ãš
ã¡ããã©éãªã£ãŠããããšãåãããŸããã
ã€ãŸããã®æé垯ã¯ã
- 倿ã»å 工察象ãšãªãç©ä»¶æ°ãå¢å ã
- åæã« Solr ãžã®Â èªã¿åãïŒselectïŒãšæžã蟌ã¿ïŒadd / commitïŒÂ ãçºçã
- Solr ã«å¯Ÿããè² è·ãäžæ°ã«é«ãŸã£ãŠãã
ãšããç¶æ ã«ãªã£ãŠããã®ã§ãã
ããã²ãšã€ã®å€§ããªããã«ããã¯ãã
Solrãžã® commit åŠçã«ç°åžžãªæéãããã£ãŠããç¹ã§ããã
å ·äœçã«ã¯ã
- 5,000ä»¶ã® commit ã« 120ç§ä»¥äžãããã±ãŒã¹ãé »çº
- çŸç¶ã®å®è£
ã§ã¯ commit ãæå€§3åãŸã§ãªãã©ã€ãããã
ææªã§ 360ç§ä»¥äžÂ ãèŠããããšããããŸãã
ããã«ãããŒã¿ãœãŒã¹åŽã®ããŒã¿éãå€ãå Žåã«ã¯ã
ãããã¯ãŒã¯è² è·ãé«ãŸãããããšããåé¡ãèŠããŠããŸããã
ãã®çµæã
- Cloud Run Job ã®ã¡ã¢ãªäœ¿çšéãå¢å€§ã
- ã¡ã¢ãªäžè¶³ã«ãã Out of Memory ãšã©ãŒÂ ãçºç
- ãžã§ããç°åžžçµäºãã
ãšãã£ãäºè±¡ã確èªãããŸããã
ãããã®çµæãããåçŽã«ãã¢ããªåŽã®åŠçãé
ããã®ã§ã¯ãªãã
Solrãžã®èªã¿æžããéäžããã¿ã€ãã³ã°ãã®ãã®ãããã«ããã¯ã«ãªã£ãŠãã
ãšããããšããã¯ã£ãããšåãã£ãŠããŸããã
ð ïž ã¹ããã2ïŒåããã«ããã¯ã«å¯Ÿããå ·äœçãªæ¹åç
ããã§ã¯ãç¹å®ãããããã«ããã¯ã«å¯ŸããŠãã©ã®ãããªå¯Ÿçãè¬ããããå ·äœçã«èšè¿°ããŸãã
ð ïž Solrã®selectãé ããªãæé垯ãžã®å¯Ÿç
ããŒã¿ãœãŒã¹åŽã®èª¿æ»ãé²ããäžã§ãSolr ã®Â select ã¯ãšãªãé
ããªãåå ã¯ãã¯ãšãªã®æžãæ¹ãšÂ Solr ã®äœ¿ãæ¹ã®äž¡é¢ã«ããããšãåãããŸããã
ããã§ã¯ãå®éã«å¹æããã£ã 2 ã€ã®å¯Ÿçã玹ä»ããŸãã
1. æ€çŽ¢å¯Ÿè±¡ã fqïŒFilter QueryïŒã§çµã
1ã€ç®ã®å¯Ÿçã¯ãfqÂ ãæ£ãã䜿ãããšã§ãã
fq ã¯Â Filter Query ã®ç¥ã§ãæ€çŽ¢å¯Ÿè±¡ãšãªãããã¥ã¡ã³ãã®éåïŒã¹ãŒããŒã»ããïŒã
ãããããçµã蟌ãããã®ã¯ãšãªã§ãã
fq ã®å€§ããªç¹åŸŽã¯ã
- ã¹ã³ã¢èšç®ãè¡ããªã
- æ¡ä»¶ãåãå Žåããã£ãã·ã¥ãå¹ã
ãšããç¹ã«ãããŸãã
ãã®ãããé©åã«äœ¿ãããšã§ã¯ãšãªå
šäœã®åŠçé床ã倧ããæ¹åã§ããå¯èœæ§ããããŸãã
ããããåœæã®å®è£
ã§ã¯ã
ãã¹ãŠã®æ€çŽ¢æ¡ä»¶ã qÂ ã«æå®ãããŠããŸããã
ããã§ã¯ã
- æ¯åã¹ã³ã¢èšç®ãèµ°ã
- ãã£ãã·ã¥ãå¹ãã¥ãã
ãšããç¶æ ã«ãªã£ãŠããŸããŸãã
ããã§ã
- æ€çŽ¢ã®äž»è»žãšãªãæ¡ä»¶Â âÂ
q - çµãèŸŒã¿æ¡ä»¶Â âÂ
fq
ãšããåœ¢ã«æŽçããŸããã
äŸãã°ã
- ãã©ã€ããªããŒã«ããæ€çŽ¢ âÂ
q - éœéåºçãå
¬éç¶æ
ãªã©ã®çµã蟌㿠âÂ
fq
ãšãã£ãå ·åã§ãã
ãã®ä¿®æ£ã«ããã åãæ¡ä»¶ã§ç¹°ãè¿ãå®è¡ãããæ€çŽ¢ã«å¯ŸããŠÂ ãã£ãã·ã¥ããããçºçãããããªãã select ã¯ãšãªã®å®å®æ§ãåäžããŸããã
2. Solr ã®ã¬ããªã±ãŒã·ã§ã³æ©èœã掻çšãã
2ã€ç®ã®å¯Ÿçããä»åãã£ãšã广ã倧ããã£ã察å¿ã§ãã
Solr ã§ã¯ã
commit ãå®è¡ããããã³ã«Â Searcher ã®åãªãŒãã³Â ãçºçããŸãã
ãã®ããã
- 倧éã®Â
commit - 倧éã®Â
select
ãåæã«èµ°ããšãselect ã¯ãšãªã®ã¬ã¹ãã³ã¹ãæ¥µç«¯ã«æªåããããšããããŸãã
ä»åã®æ§æã§ã¯ã
- ç©ä»¶ããŒã¿ã®æå ¥ïŒadd / commitïŒ
- ããŒã¿ãœãŒã¹ãšããŠã®æ€çŽ¢ïŒselectïŒ
ã åã Solr ãµãŒããŒã§è¡ã£ãŠããŸããã ããããé«è² è·æé垯ã«Â select ãé
ããªã
倧ããªèŠå ã«ãªã£ãŠãããšèããããŸãã
ããã§ãSolr ã®Â ã¬ããªã±ãŒã·ã§ã³æ©èœãå©çšãã
- MasterïŒããŒã¿æå ¥ã»commit å°çš
- ReplicaïŒSlaveïŒïŒselect å°çš
ãšãã圹å²åæ ãè¡ããŸããã
ããã«ããã
commit ã«ãã Searcher åãªãŒãã³ã®åœ±é¿ã
select åŽããåãé¢ãããšãã§ã- é«è² è·æé垯ã§ãÂ
select ã®åŠçæéã
倧ããæªåããªããªããŸãã
ç¹ã«ãã®å¯Ÿå¿ã¯ãåŠçæéã®æ¹åå¹
ãæã倧ããã£ã察çã§ãããã
Solr ã®èªã¿æžããæ··åšããæ§æã§ã¯ãéåžžã«æå¹ãªã¢ãããŒãã ãšæããŠããŸãã
ð ïž Solr ã® commit ãé ãåé¡ãžã®å¯Ÿç
1. commitWithin ãããŸã䜿ã
ddd
ãŸãåãçµãã ã®ããcommitWithinÂ ã®æŽ»çšã§ãã
commitWithin ã¯ããâ¯ç§ä»¥å
ã« commit ããŠã»ããããšããæ¡ä»¶ã Solr ã«äŒãã
commit ã®ã¿ã€ãã³ã°ã Solr åŽã«å§ããããã®ãªãã·ã§ã³ã§ãã
éåžžã®Â commit ã§ã¯ã
- commit ãå®äºãããŸã§ã¬ã¹ãã³ã¹ãåŸ ã€
- åŒã³åºãå ã®åŠçããããã¯ããã
ãšããæåã«ãªããŸãã
äžæ¹ãcommitWithin ã䜿ããšã
- ãªã¯ãšã¹ãã¯ããã«è¿åŽãã
- commit 㯠Solr å éšã§éåæã«å®è¡ããã
ãããã¢ããªã±ãŒã·ã§ã³åŽã®åŸ ã¡æéã倧ããæžããããšãã§ããŸãã
倧éããŒã¿ãæå ¥ãããããåŠçã§ã¯ããã®å·®ããã®ãŸãŸå šäœã®åŠçæéã«åœ±é¿ããŠããŸãã
Atomic Update ã䜿çšãã
次ã«è¡ã£ãã®ããAtomic Update ã®å°å ¥ã§ãã
Solr ã§ã¯ããã©ã€ããªããŒïŒéåžžã¯Â id ãã£ãŒã«ãïŒãåãããã¥ã¡ã³ããéä¿¡ãããšãèªåçã«æ¢åããŒã¿ãäžæžããããä»çµã¿ã«ãªã£ãŠããŸãã
ãããŸã§ã®å®è£ ã§ã¯ããã®ãå šäœäžæžããã䜿ã£ãŠããŸããããäžéšã®é ç®ã ããæŽæ°ãããã±ãŒã¹ãå€ãååšããŠããŸããã
ããã§ã
ã倿Žãå¿
èŠãªãã£ãŒã«ãã ããæŽæ°ããã
Atomic Update ãäžéšã®åŠçã§æ¡çšããŸããã
ãã®å¯Ÿå¿ã«ããã
- éä¿¡ããŒã¿éã®åæž
- ãããã¯ãŒã¯è² è·ã®è»œæž
- Cloud Run Job ã®ã¡ã¢ãªæ¯æžïŒOOMïŒã®è§£æ¶
ãšãã£ã广ãåŸãããçµæãšããŠÂ commit åšãã®åŠçãå®å®ã»é«éåããŸããã
Atomic Update ã䜿ãéã®æ³šæç¹
ãã ããAtomic Update ã¯Â åžžã«æéãšããããã§ã¯ãããŸããã
äžè¬çã«ã¯ã
- å šäœäžæžãÂ ã®æ¹ãéã
- Atomic UpdateÂ ã¯æ¡ä»¶ä»ãã§æå¹
ãšããé¢ä¿ã«ãªããŸãã
Atomic Update ã§ã¯ãå éšçã«ä»¥äžã®åŠçãè¡ãããŸãã
- Read
æ¢åããã¥ã¡ã³ããå éšã¹ãã¬ãŒãžïŒStored FieldsïŒããèªã¿åºã - Merge
èªã¿åºããããŒã¿ãšãéä¿¡ãããæŽæ°ããŒã¿ãããŒãž - Delete & Add
å€ãããã¥ã¡ã³ããå逿±ãã«ããæ°ããããã¥ã¡ã³ããæžã蟌ã
äžæ¹ãå
šäœäžæžãã®å Žåã¯ããã®Â Read ã®å·¥çšãäžèŠãªããã
åŠçãã®ãã®ã¯äžæžãã®æ¹ãé«éã«ãªããŸãã
ãã®ããã
- ãã©ã°ãæ°å€ãªã©ãäžéšã®é ç®ãé »ç¹ã«æŽæ°ããå Žå
- ããã¥ã¡ã³ãã®é ç®æ°ãå€ããéä¿¡ãµã€ãºã倧ããå Žå
ãšãã£ãã±ãŒã¹ã§ã¯ããããã¯ãŒã¯ã»ã¡ã¢ãªç¶æ³ãèæ ®ããããã§ Atomic Update ãéžæããã®ãæå¹ã§ãã
3. Solr ã®ã¬ããªã±ãŒã·ã§ã³æ©èœã掻çšãã
æåŸã«ãselect 察çãšåæ§ã«ã
Solr ã®ã¬ããªã±ãŒã·ã§ã³æ©èœã掻çšããŸããã
- MasterïŒadd / commit å°çš
- ReplicaïŒselect å°çš
ãšãã圹å²åæ ãè¡ãããšã§ã
- commit ã«ãã Searcher åãªãŒãã³ã®åœ±é¿ãåé¢
- commit åŠçãã®ãã®ãå®å®ããã
ããšãã§ããŸããã
commit ãš select ãåæã«å€§éã«çºçããæ§æã§ã¯ããã®åé¢ã ãã§ã倧ããªæ¹å广ããããŸãã
âš ã¹ããã3ïŒæ¹åçµæãšæçµçãªææ
æ¡ä»¶
ä»åã®æ€èšŒã§ã¯ã以äžã®æ¡ä»¶ã§åŠçæéãæ¯èŒããŸããã
- ããŒã¿ãœãŒã¹ã®Solr ããã®ååŸä»¶æ°ïŒçŽ30äžä»¶
- Solr ã³ã¢ãžã®æå ¥ä»¶æ°ïŒçŽ6äžä»¶
çµæ
äžèšæ¡ä»¶ã§ãããåŠçãå®è¡ãããšããã
åŠçæéã¯ä»¥äžã®ããã«æ¹åãããŸããã
- æ¹ååã®ã€ã³ããŒãæéïŒçŽÂ 2æé
- æ¹ååŸã®ã€ã³ããŒãæéïŒçŽÂ 20å
- åæžçïŒçŽ 80% ç瞮 ð
è€æ°ã®ããã«ããã¯ã«å¯ŸããŠæ®µéçã«å¯Ÿçãè¡ã£ãçµæã
åŠçæéã çŽ1/6 ãŸã§ççž®ããããšãã§ããŸããã
ããŒã¿ã®é®®åºŠãä¿ã€ãšãã芳ç¹ã§ãã
ãã®æ¹å广ã¯éåžžã«å€§ããã
å®å®ããéçšã«ã€ãªããçµæãšãªããŸããã
ð¡ ãŸãšã
ä»åã®å¯Ÿå¿ãéããŠåŒ·ãæããã®ã¯ã
ããã©ãŒãã³ã¹æ¹åã«ãããŠæãéèŠãªã®ã¯ãèšæž¬ããšãããã«ããã¯ã®åãåãããã ãšããããšã§ãã
ãªããšãªãé ãããªéšåãæ¹åããã®ã§ã¯ãªããæ°å€ãåããäºå®ããŒã¹ã§åå ãç¹å®ããããšã§ãåããŠå¹æã®ãã察çã«ãã©ãçãããšãã§ããŸããã
ãŸããSolr ã®èšå®ãå
éšã®æåããããããŠç¢ºèªããè¯ãæ©äŒã«ããªãã
ãSolr ãã©ã䜿ãããã ãã§ãªãã
ãSolr ãã©ãåããŠãããããçè§£ããéèŠæ§ãåèªèããŸããã
ä»åã®æ¹åã§å€§ããªå¹æã¯åŸãããŸãããããŸã æãå ¥ããããäœå°ã¯æ®ã£ãŠããŸãã
äŸãã°ã
- ãã£ãŒã«ãå®çŸ©ã®æé©å
- äžèŠãª stored field ã®èŠçŽã
- ã€ã³ããã¯ã¹æ§é ã®æŽç
ãªã©ãã¹ããŒãã¬ãã«ã§ã®æ¹åã«ãä»åŸåãçµãã§ãããããšèããŠããŸãã
ããããSolr ã®åŠçãé ããã©ãã©ãããæãä»ããŠãããåãããªãããšããç¶æ³ã«çŽé¢ããŠããæ¹ãããã°ã
- åå ã®ç¹å®æ¹æ³
- ããã«ããã¯ã®åãåãæ¹
- æ¹åã®é²ãæ¹
ãšãã£ãç¹ã§ã
ãã®èšäºãå°ãã§ãåèã«ãªãã°å¬ããã§ãã
ã©ã€ãã³ãŒãã§ã¯ããšã³ãžãã¢ãç©æ¥µæ¡çšäžïŒ
ã©ã€ãã³ãŒãã§ã¯ããšã³ãžãã¢ãç©æ¥µæ¡çšããŠããŸãïŒã«ãžã¥ã¢ã«é¢è«çãããããŸãã®ã§ãããããã¯æ¡çšæ å ±ãã確èªãã ããã
æ¡çšæ å ±ãž

ç¢éå¥å€ªéã§ãã ãã¹ã±ããããŒã«ãšãé ãšæŒ«ç»ã奜ãã§ãã ä¿®è¡ã®æ¥ã ã§ãã
ããããèšäº
ãšã³ãžãã¢å€§åéäžïŒ
ã©ã€ãã³ãŒãã§ã¯ããšã³ãžãã¢ãç©æ¥µæ¡çšäžã§ãã
ç¹ã«ãWEBãšã³ãžãã¢ãšã¢ãã€ã«ãšã³ãžãã¢ã¯æ¯éãå¿åãåŸ ã¡ããŠãããŸãïŒ
ãŸããããªãŒã©ã³ã¹ãšã³ãžãã¢æ§ã倧åéäžã§ãã





