SlideShare a Scribd company logo
Производительность параметрического поиска на основе опенсорс-платформы
Производительность
параметрического поиска
на основе опенсорс-
Николай Караман, Максим Терновой
Зачем нам поисковые
движки?
хАчу свой интернет-магазин!!!
Есть интернет-магазин
〉 много разных товаров с разными свойствами
〉 полнотекстовый поиск по названиям/описанию товара
〉 вычислять статистику
〉 учитывать «историю» пользователя
〉 выдавать ответ за приемлемое время
Базы данных с этим справятся плохо:(
4
Search engine спешит на помощь!
〉 Solr
〉 ElasticSearch
〉 Splunk
〉 MarkLogic
〉 Sphnix
…
http://db-engines.com/en/ranking/search+engine 5
Наш выбор – Solr
Solr
〉 open-source платформа полнотекстового поиска
〉 под капотом Apache Lucene
〉 является самым популярным поисковым движком
7
А почему не Lucene?
8
Lucene vs Solr
Many people new to Lucene and Solr will ask the obvious
question: Should I use Lucene or Solr?
The answer is simple: if you're asking yourself this question,
in 99% of situations, what you want to use is Solr.
http://www.lucenetutorial.com/lucene-vs-solr.html 9
http://www.lucenetutorial.com/lucene-vs-solr.html
A simple way to conceptualize the
relationship between Solr and Lucene is
that of a car and its engine. You can't drive
an engine, but you can drive a car.
Lucene vs Solr
Lucene – библиотека
Solr – приложение «из коробки»
11
Возможности Solr
〉 полнотекстовый поиск
〉 подсветка результатов
〉 фасетный поиск
〉 динамическая кластеризация
〉 интеграция с базами данных
〉 обработка документов со сложным форматом
(например, Word, PDF)
12
Пару слов про настройку Solr
Где скачать
http://lucene.apache.org/solr/mirrors-solr-latest-redir.html
Как установить
https://wiki.apache.org/solr/SolrInstall
13
Запросы в Solr
Анализаторы запросов (Query Parsers)
преобразуют текстовый запрос в запрос
соответствующий объектам Lucene Query
задать парсер
〉 defType параметр
defType=lucene
〉 локальный параметр
{!dismax}
15
Встроенные анализаторы
〉lucene – по умолчанию
〉dismax – позволяет запросы по многим полям с
разным весом
〉edismax – расширенный dismax
〉func
〉boost
〉….
https://wiki.apache.org/solr/QueryParser 16
Синтаксис запроса
Что скрывается за этими буквами?
〉 q
〉 fq
〉 facet
18
q
q – запрос вида: os:MACOS AND price:[* TO 2000]
〉 fq
〉 facet
19
fq
〉 q =os:MACOS AND price:[* TO 2000]
fq - фильтрующий запрос
1. q=*:*&fq=os:MACOS AND price:[* TO 2000]
2. q=*:*&fq=os:MACOS&fq=price:[* TO 2000]
〉 facet
20
Зачем такое дублирование?
q – с учетом score
fq – без учета score => fq быстрее
21
График сравнения query и filterQuery
src/test/java/com/yandex/java/party/shop/FqAgainsQTest.java 22
0
17,5
35
52,5
70
fq q
время выполнения 200K запросов при 8 фильтрах, однопоточнСекунд
facet
Отдельный определяющий аспект
пространства значений
Каждый аспект характеризует
пространство значений вдоль
какой-либо независимой оси или
измерения
http://wiki.iis.ru/wiki/Фасет 23
facet
〉 q
〉 fq
facet
〉 facet.field
〉 facet.prefix
〉 facet.query
〉 facet.pivot
24
facet.field
〉 q
〉 fq
facet
facet.field=os
〉 facet.prefix
〉 facet.query
〉 facet.pivot
25
facet.prefix
〉 q
〉 fq
facet
facet.field=os
facet.prefix=WINDOWS
〉 facet.query
〉 facet.pivot
26
facet.query
〉 q =os:MACOS AND price:[* TO 2000]
〉 fq
facet
〉 facet.field
〉 facet.prefix
facet.query=height:[* TO 150]
〉 facet.pivot
27
facet.pivot
〉 q
〉 fq
facet
〉 facet.field
〉 facet.prefix
〉 facet.query
facet.pivot=os,year,…
28
Немного примеров на живом Solr (админка)
http://localhost:8983/solr/#/shop/query 29
И вроде все хорошо,
но…
Какие же проблемы возникают
〉 медленная работа при получении данных
〉 не для всех фасетов все фильтры
〉 не хватает facet.prefix
〉 нужно учитывать «историю» пользователя
31
Медленная работа при получении данных
Solr – не система хранения, это система для индексации и
поиска!
32
33
src/test/java/com/yandex/java/party/shop/MysqlGettingTest.java src/test/java/com/yandex/java/party/shop/SolrGettingTest.java
0
10
20
30
40
4 12 24 100 1000 2000
MYSQL
Solr
Секунд
Размер пачки
Solr vs MYSQL получение 200K элементов
по Х элементов (используя id)
Solr vs MYSQL немного больше параметров поиска
src/test/java/com/yandex/java/party/shop/SolrAgainsMysqlGettingTestManyParamters 34
Секунд
0
160
320
480
640
800
960
1120
1280
1440
1600
mysql solr
время выполнения 200K запросов при 8 фильтрах, однопоточно, по
1486
35
Но как быстро все таки ищет Solr
- А влияет на это размер индекса?
35
К примеру 100K запросов с 8 фильтрами…
Получение 100K id по запросу с фильтрами в
зависимости от размера индекса
src/test/java/com/yandex/java/party/shop/QueryTest.java
36
Секунд
Размер индекса
0
8,5
17
25,5
34
500K 1M 2M 4M
время выполнения 100K запросов с 8 параметрами, однопоточно
Не для всех фасетов все фильтры
Не хотим учитывать цену в фасете по годам.
q=*:*&fq=os:MACOS&fq=price:[* TO 2000]&facet.field=years
q=*:*&fq=os:MACOS
&fq={!tag=price_tag}price:[* TO 2000]
&facet.field={!ex=price_tag}years
37
Как влияют теги на производительность
фасетов
src/test/java/com/yandex/java/party/shop/FacetTest.java 38
Секунд
0
100
200
300
400
500
Без тегов С тегами
Время для 100K запросов с 8 фасетами
Не хватает facet.prefix, но есть facet.query
Нужно учесть серийный номер с закодированным цветом или
же найти количество определенных вещей:
year:[2010 TO 2015] AND ram:[8 TO 12] AND owner:/.*Her.*/"
НО: facet.query не многопоточный пока:(
39
На сколько facet.query быстр?
src/test/java/com/yandex/java/party/shop/FacetTest.java 40
15
19,2
23,4
27,6
31,8
36
1 2 4 8
с тегами
без тегов
Секунд
Facet Query в одном запросе
100K запросов
Нужно учитывать «историю» пользователя
Хочу купить!
〉 Вывести с учетом фильтров, которые просмотрел/
выбрал/купил. А что если их больше 1000?
〉 Не выводить, которые просмотрел/выбрал/купил. И
опять же больше 1000!
41
Выводить с учетом фильтров
42
«Желанные товары, должны быть 

в начале поисковой выдачи», говорили они
А что если «желалок» много?
Смотря на сколько
Как бы выглядели подобные запросы?
43
q=*%3A*&limit=12&offset=46&fq=year%3A%28%221999%22%29&fq=is_free_shipping%3A%28%22true%22%29&fq=graphic_adapter%3A
%28%22ARM+Mali-T760%22%29&fq=color%3A%28%22Black%22%29&fq=location%3A%28%22CHINA%22%29&fq=os%3A%28%22MacOs
%22%29&fq=storage_type%3A%28%22CD%22%29&fq=manufactured_in_city%3A%28%22Kiev%22%29&fq=id%3A
%28745044+150655+654386+96643+720589+539414+299652+520272+289108+551627+83837+49092+512823+449487+751968+263210+39318
4+192611+937748+189766+201049+409053+485720+868563+364079+827460+608443+696274+706465+706148+868334+814274+68423+67379
3+227055+483215+638204+447773+835321+257405+569050+675653+331887+414714+212005+252369+476497+54924+475628+505340+4638
00+259425+988975+744874+614420+850365+646403+810301+948395+466020+915456+827734+591687+418190+684721+392407+929494+59
5189+108977+41683+19010+490934+363326+177203+456386+668946+480791+746274+515179+690288+902657+308506+154556+480277+22
3309+585100+795848+720235+304557+755958+755461+367772+94107+893517+638598+426080+807437+131045+925255+187938+596366+3
91724+323633+629939+646436+662786+990833+925361+595827+215784+33321+903755+343186+633119+421082+776447+810374+705331+8
87675+908318+238245+859773+877837+334673+587335+325171+844978+5917+816251+543908+879951+402703+822408+771204+681177+87
4421+897696+753330+109102+873754+450216+759885+849343+31332+669469+485518+678774+477750+774354+38843+122058+950977+45
1747+956756+678819+578293+517789+513042+83980+881812+665169+493494+538890+898710+594116+751579+561832+882199+902086+49
8571+353318+589182+207314+160343+676971+657597+928936+189316+950723+812690+287199+573909+117120+125536+267361+586201+8
83775+61882+905887+531929+259845+528074+517591+168795+888833+457907+692268+781542+236931+946449+168709+985315+26313+3
43041+153917+4016+570144+696623+704453+189989+297214+414314+195445+109684+758562+431191+197008+37538+436833+122759+416
905+433978+999644+526498+935995+9998+73079+641612+738138+844904+526766+784234+629673+458027+455283+647791+819571+1617
6+459625+556043+278398+6891+125105+510487+136548+26066+302307+491523+455440+530322+372340+605337+228046+77965+557263+
779416+880931+526308+181754+490003+430891+550993+890562+377247+446861+139870+283759+356579+185707+804269+323319+157097
+413721+284364+192535+661775+965084+932195+314572+705707+885878+130290+687176+143577+17641+207914+862781+916736+35588
1+424167+872562+507526+248844+83499+35006+716268+844720+585634+504486+812618+750735+947712+289875+565280+176836+82321
0+206490+439921+313986+654616+487771+950328+573913+137704+211804+52653+438096+964650+790409+474877+104865+311559+47161
4+476655+131447+120515+829642+355741+570968+436883+314489+722880+29518+528926+27717+600247+450313+9378+435926+231626+
35400+802167+336779+568958+476819+125510+156080+884736+883460+238300+608856+581064+740925+475692+547312+658882+984941
+266591+998629+99293+118513+671589+182193+43416+863221+540394+107668+488708+863529+653383+942879+490630+731715+929490+
179013+997587+58778+860379+730898+949367+578149+56208+985687+963959+10164+537498+249523+937237+864398+381655+921577+2
39411+25371+533819+366166+36695+47186+14192+450999+515793+575252+600483+559035+746230+328760+796671+392156+800208+6072
57+554083+210043+408316+698627+875110+445356+255801+254080+816170+314492+340863+376978+216076+568789+79684+165754+7816
95+181039+64085+616319+448756+859563+530911+833361+891068+578399+850711+556077+973661+572221+250572+542093+451242+2627
18+202677+104078+842846+745168+593077+243799+796101+685466+345955+184207+305687+346599+239441+885417+728553+710651+46
7177+112650+726423+553917+530687+944561+465027+990139+641205+324716+255164+792897+679520+303884+926089+314953+282035+1
98142+903823+621627+797933+695757+65427+335470+962306+678627+549719+738860+613898+757610+832340+470239+699860+705261+
63399+972008+826424+487379+547446+567908+431271+685756%29&sort=year+asc%2Cprice+asc%2Cbase_price+asc%2Cid+asc
500 ids:
Как бы выглядели подобные запросы?
44
1000 ids:q=*%3A*&limit=12&offset=19&fq=year%3A%28%221996%22%29&fq=is_free_shipping%3A%28%22true%22%29&fq=graphic_adapter%3A%28%22Amd%22%29&fq=color%3A%28%22WHO+KNOWS%3F%22%29&fq=location%3A%28%22USA%22%29&fq=os%3A
%28%22Windows%22%29&fq=storage_type%3A%28%22WHO+KNOWS%3F%22%29&fq=manufactured_in_city%3A%28%22Paris%22%29&fq=id%3A
%2881201+387157+955839+537448+257298+957836+213542+43934+489038+222336+187761+269044+875755+696484+294845+803004+178071+229714+826747+136867+928540+616502+727577+564158+110072+480792+497353+339159+225401+791355+
125133+972987+514921+118371+656018+306219+696665+27891+345083+866248+146961+540296+266336+416950+257205+282630+62985+458779+512164+602785+73025+143233+676640+352166+603993+628690+995355+11531+49358+115794+829521+
28701+26276+919822+254364+542426+251347+658854+213413+538408+427765+40223+364442+592600+508337+192796+732416+515392+286270+12052+569595+328630+405327+227078+205524+190405+545212+922894+346513+622505+979747+704690
+641546+459224+624135+759548+838171+450330+6568+643933+198180+995099+221572+958566+873661+743817+889484+721869+512549+292299+443850+886182+96543+513300+867437+854212+349161+464594+252496+636330+281650+501254+3717
0+294721+304639+366687+146914+517408+50198+579477+448612+883730+89816+775660+545993+855630+867998+888915+51431+914443+696764+311459+459755+223614+470560+445575+544882+7144+666566+943287+559333+220419+985003+92460
1+714887+427149+198729+681018+243847+11034+925150+857982+403233+112638+587057+100581+475825+676783+888656+145151+310208+561958+613276+143279+623623+547657+267499+682774+640213+403092+963156+111694+248853+759045+8
18772+53418+594743+10234+135961+960370+979861+858583+956709+151013+848587+899885+511837+625864+609580+741464+518492+619459+621080+551144+57502+237561+126329+843650+849193+532473+699621+967608+508422+650070+573129
+881737+345092+48880+505823+868399+210355+813955+30990+647611+280044+137898+816823+351015+589590+706381+169334+656395+471543+834456+250374+125270+691610+753037+795393+850674+746749+166811+231304+919284+737632+460
475+355544+694622+927872+971746+65976+718297+866053+572140+699907+473575+283054+145235+509957+974538+626436+400597+44011+357809+993313+741430+169054+443323+428121+920277+955691+384095+338081+377204+935130+416678+
626770+342102+283568+670478+955106+183833+884211+652827+284044+380241+971400+104070+681720+698582+19695+928671+594355+282404+747536+841774+784186+577452+851844+796764+757278+511959+824818+267222+676903+944005+144
937+683615+617267+177195+445897+424770+736457+545454+246595+5729+551385+54522+896231+548890+555556+446582+995948+839981+188389+149929+341872+693607+782631+935956+713148+65148+679127+486577+579971+976986+16899+292
310+132553+159613+506404+994375+178459+40634+843043+129961+483709+982932+325940+747504+606473+345693+634104+874878+438985+969317+518037+622701+306115+45863+504681+847541+514181+818617+636950+163237+770656+857228+
819623+170936+113607+966507+881125+105916+794445+421021+950727+423923+138394+780043+512356+891257+731606+244036+884868+653812+552738+919534+691300+676726+351295+766410+153076+14247+564607+548803+379310+24948+3393
29+759277+786195+544349+463255+776990+52389+531284+957129+800415+942994+227592+279235+715837+616570+985698+794122+323191+184410+233369+626627+795206+905489+369550+868770+348215+180337+716473+155946+146709+135996+
304638+560265+665780+858919+873136+451527+732505+427317+461563+679755+297479+838138+977984+241998+68387+568422+953432+78704+250397+333432+727191+790896+407387+760546+43013+895745+833700+444729+172837+201043+61127
1+377323+668696+17440+504858+5615+405365+954105+884489+716243+639321+914170+210402+146796+578286+424629+966048+24769+432541+191986+212341+313327+285988+145571+744996+168153+441849+833298+387834+791458+643489+4618
43+26804+90196+774655+9774+590942+251355+578620+5480+700457+772636+871377+382911+802067+440989+771705+605478+116053+261922+234810+662230+302648+707030+477846+173955+256729+783095+657031+353929+137701+801503+67632
7+958656+922021+89777+682877+674917+717473+913668+628235+97093+194674+2611+34289+901486+156675+662193+314246+729884+976444+693477+902740+467695+482973+453754+459957+997287+383027+17493+633895+382631+509320+203825
+75117+395636+73555+641652+153628+275442+322325+405441+74708+783623+597349+67662+502592+617069+257942+812097+945246+161731+908148+141901+997738+409241+308227+138409+778679+769673+915817+28570+694447+10016+184696+
32764+236716+713734+840825+494310+547038+887184+274493+899691+29466+159405+70428+469496+48204+738907+405569+873568+583149+166965+408814+800115+149323+206593+873937+827167+267942+576309+297612+169438+311810+916813
+305988+663+789795+527502+234871+726182+252505+648233+87822+963674+364608+673236+465170+867998+113670+925374+221057+418284+508655+568137+203705+443789+660437+89795+411708+977723+983759+826092+46219+478221+349916+
244028+718371+381535+907594+343324+822688+227596+946552+604257+319487+321306+193276+954575+937481+704124+605678+238112+509731+534586+37587+547160+840030+149783+981563+126425+420844+17406+564332+11442+648166+40512
1+1531+144737+615645+369862+821968+547488+473364+199687+702711+730880+64717+565734+245945+786351+337501+711894+877084+573107+581101+70749+599213+671240+298268+767056+503429+204374+790650+605825+102835+981087+1137
90+387534+741507+881739+93291+376390+586493+979099+977263+81636+272338+632403+294933+872397+984601+69283+630409+384127+142112+528030+724759+120895+466681+97475+794836+150537+74885+982878+494867+768414+303522+7919
20+998965+311184+465505+878690+536389+816568+394585+934700+622858+576379+335115+184495+895726+33380+857494+309059+891066+591572+724391+828362+242909+35878+447895+910320+964918+359773+90523+513187+317734+412074+97
3923+457815+401348+510371+849825+198605+547234+780749+67372+938539+88716+418973+11284+832725+442694+50195+468110+648857+84006+903872+212087+107935+197009+441007+567313+636809+670609+448557+906507+58546+766556+597
440+575292+255055+709919+363983+977199+310902+930950+640688+245762+819248+719826+520053+274797+388958+540324+317290+526551+828136+813389+190236+895065+623227+813490+943565+912339+101648+352749+41107+796875+878426
+284616+411510+447007+951922+884005+522236+632072+647037+581626+457178+703017+481235+858223+364215+369606+959273+575441+799803+521658+575844+706792+658752+743126+169316+899740+396534+987723+890804+424980+473285+8
13867+979670+807457+969371+23813+325010+774551+670269+502436+87971+742461+187971+62528+364013+399549+836854+795153+62425+915156+138118+371203+50659+503027+340484+576244+456541+546114+402037+229136+255303+598347+5
5442+990453+288931+199392+606107+585383+351046+754628+19863+574407+170796+581928+697699+656191+974996+147680+798293+989472+579253+165174+699061+944023+310782+44917+412353+435459+338132+178568+19441+147174+340295+
88989+165153+474139+535088+746491+998514+74939+436846+872477+485607+700927+802264+580942+410449+276515+987870+732577+315010+589616+421398+972094+910544+264825+533917+443831+363850+920247+775899+790648+540243+6752
97+16587+872881+709158+105318+245448+589075+523081+678598+732670+43458+972315+855474+933960+109033+16474+848995+570834+327992+636233+854599+848366+755253+218973+319261+384487+293568+940861+851668+388169+17815+757
247+174307+816633+912532+621594+535644+796578+888788+35320+690844+217393+745102+959387+732347+40475+702740+478918%29&sort=year+asc%2Cprice+asc%2Cbase_price+asc%2Cid+asc
Запрос с дополнительными фильтрами по id
src/test/java/com/yandex/java/party/shop/QueryWithALotOfParameters.java
45
0
17,5
35
52,5
70
500 1000 1500 2000 2500 3000
5K запросов
ids в запросе
Секунд
А если разбить на подзапросы и
src/test/java/com/yandex/java/party/shop/QueryWithALotOfParameters.java 46
0
17,5
35
52,5
70
500 1000 1500 2000 2500 3000
1 запрос
2 запроса
4 запроса
ids в запросе
Секунд
Не выводить
«Уже купленные товары - не отображать», говорили
они.
Не получится разбить! Как быть?!
Индексация пользователя в каждый товар :)
47
А на сколько же быстра индексация в Solr?
1М объектов по X
src/test/java/сom/yandex/java/party/shop/SolrInsertTest.java 48
Секунд
Размер пачки
0
160
320
480
640
800
100 500 1К 2К 5К 10К 20К
Время добавления 1М объектов
А индексировать больше миллиона можно?
src/test/java/сom/yandex/java/party/shop/SolrInsertTest.java 49
0
400
800
1200
1600
500к 1М 2М 3М 4М 5М 6М 7М 8М 9М 10М 11М
Количество элементов
Секунд
Ок, все вроде хорошо
А как потом это тестировать?
50
Embedded server
File solrHome = new File( "path/solr" );

File configFile = new File( solrHome, "solr.xml" );

CoreContainer coreContainer =
CoreContainer.createAndLoad(
solrHome.toString(),
configFile );
SolrServer solr =
new EmbeddedSolrServer(
coreContainer,
"collectionName" );
51
<dependency>

<groupId>org.apache.solr</groupId>

<artifactId>solr-solrj</artifactId>

<version>4.10.4</version>

</dependency>
Подведем итоги!
〉Solr — мощная система
〉много мест для оптимизации
〉определенно стоит попробовать в своих проектах!
52
〉 https://wiki.apache.org/solr/
〉 Solr in Action, Trey Grainger and Timothy Potter
Исходный код:
〉 https://bitbucket.org/nkaraman/javapartyshop/src
53
Почитать/посмотреть
Спасибо!
Вопросы?
56
Николай Караман
Разработчик
Контакты
astral@yandex-team.ru
Максим Терновой
Разработчик
ternovoy@yandex-team.ru

More Related Content

PPTX
MyRocks: табличный движок для MySQL на основе RocksDB
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PPTX
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
PPT
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
MyRocks: табличный движок для MySQL на основе RocksDB
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
2014.12.23 Александр Андреев, Parallels
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...

What's hot (20)

PDF
MariaDB 10.1 - что нового.
PDF
Алексей Захаров "Архитектура Яндекс.Фоток"
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
PPTX
django-and-postgresql
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
PDF
Класс!ная Cassandra
PDF
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
PPTX
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
PDF
Call of Postgres: Advanced Operations (part 3)
PDF
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
PDF
Database First! О распространённых ошибках использования РСУБД
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
PDF
Лекция 10. Apache Mahout
PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
MariaDB 10.1 - что нового.
Алексей Захаров "Архитектура Яндекс.Фоток"
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
django-and-postgresql
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Класс!ная Cassandra
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Call of Postgres: Advanced Operations (part 3)
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
Database First! О распространённых ошибках использования РСУБД
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Лекция 10. Apache Mahout
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Ad

Viewers also liked (20)

PPT
системный анализ и реинжиниринг
PDF
code4russia
PPTX
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
PDF
Александр Воинов - Тренды Web
PPTX
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
PPTX
Lucene in odnoklassniki.ru
PDF
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
PPTX
Поиск на своем сайте, обзор open source решений
PDF
Индексируй неиндексирумое
PDF
Симаков Алексей - Системы управления кластерами
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
вера сивакова
PDF
Руководство по стилю документации: зачем и как, Татьяна Грачёва
PDF
Мобильная Яндекс.Почта — Дмитрий Александров
PDF
Антон Качалов - Популярно об IPMI и UEFI
PDF
Михаил Трошев — Инструменты веб-разработки
PDF
Дмитрий Васильев - Задачи ассиметричной криптографии
PDF
Большие данные в физике элементарных частиц на примере LHCb - Guy Wilkinson, ...
PDF
Коллективная разработка документации: от индивидуального авторства к командн...
PDF
Как делается Яндекс.Браузер — Михаил Лопаткин
системный анализ и реинжиниринг
code4russia
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Александр Воинов - Тренды Web
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Lucene in odnoklassniki.ru
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Поиск на своем сайте, обзор open source решений
Индексируй неиндексирумое
Симаков Алексей - Системы управления кластерами
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
вера сивакова
Руководство по стилю документации: зачем и как, Татьяна Грачёва
Мобильная Яндекс.Почта — Дмитрий Александров
Антон Качалов - Популярно об IPMI и UEFI
Михаил Трошев — Инструменты веб-разработки
Дмитрий Васильев - Задачи ассиметричной криптографии
Большие данные в физике элементарных частиц на примере LHCb - Guy Wilkinson, ...
Коллективная разработка документации: от индивидуального авторства к командн...
Как делается Яндекс.Браузер — Михаил Лопаткин
Ad

Similar to Производительность параметрического поиска на основе опенсорс-платформы (20)

PDF
Как читать и интерпретировать вывод команды EXPLAIN
PDF
OpenSource SQL Databases Enter Millions Queries per Second Era
ODP
Adymo Barcamp Presentation Faster Higher Sql
ODP
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
PDF
Anton Tsitou "Cycle ORM and Graphs"
PDF
Pavel Dovbush Toster
PDF
React со скоростью света: не совсем обычный серверный рендеринг
PDF
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
PDF
2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса
PDF
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
PDF
Борис Павлович - Производительность и масштабируемость OpenStack
PPTX
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
PDF
Олег Годовых «Страх и ненависть в Event Bus»
PDF
Страх и ненависть в Event Bus
PDF
Семь тысяч Rps, один go
PDF
PostgreSQL performance recipes
PDF
10M tests per day
PPTX
How optimize PL/SQL by decrease overhead for context switching between SQL an...
PDF
Как выглядит современный фронтенд
PDF
[jeeconf-2011] Java Platform Performance BoF
Как читать и интерпретировать вывод команды EXPLAIN
OpenSource SQL Databases Enter Millions Queries per Second Era
Adymo Barcamp Presentation Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Anton Tsitou "Cycle ORM and Graphs"
Pavel Dovbush Toster
React со скоростью света: не совсем обычный серверный рендеринг
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Борис Павлович - Производительность и масштабируемость OpenStack
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
Олег Годовых «Страх и ненависть в Event Bus»
Страх и ненависть в Event Bus
Семь тысяч Rps, один go
PostgreSQL performance recipes
10M tests per day
How optimize PL/SQL by decrease overhead for context switching between SQL an...
Как выглядит современный фронтенд
[jeeconf-2011] Java Platform Performance BoF

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
PDF
Эталонное описание фильма на основе десятков дубликатов
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Эталонное описание фильма на основе десятков дубликатов

Производительность параметрического поиска на основе опенсорс-платформы

  • 2. Производительность параметрического поиска на основе опенсорс- Николай Караман, Максим Терновой
  • 4. хАчу свой интернет-магазин!!! Есть интернет-магазин 〉 много разных товаров с разными свойствами 〉 полнотекстовый поиск по названиям/описанию товара 〉 вычислять статистику 〉 учитывать «историю» пользователя 〉 выдавать ответ за приемлемое время Базы данных с этим справятся плохо:( 4
  • 5. Search engine спешит на помощь! 〉 Solr 〉 ElasticSearch 〉 Splunk 〉 MarkLogic 〉 Sphnix … http://db-engines.com/en/ranking/search+engine 5
  • 7. Solr 〉 open-source платформа полнотекстового поиска 〉 под капотом Apache Lucene 〉 является самым популярным поисковым движком 7
  • 9. Lucene vs Solr Many people new to Lucene and Solr will ask the obvious question: Should I use Lucene or Solr? The answer is simple: if you're asking yourself this question, in 99% of situations, what you want to use is Solr. http://www.lucenetutorial.com/lucene-vs-solr.html 9
  • 10. http://www.lucenetutorial.com/lucene-vs-solr.html A simple way to conceptualize the relationship between Solr and Lucene is that of a car and its engine. You can't drive an engine, but you can drive a car.
  • 11. Lucene vs Solr Lucene – библиотека Solr – приложение «из коробки» 11
  • 12. Возможности Solr 〉 полнотекстовый поиск 〉 подсветка результатов 〉 фасетный поиск 〉 динамическая кластеризация 〉 интеграция с базами данных 〉 обработка документов со сложным форматом (например, Word, PDF) 12
  • 13. Пару слов про настройку Solr Где скачать http://lucene.apache.org/solr/mirrors-solr-latest-redir.html Как установить https://wiki.apache.org/solr/SolrInstall 13
  • 15. Анализаторы запросов (Query Parsers) преобразуют текстовый запрос в запрос соответствующий объектам Lucene Query задать парсер 〉 defType параметр defType=lucene 〉 локальный параметр {!dismax} 15
  • 16. Встроенные анализаторы 〉lucene – по умолчанию 〉dismax – позволяет запросы по многим полям с разным весом 〉edismax – расширенный dismax 〉func 〉boost 〉…. https://wiki.apache.org/solr/QueryParser 16
  • 18. Что скрывается за этими буквами? 〉 q 〉 fq 〉 facet 18
  • 19. q q – запрос вида: os:MACOS AND price:[* TO 2000] 〉 fq 〉 facet 19
  • 20. fq 〉 q =os:MACOS AND price:[* TO 2000] fq - фильтрующий запрос 1. q=*:*&fq=os:MACOS AND price:[* TO 2000] 2. q=*:*&fq=os:MACOS&fq=price:[* TO 2000] 〉 facet 20
  • 21. Зачем такое дублирование? q – с учетом score fq – без учета score => fq быстрее 21
  • 22. График сравнения query и filterQuery src/test/java/com/yandex/java/party/shop/FqAgainsQTest.java 22 0 17,5 35 52,5 70 fq q время выполнения 200K запросов при 8 фильтрах, однопоточнСекунд
  • 23. facet Отдельный определяющий аспект пространства значений Каждый аспект характеризует пространство значений вдоль какой-либо независимой оси или измерения http://wiki.iis.ru/wiki/Фасет 23
  • 24. facet 〉 q 〉 fq facet 〉 facet.field 〉 facet.prefix 〉 facet.query 〉 facet.pivot 24
  • 25. facet.field 〉 q 〉 fq facet facet.field=os 〉 facet.prefix 〉 facet.query 〉 facet.pivot 25
  • 27. facet.query 〉 q =os:MACOS AND price:[* TO 2000] 〉 fq facet 〉 facet.field 〉 facet.prefix facet.query=height:[* TO 150] 〉 facet.pivot 27
  • 28. facet.pivot 〉 q 〉 fq facet 〉 facet.field 〉 facet.prefix 〉 facet.query facet.pivot=os,year,… 28
  • 29. Немного примеров на живом Solr (админка) http://localhost:8983/solr/#/shop/query 29
  • 30. И вроде все хорошо, но…
  • 31. Какие же проблемы возникают 〉 медленная работа при получении данных 〉 не для всех фасетов все фильтры 〉 не хватает facet.prefix 〉 нужно учитывать «историю» пользователя 31
  • 32. Медленная работа при получении данных Solr – не система хранения, это система для индексации и поиска! 32
  • 33. 33 src/test/java/com/yandex/java/party/shop/MysqlGettingTest.java src/test/java/com/yandex/java/party/shop/SolrGettingTest.java 0 10 20 30 40 4 12 24 100 1000 2000 MYSQL Solr Секунд Размер пачки Solr vs MYSQL получение 200K элементов по Х элементов (используя id)
  • 34. Solr vs MYSQL немного больше параметров поиска src/test/java/com/yandex/java/party/shop/SolrAgainsMysqlGettingTestManyParamters 34 Секунд 0 160 320 480 640 800 960 1120 1280 1440 1600 mysql solr время выполнения 200K запросов при 8 фильтрах, однопоточно, по 1486 35
  • 35. Но как быстро все таки ищет Solr - А влияет на это размер индекса? 35 К примеру 100K запросов с 8 фильтрами…
  • 36. Получение 100K id по запросу с фильтрами в зависимости от размера индекса src/test/java/com/yandex/java/party/shop/QueryTest.java 36 Секунд Размер индекса 0 8,5 17 25,5 34 500K 1M 2M 4M время выполнения 100K запросов с 8 параметрами, однопоточно
  • 37. Не для всех фасетов все фильтры Не хотим учитывать цену в фасете по годам. q=*:*&fq=os:MACOS&fq=price:[* TO 2000]&facet.field=years q=*:*&fq=os:MACOS &fq={!tag=price_tag}price:[* TO 2000] &facet.field={!ex=price_tag}years 37
  • 38. Как влияют теги на производительность фасетов src/test/java/com/yandex/java/party/shop/FacetTest.java 38 Секунд 0 100 200 300 400 500 Без тегов С тегами Время для 100K запросов с 8 фасетами
  • 39. Не хватает facet.prefix, но есть facet.query Нужно учесть серийный номер с закодированным цветом или же найти количество определенных вещей: year:[2010 TO 2015] AND ram:[8 TO 12] AND owner:/.*Her.*/" НО: facet.query не многопоточный пока:( 39
  • 40. На сколько facet.query быстр? src/test/java/com/yandex/java/party/shop/FacetTest.java 40 15 19,2 23,4 27,6 31,8 36 1 2 4 8 с тегами без тегов Секунд Facet Query в одном запросе 100K запросов
  • 41. Нужно учитывать «историю» пользователя Хочу купить! 〉 Вывести с учетом фильтров, которые просмотрел/ выбрал/купил. А что если их больше 1000? 〉 Не выводить, которые просмотрел/выбрал/купил. И опять же больше 1000! 41
  • 42. Выводить с учетом фильтров 42 «Желанные товары, должны быть 
 в начале поисковой выдачи», говорили они А что если «желалок» много? Смотря на сколько
  • 43. Как бы выглядели подобные запросы? 43 q=*%3A*&limit=12&offset=46&fq=year%3A%28%221999%22%29&fq=is_free_shipping%3A%28%22true%22%29&fq=graphic_adapter%3A %28%22ARM+Mali-T760%22%29&fq=color%3A%28%22Black%22%29&fq=location%3A%28%22CHINA%22%29&fq=os%3A%28%22MacOs %22%29&fq=storage_type%3A%28%22CD%22%29&fq=manufactured_in_city%3A%28%22Kiev%22%29&fq=id%3A %28745044+150655+654386+96643+720589+539414+299652+520272+289108+551627+83837+49092+512823+449487+751968+263210+39318 4+192611+937748+189766+201049+409053+485720+868563+364079+827460+608443+696274+706465+706148+868334+814274+68423+67379 3+227055+483215+638204+447773+835321+257405+569050+675653+331887+414714+212005+252369+476497+54924+475628+505340+4638 00+259425+988975+744874+614420+850365+646403+810301+948395+466020+915456+827734+591687+418190+684721+392407+929494+59 5189+108977+41683+19010+490934+363326+177203+456386+668946+480791+746274+515179+690288+902657+308506+154556+480277+22 3309+585100+795848+720235+304557+755958+755461+367772+94107+893517+638598+426080+807437+131045+925255+187938+596366+3 91724+323633+629939+646436+662786+990833+925361+595827+215784+33321+903755+343186+633119+421082+776447+810374+705331+8 87675+908318+238245+859773+877837+334673+587335+325171+844978+5917+816251+543908+879951+402703+822408+771204+681177+87 4421+897696+753330+109102+873754+450216+759885+849343+31332+669469+485518+678774+477750+774354+38843+122058+950977+45 1747+956756+678819+578293+517789+513042+83980+881812+665169+493494+538890+898710+594116+751579+561832+882199+902086+49 8571+353318+589182+207314+160343+676971+657597+928936+189316+950723+812690+287199+573909+117120+125536+267361+586201+8 83775+61882+905887+531929+259845+528074+517591+168795+888833+457907+692268+781542+236931+946449+168709+985315+26313+3 43041+153917+4016+570144+696623+704453+189989+297214+414314+195445+109684+758562+431191+197008+37538+436833+122759+416 905+433978+999644+526498+935995+9998+73079+641612+738138+844904+526766+784234+629673+458027+455283+647791+819571+1617 6+459625+556043+278398+6891+125105+510487+136548+26066+302307+491523+455440+530322+372340+605337+228046+77965+557263+ 779416+880931+526308+181754+490003+430891+550993+890562+377247+446861+139870+283759+356579+185707+804269+323319+157097 +413721+284364+192535+661775+965084+932195+314572+705707+885878+130290+687176+143577+17641+207914+862781+916736+35588 1+424167+872562+507526+248844+83499+35006+716268+844720+585634+504486+812618+750735+947712+289875+565280+176836+82321 0+206490+439921+313986+654616+487771+950328+573913+137704+211804+52653+438096+964650+790409+474877+104865+311559+47161 4+476655+131447+120515+829642+355741+570968+436883+314489+722880+29518+528926+27717+600247+450313+9378+435926+231626+ 35400+802167+336779+568958+476819+125510+156080+884736+883460+238300+608856+581064+740925+475692+547312+658882+984941 +266591+998629+99293+118513+671589+182193+43416+863221+540394+107668+488708+863529+653383+942879+490630+731715+929490+ 179013+997587+58778+860379+730898+949367+578149+56208+985687+963959+10164+537498+249523+937237+864398+381655+921577+2 39411+25371+533819+366166+36695+47186+14192+450999+515793+575252+600483+559035+746230+328760+796671+392156+800208+6072 57+554083+210043+408316+698627+875110+445356+255801+254080+816170+314492+340863+376978+216076+568789+79684+165754+7816 95+181039+64085+616319+448756+859563+530911+833361+891068+578399+850711+556077+973661+572221+250572+542093+451242+2627 18+202677+104078+842846+745168+593077+243799+796101+685466+345955+184207+305687+346599+239441+885417+728553+710651+46 7177+112650+726423+553917+530687+944561+465027+990139+641205+324716+255164+792897+679520+303884+926089+314953+282035+1 98142+903823+621627+797933+695757+65427+335470+962306+678627+549719+738860+613898+757610+832340+470239+699860+705261+ 63399+972008+826424+487379+547446+567908+431271+685756%29&sort=year+asc%2Cprice+asc%2Cbase_price+asc%2Cid+asc 500 ids:
  • 44. Как бы выглядели подобные запросы? 44 1000 ids:q=*%3A*&limit=12&offset=19&fq=year%3A%28%221996%22%29&fq=is_free_shipping%3A%28%22true%22%29&fq=graphic_adapter%3A%28%22Amd%22%29&fq=color%3A%28%22WHO+KNOWS%3F%22%29&fq=location%3A%28%22USA%22%29&fq=os%3A %28%22Windows%22%29&fq=storage_type%3A%28%22WHO+KNOWS%3F%22%29&fq=manufactured_in_city%3A%28%22Paris%22%29&fq=id%3A %2881201+387157+955839+537448+257298+957836+213542+43934+489038+222336+187761+269044+875755+696484+294845+803004+178071+229714+826747+136867+928540+616502+727577+564158+110072+480792+497353+339159+225401+791355+ 125133+972987+514921+118371+656018+306219+696665+27891+345083+866248+146961+540296+266336+416950+257205+282630+62985+458779+512164+602785+73025+143233+676640+352166+603993+628690+995355+11531+49358+115794+829521+ 28701+26276+919822+254364+542426+251347+658854+213413+538408+427765+40223+364442+592600+508337+192796+732416+515392+286270+12052+569595+328630+405327+227078+205524+190405+545212+922894+346513+622505+979747+704690 +641546+459224+624135+759548+838171+450330+6568+643933+198180+995099+221572+958566+873661+743817+889484+721869+512549+292299+443850+886182+96543+513300+867437+854212+349161+464594+252496+636330+281650+501254+3717 0+294721+304639+366687+146914+517408+50198+579477+448612+883730+89816+775660+545993+855630+867998+888915+51431+914443+696764+311459+459755+223614+470560+445575+544882+7144+666566+943287+559333+220419+985003+92460 1+714887+427149+198729+681018+243847+11034+925150+857982+403233+112638+587057+100581+475825+676783+888656+145151+310208+561958+613276+143279+623623+547657+267499+682774+640213+403092+963156+111694+248853+759045+8 18772+53418+594743+10234+135961+960370+979861+858583+956709+151013+848587+899885+511837+625864+609580+741464+518492+619459+621080+551144+57502+237561+126329+843650+849193+532473+699621+967608+508422+650070+573129 +881737+345092+48880+505823+868399+210355+813955+30990+647611+280044+137898+816823+351015+589590+706381+169334+656395+471543+834456+250374+125270+691610+753037+795393+850674+746749+166811+231304+919284+737632+460 475+355544+694622+927872+971746+65976+718297+866053+572140+699907+473575+283054+145235+509957+974538+626436+400597+44011+357809+993313+741430+169054+443323+428121+920277+955691+384095+338081+377204+935130+416678+ 626770+342102+283568+670478+955106+183833+884211+652827+284044+380241+971400+104070+681720+698582+19695+928671+594355+282404+747536+841774+784186+577452+851844+796764+757278+511959+824818+267222+676903+944005+144 937+683615+617267+177195+445897+424770+736457+545454+246595+5729+551385+54522+896231+548890+555556+446582+995948+839981+188389+149929+341872+693607+782631+935956+713148+65148+679127+486577+579971+976986+16899+292 310+132553+159613+506404+994375+178459+40634+843043+129961+483709+982932+325940+747504+606473+345693+634104+874878+438985+969317+518037+622701+306115+45863+504681+847541+514181+818617+636950+163237+770656+857228+ 819623+170936+113607+966507+881125+105916+794445+421021+950727+423923+138394+780043+512356+891257+731606+244036+884868+653812+552738+919534+691300+676726+351295+766410+153076+14247+564607+548803+379310+24948+3393 29+759277+786195+544349+463255+776990+52389+531284+957129+800415+942994+227592+279235+715837+616570+985698+794122+323191+184410+233369+626627+795206+905489+369550+868770+348215+180337+716473+155946+146709+135996+ 304638+560265+665780+858919+873136+451527+732505+427317+461563+679755+297479+838138+977984+241998+68387+568422+953432+78704+250397+333432+727191+790896+407387+760546+43013+895745+833700+444729+172837+201043+61127 1+377323+668696+17440+504858+5615+405365+954105+884489+716243+639321+914170+210402+146796+578286+424629+966048+24769+432541+191986+212341+313327+285988+145571+744996+168153+441849+833298+387834+791458+643489+4618 43+26804+90196+774655+9774+590942+251355+578620+5480+700457+772636+871377+382911+802067+440989+771705+605478+116053+261922+234810+662230+302648+707030+477846+173955+256729+783095+657031+353929+137701+801503+67632 7+958656+922021+89777+682877+674917+717473+913668+628235+97093+194674+2611+34289+901486+156675+662193+314246+729884+976444+693477+902740+467695+482973+453754+459957+997287+383027+17493+633895+382631+509320+203825 +75117+395636+73555+641652+153628+275442+322325+405441+74708+783623+597349+67662+502592+617069+257942+812097+945246+161731+908148+141901+997738+409241+308227+138409+778679+769673+915817+28570+694447+10016+184696+ 32764+236716+713734+840825+494310+547038+887184+274493+899691+29466+159405+70428+469496+48204+738907+405569+873568+583149+166965+408814+800115+149323+206593+873937+827167+267942+576309+297612+169438+311810+916813 +305988+663+789795+527502+234871+726182+252505+648233+87822+963674+364608+673236+465170+867998+113670+925374+221057+418284+508655+568137+203705+443789+660437+89795+411708+977723+983759+826092+46219+478221+349916+ 244028+718371+381535+907594+343324+822688+227596+946552+604257+319487+321306+193276+954575+937481+704124+605678+238112+509731+534586+37587+547160+840030+149783+981563+126425+420844+17406+564332+11442+648166+40512 1+1531+144737+615645+369862+821968+547488+473364+199687+702711+730880+64717+565734+245945+786351+337501+711894+877084+573107+581101+70749+599213+671240+298268+767056+503429+204374+790650+605825+102835+981087+1137 90+387534+741507+881739+93291+376390+586493+979099+977263+81636+272338+632403+294933+872397+984601+69283+630409+384127+142112+528030+724759+120895+466681+97475+794836+150537+74885+982878+494867+768414+303522+7919 20+998965+311184+465505+878690+536389+816568+394585+934700+622858+576379+335115+184495+895726+33380+857494+309059+891066+591572+724391+828362+242909+35878+447895+910320+964918+359773+90523+513187+317734+412074+97 3923+457815+401348+510371+849825+198605+547234+780749+67372+938539+88716+418973+11284+832725+442694+50195+468110+648857+84006+903872+212087+107935+197009+441007+567313+636809+670609+448557+906507+58546+766556+597 440+575292+255055+709919+363983+977199+310902+930950+640688+245762+819248+719826+520053+274797+388958+540324+317290+526551+828136+813389+190236+895065+623227+813490+943565+912339+101648+352749+41107+796875+878426 +284616+411510+447007+951922+884005+522236+632072+647037+581626+457178+703017+481235+858223+364215+369606+959273+575441+799803+521658+575844+706792+658752+743126+169316+899740+396534+987723+890804+424980+473285+8 13867+979670+807457+969371+23813+325010+774551+670269+502436+87971+742461+187971+62528+364013+399549+836854+795153+62425+915156+138118+371203+50659+503027+340484+576244+456541+546114+402037+229136+255303+598347+5 5442+990453+288931+199392+606107+585383+351046+754628+19863+574407+170796+581928+697699+656191+974996+147680+798293+989472+579253+165174+699061+944023+310782+44917+412353+435459+338132+178568+19441+147174+340295+ 88989+165153+474139+535088+746491+998514+74939+436846+872477+485607+700927+802264+580942+410449+276515+987870+732577+315010+589616+421398+972094+910544+264825+533917+443831+363850+920247+775899+790648+540243+6752 97+16587+872881+709158+105318+245448+589075+523081+678598+732670+43458+972315+855474+933960+109033+16474+848995+570834+327992+636233+854599+848366+755253+218973+319261+384487+293568+940861+851668+388169+17815+757 247+174307+816633+912532+621594+535644+796578+888788+35320+690844+217393+745102+959387+732347+40475+702740+478918%29&sort=year+asc%2Cprice+asc%2Cbase_price+asc%2Cid+asc
  • 45. Запрос с дополнительными фильтрами по id src/test/java/com/yandex/java/party/shop/QueryWithALotOfParameters.java 45 0 17,5 35 52,5 70 500 1000 1500 2000 2500 3000 5K запросов ids в запросе Секунд
  • 46. А если разбить на подзапросы и src/test/java/com/yandex/java/party/shop/QueryWithALotOfParameters.java 46 0 17,5 35 52,5 70 500 1000 1500 2000 2500 3000 1 запрос 2 запроса 4 запроса ids в запросе Секунд
  • 47. Не выводить «Уже купленные товары - не отображать», говорили они. Не получится разбить! Как быть?! Индексация пользователя в каждый товар :) 47
  • 48. А на сколько же быстра индексация в Solr? 1М объектов по X src/test/java/сom/yandex/java/party/shop/SolrInsertTest.java 48 Секунд Размер пачки 0 160 320 480 640 800 100 500 1К 2К 5К 10К 20К Время добавления 1М объектов
  • 49. А индексировать больше миллиона можно? src/test/java/сom/yandex/java/party/shop/SolrInsertTest.java 49 0 400 800 1200 1600 500к 1М 2М 3М 4М 5М 6М 7М 8М 9М 10М 11М Количество элементов Секунд
  • 50. Ок, все вроде хорошо А как потом это тестировать? 50
  • 51. Embedded server File solrHome = new File( "path/solr" );
 File configFile = new File( solrHome, "solr.xml" );
 CoreContainer coreContainer = CoreContainer.createAndLoad( solrHome.toString(), configFile ); SolrServer solr = new EmbeddedSolrServer( coreContainer, "collectionName" ); 51 <dependency>
 <groupId>org.apache.solr</groupId>
 <artifactId>solr-solrj</artifactId>
 <version>4.10.4</version>
 </dependency>
  • 52. Подведем итоги! 〉Solr — мощная система 〉много мест для оптимизации 〉определенно стоит попробовать в своих проектах! 52
  • 53. 〉 https://wiki.apache.org/solr/ 〉 Solr in Action, Trey Grainger and Timothy Potter Исходный код: 〉 https://bitbucket.org/nkaraman/javapartyshop/src 53 Почитать/посмотреть