2014-04-03 4 views
0

우리는 메시지가 여러 목록간에 분산되는 메시징 시스템을 구축하고 있습니다. 현재 구현은 다음과 같이 구성되어 있습니다.elasticsearch의 메시징 시스템

Message comes in from user “peeter” 
Message is added to list “user:peeter:messages” 
Since peeter is in the group “developers” the message is also added to “group:developer:messages” list 
Since the group developers belongs to a watchlist (a group of groups) called “it”, the message is also added to "watchlist:it:messages" list 

이제는 목록에 필터가 추가되어야합니다. 따라서 그룹 "개발자"는 해당 필터와 일치하는 해당 그룹의 사용자들만 메시지를 표시하는 "php -javascript"필터를 갖게됩니다.

우리는 전체를 elasticsearch로 옮기는 것에 대해 생각했습니다. 그래서 우리는 인덱스하고자 다음과 같은 형식으로 우리의 메시지 :

{ 
    message : "PHP is awesome and Javascript is awesome and Java is awesome", 
    user : "peeter", 
    groups : ["developers", "architects"], 
    watchlists : ["it", "tech personel", "weekend workers", "emergency staff"] 
} 

그리고 우리는 "개발자"그룹을 찾을 때 우리는 다음과 같은 형식으로 탄성 쿼리 것 :

{ 
    query_string : "+php -javascript", 
    term : { 
     "groups" : "developers" 
    } 
} 

이 문제는 이 목록은 오히려 자주 변경됩니다. 새 사용자가 "개발자"그룹에 추가되고 새 그룹이 주시 목록에 추가됩니다. 또한 두 그룹을 병합 할 수 있으므로 "개발자"와 "설계자"는 "dev-architects"라는 단일 그룹이됩니다. 우리는 무겁게 읽는 동안 지속적으로 업데이트되는 색인을 남겨 둘 것입니다. 우리가 가진

두 번째 아이디어는 다음과 같은 형식의 문서 색인을했다 :

{ 
    message : "PHP is awesome and Javascript is awesome and Java is awesome", 
    user : "peeter" 
} 

을 그리고 우리는 "개발자"그룹을 찾을 때 우리는 다음과 같은 형식으로 탄성 쿼리 것 :

{ 
    query_string : "+php -javascript", 
    term : { 
     "user" : "peeter", "michael", "jamie" 
    } 
} 

이 접근 방식의 문제점은 "개발자"그룹에 최대 2000 명의 사용자가있을 수 있다는 것입니다.

이러한 솔루션 중 하나가 유효합니까? 포함 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-filter.html#_terms_lookup_mechanism

그래서 별도의 지수 (또는 유형)을 가질 수 -

+0

Logstash (http://logstash.net/docs/1.4.0/tutorials/getting-started-with-logstash)를 사용하지 않고 ES가 이미 대부분의/너 모두 필요한 물건? –

+0

로그 파일 관리가 아닙니다. – Peeter

+0

예, 알고 있습니다 만, 로그 엔트리와 이벤트 메시지는 개념적으로 유사하지 않습니까? 어쨌든, 두 번째로는 '주시 목록'개념이 필요하기 때문에 나는 그것이 훌륭한 조합이라고 생각하지 않습니다. –

답변

0

그룹 "개발자"에 속한 사용자의 목록을 쿼리의 성능을 개선 할 수있는 방법은 용어 조회 메커니즘을 사용하여 수 각 그룹에 대한 문서. 이 문서에는 해당 그룹에 속한 사용자 목록이 들어 있습니다. 그리고 용어 쿼리가 해당 문서에서 일치하도록 용어를 지정합니다.

주시 목록 기간과 동일하게 작동 할 수도 있습니다.

관련 문제