'2017/07/25'에 해당되는 글 2건

  1. 2017.07.25 [elasticsearch5] elasticsearch scripting 역사
  2. 2017.07.25 [redis] lua 사용 사례

#일래스틱서치 탄생

처음에는 MVEL 지원

https://github.com/mvel/mvel

(얼마 못가 지원하지 않음)



#일래스틱서치 1.4

MVEL에서 그루비로 대체



# 일래스틱서치 1.5

MVEL은 1.5 버전부터 마침내 제거되었다.



# 일래스틱서치 5.0 

일래스틱서치 5.0버전부터 그루비 스크립팅 언어가 Deprecated되었고 5.0 향후 버전에서 제거될 것이다. 그루비는 새로운 언어인 Painless로 대체되었다. 그루비를 계속 사용할 수 있지만 elasticsearch.yml 파일에서 동적 스크립팅을 활성화해야 한다. Painless을 사용하기 위한 추가 설정이 필요하지 않다.


일래스틱서치는 그루비, 파이썬 뿐 아니라 자바스크립트의 언어 플러그인을 지원했었다. 일래스틱서치 5.0.0 버전부터 기존 언어의 플러그인은 사용 중단되었고 Painless으로 대체되었다.



일래스틱서치는 Painless 외에도 다음 스크립트 언어를 지원한다.
* 빠른 사용자 정의 랭킹과 정렬에 주로 사용되는 루씬 표현식
* 검색 템플릿에 사용되는 mustache
* 자바(사용자 정의 플러그인을 작성)


- Painless 예제

* Groovy와 비슷하게 생겼다.




def sum = 0 

def listOfValues = [0, 1, 2, 3]



def sum = 0; 

for (def i = 0; i < 10; i++) { 

    sum += i; 



def sum = 0; 

for ( i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] )  { 

    sum += i; 



def i = 2; 

def sum = 0; 

while (i > 0) { 

    sum = sum + i; 

    i--; 

  

def year = doc[\"year\"].value; 

if (year < 1800) {

  return 1.0

} else if (year < 1900) {

 return 2.0

} else {

 return year - 1000 

}




Posted by '김용환'
,

[redis] lua 사용 사례

Redis 2017. 7. 25. 16:28



redis에 lua를 사용할 수 있다. 언제 쓰면 좋을까?



애플리케이션-Redis 구조에서는 특별히 사용할 일이 없어보이지만,


Transmission Time(Latency)을 최대한 늦추고 Network Bandwith를 줄이고 싶을 수 있을 때 사용할 수 있다. 


여러번 또는 수십 번 통신 비용을 쓰기 보다 한 번의 콜로 해결할 수 있다면 통신 비용을 아낄 수 있을 때, 사용하는 것이 좋을 것 같다.





레디스 자료 중에 관련 lua 사례가 있다.


https://github.com/RedisLabs/geo.lua의 코드이다.


여러번 반복적인 커맨드를 사용해서 데이터를 읽어와야 하는 경우에..


geodist key elem1 elem2 

geodist key elem3 elem4

geodist key elem5 elem6



이를 lua 코드로 geopathlen key elem1 elem2 elem3, elem4, elem5, elem6로 한번에 호출할 수 있다.



그리고 리스트의 랜덤 결과 값을 얻어온다고 할 때도 도움이 될 수 있을 것이다.



이외에 WATH/MULTI/DISCARD/EXEC 와 같은 트랙잭션 코드를 lua로 쉽게 해결할 수 있을 것이다.





아래는 RedisLab에서 발표한 Lua 사례 내용이다.



Redis: Lua scripts - a primer and use cases from Redis Labs



Posted by '김용환'
,