2017-02-01 10 views
2

설명서를 읽는 것이별로 도움이되지 못했습니다.Aerospike 다중 필터 쿼리?

1) 이해했듯이 한 쿼리에서 여러 필터를 사용할 수있는 기능이 없습니다. 그렇다면, 어떻게 Aerospike 자바 클라이언트 API와, 나는 그런 쿼리로 쓰기 : 그 목적을 위해 자바 클라이언트 API를 사용할 가능성이없는

SELECT * FROM TABLE_NAME WHERE COLUMN1 = 1 AND COLUMN2 = 2 

2) 경우에, 나는 자신의 UDF가 데이터를 필터링 작성해야?

3) 자체 UDF (해당 filteres 데이터)를 작성하면 빠르지 않습니까? 아니면 실행 속도를 높이기 위해 보조 색인을 사용해야합니까?

답변

1

엄밀히 말하면, 나열된 다중 필터 쿼리의 동일한 구현에서 직접 레코드 집합을 다시 가져올 수 없습니다. 그러나 방법에 관하여 원이있다. column1에 SI (secondary-index)를 만들어 레코드의 첫 번째 하위 세트를 가져 와서 해당 레코드 세트를 레코드를 읽을 수있는 스트림 udf에 공급하고 column2로 필터링하고 반환 값의 맵을 반환 할 수 있습니다. UDF에서 레코드 또는 레코드 세트 또는 스트림 부속 집합을 리턴 할 수 없습니다. 그러나 레코드 키를 각 레코드의 저장소로 저장하면 키 맵을 반환 한 다음 응용 프로그램의 레코드 하위 집합에 액세스 할 수 있습니다.

1

Predicate filtering이 3 월 15 일에 release 3.12에 추가되었습니다. Java 클라이언트의 PredExp 클래스를 사용하여 언급 한 것과 같은 복잡한 필터를 작성할 수 있습니다. 현재 C, C#Go 클라이언트에 대해서도 존재합니다.

조건부 필터링은 필요에 따라 필터링 논리를 구성하는 데 사용될 수 있으며 UDF가 아닌 기본적으로 실행됩니다. 필요한 경우 필터와 일치하는 모든 레코드에 레코드 UDF를 적용하십시오. 특정 복합 조건에 맞는 모든 레코드를 얻으려고하는 경우 UDF를 사용하지 않고 술어 필터 만 사용하십시오.

조건부 필터는 보조 인덱스의 상단에서 더 빠르게 실행할 수 있지만 필수는 아닙니다. 하나도 없으면 네임 스페이스/집합에있는 모든 레코드를 반환하는 검색에 대해 실행되어 각각에 필터를 적용합니다. 보조 인덱스가있는 경우 WHERE 절을 사용하여 순서 지정해야합니다. 현재 서버 측 쿼리 최적화 프로그램이 없기 때문에 조건 자의 순서를 고려하여 수동으로 쿼리를 최적화해야합니다. 예를 들어

, 당신은 색인 처음 두에, 빈 , 나이이름을 가진 사용자의 집합을 가지고 가정, 35 누구의 이름으로 시작 (44) 사이의 모든 여성 사용자를 찾고 있습니다 '에스'. 쿼리에서 가장 적은 레코드를 반환하는 인덱스를 사용하려면 Statementset the Filter으로 지정합니다. 이 경우 나이의 인덱스를 사용하면 성별 인보다 적은 수의 레코드가 반환되어 더 빨리 실행됩니다. PredExp 내에서 단락 회로를 주문하고 가능한 빨리 일치하는 레코드를 건너 뛰기를 원합니다. 이 경우 성별 bin 값을 이름이 인 더 비싼 문자열 정규 표현식보다 먼저 비교하는 것이 좋습니다.