2017-02-06 3 views
1

우리는 현재 "aerospike"를 테스트 중입니다. 그러나 설명서에서 키에 대해 이해할 수없는 부분이 있습니다.Aerospike 여기서 쿼리 색인 python

key = ('trivium', 'profile', 'data') 
# Write a record 
client.put(key, { 
    'name': 'John Doe', 
    'bin_data': 'KIJSA9878MGU87', 
    'public_profile': True 
}) 

일반 문서로 쿼리 할 때 네임 스페이스에 대해 읽었습니다.

client = aerospike.client(config).connect() 
     query = client.query('trivium', 'profile') 
     query.select('name', 'bin_data') 
     query.where(p.equals('public_profile', True)) 
     print(query.results()) 

결과는 널 (null)이지만, 우리는 쿼리가 모든 레코드를 가져 오는 "여기서"문을 eerase 때 문서는 쿼리 보조 인덱스 작업,하지만 어떻게 작동이 있다고?

감사합니다.

답변

2

쿼리에 하나의 필터를 사용할 수 있습니다. 귀하의 경우에 해당 필터 인 동일성 필터는 public_profile bin에 있습니다. 필터를 사용하려면 public_profile bin에서 보조 색인 (SI)을 작성해야하지만 SI는 숫자 또는 문자열 데이터 유형을 포함하는 저장소에만있을 수 있습니다. 따라서 수행하려는 작업을 수행하려면 public_profile을 0 또는 1과 같은 숫자 항목으로 변경 한 다음 해당 항목에 보조 색인을 추가하고 0 또는 1 값에 등호 필터를 사용하십시오. 여러 SI를 작성할 수 있지만 주어진 쿼리에서 하나의 필터 만 호출 할 수 있습니다. "AND"로 여러 필터를 연결할 수 없습니다. 필터를 여러 개 사용해야하는 경우 스트림 UDF (사용자 정의 함수)를 작성해야합니다. SI를 정의하기 위해 AQL을 사용할 수 있습니다. 단 한 번만하면됩니다.

$aql 
aql>help --- see the command to add secondary index. 
aql>exit 

SI는 프로세스 RAM에 있습니다. 일단 정의되면, 추가되거나 수정 된 새로운 데이터는 적용 가능한 경우 aerospike에 의해 자동으로 인덱싱됩니다. public_profile에 index를 NUMERIC로 정의하지만 일부 레코드에서 해당 bin에 문자열 데이터를 삽입하면 해당 레코드는 색인화되지 않고 조회 필터에 포함되지 않습니다.

+1

답변을 주셔서 감사합니다. Aerospike가 빠르다고 생각합니다. 사용자 관리자에게는이 도구를 사용할 수 있다고 생각했지만 복잡한 쿼리를 작성한 것처럼 보이기 때문에 시스템에 중요합니다. 그러나 우리는 mongo 또는 cassandra와 같은 또 다른 기술을 시도 할 것입니다. 감사합니다. 안부 – UlyssesMarx

+0

물론, 사용 사례에 가장 적합한 솔루션을 사용해야합니다. BTW, stream udfs는 쓰기 쉽습니다. 다음은 간단한 예입니다. https://discuss.aerospike.com/t/record-manipulation-with-more-than-one-filter-lua/3637 및 코드는 https://github.com/pygupta/aerospike-discuss/tree/ 여기에 있습니다. master/topic3637 – pgupta

+1

업데이트 된 github 링크 : https://github.com/pygupta/aerospike-discuss/tree/master/topic3637_streamUDF_multifilter – pgupta