프로그래밍/ElasticSearch 2016. 2. 21. 21:20

얼마전 몇개의 도큐멘트를 갖고 검색환경을 만들었는데, 클러스터 노트의 수가 더 작았음에도 검색 속도는 더 빨랐다는 글을 어디선가 읽었다. 

검색데이터(인덱스의 크기)도 무시 할 수는 없지만, 분산환경에서 특히 무시할 수 없는 것이 커넥션(tcp)비용이다. 그리고 검색이라는 것은 sorting, scoring 에서 많은 파워를 필요하게 된다.

엘라스틱의 경우 쿼리를 받을 경우 두번의 작업을 하게 된다. 해당 키워드들을 찾아 도큐멘트주소(어디노드에 있는지, 어떤 세그멘트에 있는지) 갖고 온 후 각 노드들에 대해 다시 질의한다. 이렇게 두번의 커넥션을 갖게 되는데,  인덱스 도큐멘트가 작은 상태에서 샤드를 여러개로 세팅했다면 당연 모든 노드로 쿼리가 가야하기 때문에 한 샤드에서 가져올때 대비하여 속도에서 더 느린 경험이 될 것 같다.

//
프로그래밍 2016. 1. 5. 16:03

find /home/laesunk/crawl/kbs/logs -maxdepth 1 -type f -name '*.log.*'     -mtime +7 -delete

'프로그래밍' 카테고리의 다른 글

templete method 패턴  (0) 2016.05.29
git fetch from remote  (0) 2016.04.07
scrapy 설치 오류  (0) 2015.12.22
vi에서 여러줄 주석처리 & 삭제  (0) 2015.10.01
스트링 000 숫자 없애기. 정규식  (0) 2015.09.24
//
프로그래밍 2015. 12. 22. 12:46

ubuntu 14.04에서 pip install 시에 에러 남

sudo apt-get install build-essential libssl-dev libffi-dev python-dev libxml2-dev


참고 : http://stackoverflow.com/questions/22073516/failed-to-install-python-cryptography-package-with-pip-and-setup-py

//
프로그래밍/Hadoop ETC 2015. 12. 8. 21:46
특정 조건 하에 랭킹 x 순위 까지 구해야 할 경우가 있다. 예를 들면 일별 접근 횟수 랭킹 10 위까지의 ip를 구하는 경우? 아래와 같이 할 수 있을 것이다. (물론 자신의 사이트(서비스)에 접근할 때마다 로깅을 하여 데이터는 있다는 가정)
select t2.day, t2.ip, t2.cnt  from 
(
   select t1.day, t1.ip, t1.cnt, rank() over (PARTITION BY dd order by cnt desc) as rank from 
   (
      select day, ip, count(ip) as cnt from log where month = '09' group by dd, userip
   ) t1
) t2 where rank < 10;
//
프로그래밍/리팩토링 2015. 10. 27. 23:37


'프로그래밍 > 리팩토링' 카테고리의 다른 글

Refactoring - 1(중복코드, 긴메소드)  (0) 2015.05.14
//
프로그래밍/zookeeper 2015. 10. 18. 22:56
주키퍼에서는 특정노드의 변화(생성,데이터수정,자식노드의 추가/제거, ACL변경) 을 알 수 있다.
폴링방식을 취할 경우, 지속적인 커넥션비용 혹은 반응시간에 문제가 있을 수 있다.
그래서 주키퍼에서는 메시지 이벤트 방식을 사용한다. 이것은 watcher 를 구현해서 쓸 수 있다.
왓쳐의 process 함수를 구현해주는데 아래의 event type 으로 상태를 구별할 수 있게 구현되어있다.
해당 process 라는 함수는 clientcnx 클래스의 쓰레드에서 호출 하게 된다.
커넥션 정보등을 노드에 저장하고 해당 장비가 장애로 인해 커넥션이 끊어지면 해당 노드가 빠짐으로써 해당 이벤트를 체크해 다른 장비쪽으로 request 를 할 수 있겠다.
        public enum EventType {
            None (-1),
            NodeCreated (1),
            NodeDeleted (2),
            NodeDataChanged (3),
            NodeChildrenChanged (4);

            private final int intValue;     // Integer representation of value
                                            // for sending over wire

            EventType(int intValue) {
                this.intValue = intValue;
            }

            public int getIntValue() {
                return intValue;
            }

            public static EventType fromInt(int intValue) {
                switch(intValue) {
                    case -1: return EventType.None;
                    case  1: return EventType.NodeCreated;
                    case  2: return EventType.NodeDeleted;
                    case  3: return EventType.NodeDataChanged;
                    case  4: return EventType.NodeChildrenChanged;

                    default:
                        throw new RuntimeException("Invalid integer value for conversion to EventType");
                }
            }           
        }
    }

    abstract public void process(WatchedEvent event);
왓쳐의 구현
	
 public class testWatcher implements Watcher {
         public void process(WatchedEvent event) {	
                if( event.getType() == Event.EventType.NodeCreated 
			|| event.getType() == Event.EventType.NodeDeleted
			|| event.getType() == Event.EventType.NodeDataChanged
			|| event.getType() == Event.EventType.NodeChildrenChanged
				)
		{
			
			try {
				if( event.getType() == Event.EventType.NodeChildrenChanged ){
				     하위노드의 변경(노드생성, 삭제등등) 후 할 작업 코드~
                        }
 			} catch (KeeperException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}		
		}
 }

'프로그래밍 > zookeeper' 카테고리의 다른 글

[ZOOKEEPER] zookeeper 소스 분석 -1  (0) 2015.08.23
//
프로그래밍 2015. 10. 1. 11:29

명령 모드에서
V를 누르게 되면 하단에 Visual이라는 메세지가 출력됨 그 상태에서 주석 처리할 줄을 선택한 후에

:norm i#
-> # : 추가할 문자 


주석 지울 시에는 V를 눌러 Visual로 전환후 주석 제거할 줄 선택 후 
:norm 2x
-> 2는 선택된 줄의 왼쪽으로 부터 몇번째 문자 
-> x는 삭제를 의미


1v, 2v 이런식으로 v명령어 앞에 숫자를 붙여서 사용할수도 있으며 
1v 는 20줄 선택 2v는 40줄 선택 이런식으로 20줄씩 증가

'프로그래밍' 카테고리의 다른 글

특정 주기로 로그 삭제  (0) 2016.01.05
scrapy 설치 오류  (0) 2015.12.22
스트링 000 숫자 없애기. 정규식  (0) 2015.09.24
git 같은 브랜치 다른 호스트에서 작업  (0) 2015.09.03
mysql 대소문자 비교 컬럼  (0) 2015.09.02
//
프로그래밍 2015. 9. 24. 10:55
str.replaceAll("^0+", "");

str.format 을 쓸 수도 있음.

'프로그래밍' 카테고리의 다른 글

scrapy 설치 오류  (0) 2015.12.22
vi에서 여러줄 주석처리 & 삭제  (0) 2015.10.01
git 같은 브랜치 다른 호스트에서 작업  (0) 2015.09.03
mysql 대소문자 비교 컬럼  (0) 2015.09.02
맥에 java 설치  (0) 2015.06.12
//
프로그래밍 2015. 9. 3. 11:48
git merge origin/foo


'프로그래밍' 카테고리의 다른 글

vi에서 여러줄 주석처리 & 삭제  (0) 2015.10.01
스트링 000 숫자 없애기. 정규식  (0) 2015.09.24
mysql 대소문자 비교 컬럼  (0) 2015.09.02
맥에 java 설치  (0) 2015.06.12
mysql table 용량 보는 쿼리  (0) 2015.05.07
//
프로그래밍 2015. 9. 2. 19:29

mysql 에서 영문자는 모두 소문자로 변경되어 저장되는 듯 하다. 찾아보니 기본이 그거라함.

mysql.cof 에서 수정해주면 인지한다고 함. 하지만 안해봄. 기본 서버 디폴트 설정을 바꿀 수는 없음. 

그래서 특정 필드를 인지하게 하는 타입 찾음.

유니크키를 잡고 작업하는데 계속 중복제약에 걸려 팅겨져 나와서;; 해맴


varchar () = 대소문자 구분 안함 

varbinary () = 대소문자 구분 함 


필트 타입이 있다.



//