'merge'에 해당되는 글 7건

  1. 2021.08.04 [Elasticsearch] force merge 에 대한 정리
  2. 2017.10.27 [Git] Merge request 전 commit log 정리
  3. 2015.12.11 [Elasticsearch] Merge Throttle 설정 튜닝
  4. 2015.12.09 [Elasticsearch - The Definitive Guide] Segment Merging
  5. 2012.07.09 Subversion Get the right version!
  6. 2012.06.12 svn merge 시 오류 - 중복 머지.. 1
  7. 2012.04.16 SVN branching & merging by Eclipse.

[Elasticsearch] force merge 에 대한 정리

Elastic/Elasticsearch 2021. 8. 4. 08:12

공식 문서 참고)

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html

 

API)

POST /my-index-000001/_forcemerge

 

force merge 는 너무 많이 생성된 Segments 파일을 병합 하거나 삭제 된 문서를 물리적으로 병합 하면서 제거 하거나 하는 작업을 수행 하게 됩니다.

 

보통은 merge policy 에 의해서 자동으로 수행이 되긴 하지만 간혹 수동으로 실행을 해야 할 때도 발생을 합니다.

그럼 Segments 파일을 어느 정도 수준으로 유지 하는게 좋을까요?

 

그 전에 확인할 사항이 있습니다.

 

1. Segment 파일에 문서 수가 많나요?

2. Segment 파일에 문서의 크기가 큰 것일까요?

 

결국 이 Segments 파일은 IndexWriter 즉, 색인 보다는 검색에 영향을 많이 주는 요소라고 보면 됩니다.

 

짧은 용량의 Segments 파일이 많이 있다고 가정 하면 파일 수 만큼의 IndexeReader 가 준비 되어야 하고 그에 맞는 thread 가 일을 해야 하기 때문에 다소 성능이 떨어 질 수도 있습니다.

반대로, 용량이 큰 Segments 파일이 있다고 하면 Single thread 로 동작 하기 때문에 역시 성능이 떨어 질 수 있기도 합니다.

 

그래서 가장 최적의 Segment file 의 크기와 수를 구해야 검색 성능을 확보 할 수 있습니다.

보통은 Primary shard 와 Replica shard 를 가지고 접근을 하게 됩니다. 그러다 Node 수준까지 접근 하게 되고 더 나아가 Application 수준까지 ...

 

Segment 파일이 가질 수 있는

- 최대 문서의 수는 Integer.MAX_VALUE (2,147,483,519) 만큼 가질 수 있습니다.

- 문서 하나의 최대 크기는 2GB 입니다.

 

제가 제안 하는 범용적인 Segment 파일은

- 최대 문서 수는 1천만 ~ 5천만

- Segment file 크기는 2GB ~ 5GB

- Segment file 수는 Core 크기와 같거나 1/2 만큼

정도 인것 같습니다.

 

Segment 는 Lucene 기준으로 검토를 하셔야 하고 Elasticsearch 기준으로 확장 한다고 하면 Shard 까지 검토를 하셔야 합니다.

 

제가 제안한 정보를 기준으로 단순 예를 들어 보면)

- 코어가 10개 라고 하고

- 1/2 만큼의 Segments file : 5개

- Shard 1개의 크기는 5 개 Segments file x 2GB : 10GB

 

대략 Node와 Shard size estimation 하는 방법에서 제시 한 것과 어느 정도 부합 한다는 것을 볼 수 있습니다.

 

:

[Git] Merge request 전 commit log 정리

ITWeb/개발일반 2017. 10. 27. 17:19

master 브랜치를 가지고 있고 work 브랜치와 merge request 브랜치를 가지고 정리해 보겠습니다.


1. master 브랜치에서 work 브랜치를 하나 만듭니다.

2. work 브랜치에서 열심히 개발을 합니다.

3. master 브랜치에서 merge request 용 브랜치를 하나 만듭니다.

4. merge request checkout 상태에서 work 브랜치를 merge 합니다.

$ git merge WORK_BRANCH --squash

5. 특별히 conflict 난게 없으면 commit 합니다.

$ git commit -a -m 'simple commit message'

6. commit 이 잘 되었으면 push 합니다.

$ git push origin MERGE_REQ_BRANCH

7. 마지막으로 merge request 를 보내시면 됩니다.


:

[Elasticsearch] Merge Throttle 설정 튜닝

Elastic/Elasticsearch 2015. 12. 11. 15:56

bulk indexing 을 하다 보면 색인 하는 과정에서 느려지는 현상을 경험 할 수 있습니다.

여러가지 원인이 있을 수 있지만 간단하게 설정을 통해서 성능 향상을 시킬수 있는 방법을 소개해 드립니다.


기본적인 정보는 이미 Elasticsearch Reference 에서 제공하고 있기 때문에 관련 내용을 찾아 보시면 이해 하시는데 도움이 됩니다.


참고문서)


Elasticsearch 역시 lucene 기반의 검색 엔진이기 때문에 과거부터 전해져 오는 segment merge 시 발생 하는 성능 저하 문제는 피해 갈 수가 없습니다.

이를 좀 더 효율적으로 사용하기 위해 아래 설정을 활용 하시면 됩니다.


Merge throttle 은 두 가지 방법을 제공해 주고 있습니다.


1. Node level throttle

이것은 merge 동작은 shard 단위로 발생을 하기 때문에 같은 node 에 있는 shard 들은 동일한 자원을 사용하게 됩니다.

즉, disk i/o 에 대한 경합을 할 수 밖에 없는 것인데요.

이런 이유로 node level 설정을 사용하게 됩니다.


indices.store.throttle.type: “merge” ## all, none

indices.store.throttle.max_bytes_per_sec: “20mb"


 여기서 수정이 필요한 부분은 색인 데이터의 크기를 감안해서 max_bytes_per_sec 을 적합한 크기로 설정해 주시면 됩니다.


2. Index level throttle

특정 index 에 대해서 관리를 하고 싶을 때 node level throttle 설정을 무시 하고 설정을 하도록 해주는 것입니다.

설정 방법은 index update settings 를 통해서 할 수 있습니다.


index.store.throttle.type: “node"

index.store.throttle.max_bytes_per_sec: “20mb"


 여기서 수정이 필요한 부분은 색인 데이터의 크기를 감안해서 max_bytes_per_sec 을 적합한 크기로 설정해 주시면 됩니다.

 throttle type을 none 으로 할 경우  disable merge 설정이 됩니다.

:

[Elasticsearch - The Definitive Guide] Segment Merging

Elastic/TheDefinitiveGuide 2015. 12. 9. 17:25

알아 두면 매우 좋은 내용입니다.


원문링크)

https://www.elastic.co/guide/en/elasticsearch/guide/current/merge-process.html


원문 Snippet)

With the automatic refresh process creating a new segment every second, it doesn’t take long for the number of segments to explode.

...중략...

This is the moment when those old deleted documents are purged from the filesystem. Deleted documents (or old versions of updated documents) are not copied over to the new bigger segment.

...중략...

The merge process... does not interrupt indexing and searching.

...중략...

Once merging has finished, the old segments are deleted



아래는 merge flow 요약 입니다.


1) merge 하기 위한 new segment 를 생성 합니다. (run optimize)

2) deleted mark 된 것들을 제외 하고 신규 segment 로 merge 대상 segment 들이 합쳐 집니다.)

3) 신규 commit point 를 생성 합니다. (merge 대상 segment 는 제거 하고, 신규 segment 와 아직 merge 가 안된 segment 정보만 기록 합니다.)

4) 검색 가능한 상태가 됩니다.

5) merge 가 완료된 segment는 삭제 됩니다.


※ 이 작업은 상당한 비용이(cpu, disk i/o) 발생 하기 때문에 사용시 주의하셔야 합니다.


:

Subversion Get the right version!

ITWeb/개발일반 2012. 7. 9. 20:25

[원본링크]

http://subclipse.tigris.org/wiki/JavaHL



Get the right version!

Before explaining what JavaHL is, it is important that you know what version you need for the version of Subclipse you are using. JavaHL is part of Subversion, so it's version matches that of the Subversion command line client you have installed. Each Subclipse version typically only supports a single Subversion client version (due to API differences). Make sure you get the right version of JavaHL for your Subclipse version.

Current Versions

Subclipse Version

SVN/JavaHL Version

1.8.x

1.7.x

1.6.x

1.6.x

1.4.x

1.5.x

1.2.x

1.4.x

1.0.x

1.4.x 

subversion server 랑 client 랑 version 을 맞춰서 사용을 해야 merge 할때.. 삽질을 안합니다.
참고하세요..;;;

:

svn merge 시 오류 - 중복 머지..

ITWeb/서버관리 2012. 6. 12. 19:41

진행하고 있는 업무 중 빈번한 코드 머지 작업이 있는데

작업중 발생하는 오류에 대해서 팀원이 문제 해결한 내용을 공유해 줘서 keeping 합니다.

요약:

1. Windows 용 SVN Clinet 다운 및 설치(현재 Eclipse plugin으로 사용하는 SVN과 버전 일치 시켜야함)

2. 해당 프로젝트 workspace로 들어가서 svn propget -R svn:mergeinfo 로 확인

3. svn propdel -R svn:mergeinfo 로 모든 property 삭제

4. 커밋 후, merge 진행

 

 

자세한 설명입니다:

 

현상: SVN Merge를 사용해 첫 merge는 되지만, 두번째 merge는 안됩니다.

이유: 첫 번째 merge를 했을때 몇몇 파일에 mergeinfo property라는 것이 남게 됩니다.

해당 workspace/project 에서

svn propget -R svn:mergeinfo

로 확인하실 수 있습니다 

더 근본적인 원인은 정확히 증거를 가지고 있지 않지만, 작업에서 trunk, branch간의 작업사이에 revision이 약간씩 꼬여서

발생하는 것 같습니다.

 

svn: Reintegrate can only be used if revisions 18765 through 18921 were
    previously merged from svn+ssh://svn/usr/local/svn/repos/all/trunk to the
    reintegrate source, but this is not the case:

위와 비슷한 에러가 나는데(에러메시지는 같습니다)  머지는 한 소스가 아니라 다른 소스이면, 비록 그 조상이 같아 revision을 공유하더라도 에러가 나는듯 합니다. (같이 좀 고민해 주세요) 

 

그래서 해결책은!

해결: mergeinfo property 삭제

방법:  해당 workspace/project 에서

svn -R propdel svn:mergeinfo

로 property를 삭제하고 merge를 진행하시면 됩니다. 


:

SVN branching & merging by Eclipse.

ITWeb/서버관리 2012. 4. 16. 16:54

소스머지 전략인지 뭔지 땜시 svn 매뉴얼 학습 중... 기본이 되는 branches 와 merge 에 대해서 정리해 봅니다.
뭐.. 나중에라도 까먹지 않기 위해서... ^^;;
그냥 branching 하는 거랑 merging 하는 거니까.. 아주 심플한 jsp 파일에서 hello world 로 테스트 진행 합니다.

subversion 사이트 들어 가면 있는 파일 인데요.
걍 올려 봅니다.. :)

svn-book.pdf


1. 테스트를 위한 web project 를 하나 생성해서 trunk 에 올립니다.


2. 해당 프로젝트에서 마우스 우클릭 하신 후 아래와 같이 Team -> Branch/Tag... 선택 합니다.

3. Copy to URL 에 branches/RB-201204162 로 입력하고 Next 합니다.

4. Copy Revision 화면에서 그냥 HEAD revision in the repository 에 놓고 Next 합니다.

5. Branch/Tag Comment 에 comment 넣고 Finish 합니다.

6. SVN explorer 로 확인해 보시면 생성한 branch 가 보이실 겁니다.

7. 자, 이제 Branching 한 넘을 가지고 소스코드를 고친 후 merge 를 해봅시다.

RB-201204162 를 checkout 받고, index.jsp 를 고치고, commit 을 합니다.

8. RB-201204162 를 trunk 로 merge 를 해봅시다.
trunk 프로젝트에서 마우스 우클릭 Team -> Merge 를 선택 합니다.

9. 기본 값인 Reintegrate a branch 를 선택해서 진행을 합니다.

10. No uncommitted modifications 나 Working copy at a single revision 에서 빨간 줄 나오시는 분은 commit 이랑 update 한번 해주시면 됩니다.

11. Merge 할 대상을 선택 합니다.

12. Next 후 Finish 하시면 Merge 가 수행 되는 것을 볼 수 있습니다.

13. index.jsp 파일을 수정했으니 updated 된 파일이 1개 나오게 됩니다.

14. merge result 확인하기

15. merge 결과를 확인하고 trunk 의 index.jsp 파일을 commit 할지 판단 하셔서 올리시면 되겠습니다.


: