|
|
|
Как организовать периодическую индексацию объектов в ElasticSearch?
|
|||
|---|---|---|---|
|
#18+
Приветствую, ситуация вполне типичная: есть бизнес-приложение, база MS SQL + UI на WPF (т.е. проект на C#), в нем множество объектов различных типов, которые отображаются в гриде. Объектам соответствуют свои классы (используется ORM). Так вот, по объектам нужен поиск в UI, для чего прикручен Elastic Search. Для каждого бизнес-объекта есть свой поисковый объект, их надо заслать в ES для индексации. Причем делать это нужно при каждом изменении объекта. В проекте есть 2 точки изменений объектов: в UI, объекты меняются по одному, и при запуске некоторых операций, когда они могут менять миллионами. Дублировать код в этих двух точках не красиво, поэтому логично зацепиться за момент сохранения объекта в базу - и там отдавать в ES. Поскольку ES плохо переваривает, когда ему отдаются объекты по одному, нужно заслать пачкой. Тут есть как минимум 2 варианта: 1. Завести в базе таблицу, куда складывать запросы на индексацию, и некий сторонний сервис периодически выгребает оттуда объекты пачками и отдает в ES. 2. Сделать WCF-сервис, которому давать запрос на каждый объект, он накапливает в памяти некоторое количество объектов, или ждет по таймеру, и отдает их пачкой в ES. Первое проще, второе архитектурно красивее (наверно!). Есть у кого-нибудь опыт подобных задач, как лучше организовать синхронизацию? Или может вообще выгребать из базы по timestamp все обновившиеся объекты (сторонним сервисом), и засылать их в ES? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2013, 07:38 |
|
||
|
|

start [/forum/search_topic.php?author=PHP+Inside&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
309ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 1758ms |
| total: | 2166ms |

| 0 / 0 |
