|
|
|
Как организовать периодическую индексацию объектов в 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/topic.php?fid=16&fpage=50&tid=1341568]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
304ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 583ms |

| 0 / 0 |
