Ignite Apache 와 다른 솔루션 비교

https://www.gridgain.com/resources/product-comparisons/redis-comparison

 

Ignite 의 성능 비교

pure cache on 

cache on with 

Ignite vs MariaDB

 

Ignite Apache 설치

2.3.0 버전을 기준으로 하며 바이너리를 사용했습니다. 컴파일은 삽질을 요하므로 다음에 시간이 있으면 정리해 볼 예정입니다.

링크 : https://ignite.apache.org/

다운로드 : https://ignite.apache.org/download.cgi#binaries

https://apacheignite.readme.io/docs/getting-started#start-from-command-line

 

관련 정리된 문서(지속적인 업데이트)

https://cwiki.apache.org/confluence/display/IGNITE/Apache+Ignite+Home

 

 

 

환경

리눅스에서 설치(CentOS 6.5)

Prerequisites

Apache Ignite was officially tested on:

Name Value

JDK

Oracle JDK 8 and above

Open JDK 8 and above

IBM JDK 8 and above

 

OS

Linux (any flavor),

Mac OSX (10.6 and up)

Windows (XP and up),

Windows Server (2008 and up)

Oracle Solaris

 

ISA

x86, x64, SPARC, PowerPC

 

Network

No restrictions (10G recommended)

 

 

바이너리를 다운로드 하고

압축을 풀고

IGNITE_HOME=/home/cute772/platform/apache-ignite-2.7.0-bin

JAVA_HOME=/usr

CLASSPATH=$CLASSPATH:$IGNITE_HOME/libs/ignite-core-2.7.0.jar

CLASSPATH 에 아래 내용 추가

상기 환경변수 추가하고

/home/cute772/platform/apache-ignite-2.7.0-bin 로 이동해서

./bin/iginte.sh 실행 (default config 파일은 config/default-config.xml 임)

config.xml 파일을 별도로 지정하고 싶으면 아래와 같이 실행

./bin/ignite.sh config/config1.xml

./bin/ignite.sh config/config2.xml

./bin/ignite.sh config/config3.xml

 

sql client 실행

./bin/sqlline.sh --color=true --verbose=true -u jdbc:ignite:thin://127.0.0.1

issuing: !connect jdbc:ignite:thin://127.0.0.1 '' '' org.apache.ignite.IgniteJdbcThinDriver

Connecting to jdbc:ignite:thin://127.0.0.1

Connected to: Apache Ignite (version 2.7.0#20181201-sha1:256ae401)

Driver: Apache Ignite Thin JDBC Driver (version 2.7.0#20181201-sha1:256ae401)

Autocommit status: true

Transaction isolation: TRANSACTION_REPEATABLE_READ

sqlline version 1.3.0

 

 

table 생성

CREATE TABLE City ( id LONG PRIMARY KEY, name VARCHAR) WITH "template=replicated";

CREATE TABLE Person (  id LONG, name VARCHAR, city_id LONG, PRIMARY KEY (id, city_id)) WITH "backups=1, affinityKey=city_id";

CREATE INDEX idx_city_name ON City (name);

CREATE INDEX idx_person_name ON Person (name);

 

INSERT INTO City (id, name) VALUES (1, 'Forest Hill');

INSERT INTO City (id, name) VALUES (2, 'Denver');

INSERT INTO City (id, name) VALUES (3, 'St. Petersburg');

 

INSERT INTO Person (id, name, city_id) VALUES (1, 'John Doe', 3);

INSERT INTO Person (id, name, city_id) VALUES (2, 'Jane Roe', 2);

INSERT INTO Person (id, name, city_id) VALUES (3, 'Mary Major', 1);

INSERT INTO Person (id, name, city_id) VALUES (4, 'Richard Miles', 2);

 

SELECT p.name, c.name FROM Person p, City c WHERE p.city_id = c.id;

 

 

table 생성 확인

0: jdbc:ignite:thin://127.0.0.1> !tables

+--------------------------------+--------------------------------+--------------------------------+--------------------------------+---------+

|           TABLE_CAT            |          TABLE_SCHEM           |           TABLE_NAME           |           TABLE_TYPE           |         |

+--------------------------------+--------------------------------+--------------------------------+--------------------------------+---------+

|                                | PUBLIC                         | PERSON                         | TABLE                          |         |

|                                | PUBLIC                         | CITY                           | TABLE                          |         |

+--------------------------------+--------------------------------+--------------------------------+--------------------------------+---------+

 

0: jdbc:ignite:thin://127.0.0.1> SELECT p.name, c.name FROM Person p, City c WHERE p.city_id = c.id;

+--------------------------------+--------------------------------+

|              NAME              |              NAME              |

+--------------------------------+--------------------------------+

| Mary Major                     | Forest Hill                    |

| Jane Roe                       | Denver                         |

| John Doe                       | St. Petersburg                 |

| Richard Miles                  | Denver                         |

+--------------------------------+--------------------------------+

4 rows selected (0.062 seconds)

 

sql command 종료

0: jdbc:ignite:thin://127.0.0.1> !exit

 

 

참고

http://cyberx.tistory.com/170

command line tool 참고

  https://apacheignite-sql.readme.io/docs/sqlline

  http://sqlline.sourceforge.net/#commands

hazelcast vs ignite 벤치마크 결과(ignite 승)

  https://stackoverflow.com/questions/31932836/hazelcast-vs-ignite-benchmark

 

 

다음엔 클러스터 구성 방법에 대해 정리하겠습니다~~

도움이 되시길~

 

 

Apache Ignite Cluster 구성

 

TCP/IP Discovery  : 100 nodes 에 최적화(언더의 의미 100 노드 이상이 되면 ZooKeeper 를 이용하라.. 이런듯)

ZooKeeper Discovery : 100s and 1000s nodes 선형확장?? ^^;;  그냥 100 노드 이상이면 ZooKeeper 쓰는게 맞다는 의미인듯

 

준비된 시스템이 한대인지라 TCP/IP Discovery Port 기반으로 클러스터링을 구성해야 했음

 

48000 ~ 480002 3개의 인스턴스를 이용해서 구성함.

config xml 파일 3개를 만들고 아래와 같이 실행

./bin/ignite.sh config/default-config-48000.xml

./bin/ignite.sh config/default-config-48001.xml

./bin/ignite.sh config/default-config-48002.xml

 

구성이 다 되었으면 클러스터 활성화

apache-ignite-2.7.0-bin> ./bin/control.sh --activate

 

노드 구성 확인

./bin/control.sh --baseline

Control utility [ver. 2.7.0#20181201-sha1:256ae401]

2018 Copyright(C) Apache Software Foundation

User: **

--------------------------------------------------------------------------------

Cluster state: active

Current topology version: 5

 

Baseline nodes:

    ConsistentID=c6d1fd85-ebe8-4c44-9a89-ffde29639f03, STATE=ONLINE

    ConsistentID=d2f41b7f-e6d4-4b04-af57-165b51aaed7a, STATE=ONLINE

    ConsistentID=ea3952b9-2c6f-49f4-924e-1d3a094a232a, STATE=ONLINE

--------------------------------------------------------------------------------

Number of baseline nodes: 3

Other nodes not found.

 
기타 노드 추가 삭제 활성화 등은 아래 링크 참고
https://apacheignite.readme.io/docs/baseline-topology

 

각기 다른 인스턴스에 접속해서 데이터 동기화 확인

0: jdbc:ignite:thin://127.0.0.1:10802> INSERT INTO Person (id, name, city_id) VALUES (7, 'wDwarf heheh 10802', 1);

1 row affected (0.16 seconds)

0: jdbc:ignite:thin://127.0.0.1:10801> SELECT p.name, c.name FROM Person p, City c WHERE p.city_id = c.id;
+--------------------------------+--------------------------------+
|              NAME              |              NAME              |
+--------------------------------+--------------------------------+
| Mary Major                     | Forest Hill                    |
| wDwarf heheh 10802             | Forest Hill                    |
| Clark KyungHwan HEHE           | Forest Hill                    |
| Kim Jong HEHE                  | Denver                         |
| Jane Roe                       | Denver                         |
| Richard Miles                  | Denver                         |
| John Doe                       | St. Petersburg                 |
+--------------------------------+--------------------------------+
7 rows selected (0.108 seconds)
 
 

인스턴스별 접속 방법(데이터 싱크 확인에 필요)

./bin/sqlline.sh --color=true --verbose=true -u jdbc:ignite:thin://127.0.0.1:10800 (default)

./bin/sqlline.sh --color=true --verbose=true -u jdbc:ignite:thin://127.0.0.1:10801

./bin/sqlline.sh --color=true --verbose=true -u jdbc:ignite:thin://127.0.0.1:10802

 

mariaDB vs Apache Ignite 성능 비교

client : php (apache ignite 에서 제공하는 클래스 사용)

apache-ignite-2.7.0-bin/platforms/php

 
 

 

TCP/IP Discovery

Multicast

Static IP

 

 

apache ignite 위키

https://cwiki.apache.org/confluence/display/IGNITE/Continuous+Integration

 

 

apache ignite cache template

http://apache-ignite-users.70518.x6.nabble.com/Default-Cache-template-td19494.html

 

 

 

GRANT ALL ON *.* TO cute772@'192.168.0.%' IDENTIFIED BY 'foofoo!@';

 

 

INSERT INTO Person (id, name, city_id) VALUES (5, 'John Doe', 3);

 

INSERT INTO Person (id, name, city_id) VALUES (6, 'Jane Roe', 2);

 

INSERT INTO Person (id, name, city_id) VALUES (7, 'Mary Major', 1);

 

INSERT INTO Person (id, name, city_id) VALUES (8, 'Richard Miles', 2);

 

./bin/control.sh --port 48000 kill --yes

 

 

 

 

<property name="cacheConfiguration"> 

    <list> 

        <bean id="cache-template-bean" abstract="true" class="org.apache.ignite.configuration.CacheConfiguration"> 

            <property name="name" value="cachetemplate"/> 

            <property name="cacheMode" value="REPLICATED" /> 

        </bean> 

    </list> 

</property> 

 

In that case, you should be able to create a table: 

 

CREATE TABLE person (

id LONG, 

name VARCHAR, 

city_id LONG,

PRIMARY KEY (id, city_id)

) WITH "template=cachetemplate"; 

 

 

1. IPTIME 어드민 로그인

2. '고급 설정 > 내부 네트워크 설정' 중 수동 IP 할당 설정 영역에서 MacOS 의 MAC 주소 및 할당하고자 하는 IP 를 부여 후 추가


3. MacOS 로 이동후 터미널에서 'ipconfig set en0 DHCP' 실행

4. MacOS 의 터미널에서 'ifconfig' 실행하여 IP 부여 확인


ps : 리눅스 이용자들은 ifconfig en* up | down 으로 IP 를 갱신하려할터인데 죽어도 안된다.. 주의하도록.





내가 즐겁고 행복한 것이 무엇인가를 아는 것이 먼저 선행되야 할듯.

어차피 해야 할 일이라면 즐겁게 만드는 마인드셋이 필요하다.

나는 할 수 있다란 자신감을 매일 부여한다.

쉴때는 확실히 쉰다.


1. 하루에 1시간은 내가 재밌고 즐거운 것을 한다.


#!/bin/sh

nIdx=0
for HOST in {1..61};
do
    nIdx=`expr $nIdx + 1`
    HOSTNAME="hostname$HOST"
    #RESULT=`echo null check  | tr -d "\n" `
    #printf "IP : %10s HOSTNAME : %s \n" $RESULT $HOST
    RESULT=`rsh $HOSTNAME hostname | tr -d "\n"` 

    printf "HOSTNAME : %-15s RESULT : [%16s]\n" "$HOSTNAME" "$RESULT"
done


- 시간대별 로깅
LOG=`date +"%Y-%m-%d %T  "|/usr/bin/tr -d "\n";/usr/bin/mysqladmin -u<foo> -p<foo_pass> status`; echo $LOG >> /tmp/mysql_status.log



매번 작성때마다 헷갈리고 잘 까먹어서 기본 문법만 정리해둔 링크 따움

출처 : http://webtn.tistory.com/entry/UNIX-%EB%82%98%EB%8F%84%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8B%A4-%EC%9E%89-%EC%B0%B8-%EC%89%AC%EC%9A%B4-Shell-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%95%9C%EB%B2%88-%ED%95%B4%EB%B3%BC%EA%B9%8C%EC%9A%94


1. 쉘 스크립트                             

간단한 쉘 스크립트

$ vi hello.sh

(hello.sh)
#!/bin/bash
echo hello world

$ chmod 755 hello.sh

$ ./hello.sh
hello world


- #! 은 쉘에게 이 프로그램을 실행하기 위해서 #! 다음에 오는 아규먼트를 실행프로그램으로
사용한다는 것을 알려주기 위해서 사용된다.

- Unix/Linux system은 Windows와 달리 파일의 확장자명(.exe .com 등)으로 실행파일 유무를
결정하지 않으며, 파일권한 설정의 변경을 통하여 실행파일로 결정한다. 따라서 스크립트
파일을 실행하기 위해서는 파일에 실행권한을 주어야 한다.


2. 주석                                      

 - "#" 에서부터 라인의 마지막까지가 주석으로 처리된다.#!/bin/bash
# 만든이 : comp-ta
# 하는일 : hello world 를 출력한다.
echo "hello world" # 문자열을 출력한다.


3. 변수                                      

- C 언어와 같은 변수 선언을 필요로 하지 않는다.
- 기본적으로 데이터를 string(문자열)로 저장한다.(수치를 대입해도 실제 수치가 아닌
문자열이 저장된다.) 따라서 타입이 없고 아무 값이나 저장할 수 있다.
- 변수의 값을 사용할 때는 변수명앞에 "$"를 붙여서 사용하고, 값을 대입할때는 "$"를 붙이지
않는다.
- 변수에 데이타를 저장하기 위해서는 대입연산자 "=" 를 사용한다. 대입연산자와,
피연산자/연산자 사이에는 공백이 존재하면 안 된다.
varname=value

- 산술연산 : 모든 것이 문자열로 저장되기 때문에 산술연산을 하기 위해서는 변수=$((산술식))
과 같이 사용.
a=1
b=2
c=$(($a+$b))
echo $c
(3 출력)


4. 명령행 인자(argument)              

  - $1~ $n - 넘겨진 인자들
  - $* : 스크립트에 전달된 인자들을 모아놓은 문자열. 하나의 변수에 저장되며 IFS 환경변수의
     첫번째 문자로 구분된다. (IFS : internal field separator)
  - $@ : $*과 같다. 다만 구분자가 IFS변수의 영향을 받지 않는다.
  - $0 : 실행된 쉘 스크립트 이름
  - $# : 스크립트에 넘겨진 인자의 갯수

(test1.sh)
#!/bin/bash
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
echo "Argument 4 : $4"

(실행)
$chmod 755 test1.sh
$./test1.sh a1 a2 a3 a4
This Script Executable File : ./test1.sh
Argument Count : 4
Argument List $* : a1 a2 a3 a4
Argument List $@ : a1 a2 a3 a4
Argument 1 : a1
Argument 2 : a2
Argument 3 : a3
Argument 4 : a4


5. 제어구조                                 

1. [ if / else ]
- 조건을 test하여 참이면 then부분을, 거짓이면 else부분을 실행.
- test 조건들은 "[ ]" 사이에 쓰면된다. "[" 과 "]" 사이에는 반드시 공백문자가 들어가야 한다.
- 변수 값, 파일 특징, 명령의 실행 여부 등 다양한 test 조건이 있다.
 Syntax Example
  if [condition]
  then
    statements
  elif [condition]
  then
    statements...
  else
    statements
  fi
  if [ $1 -lt $2 ]
  then
    echo $1 is less than $2
  elif [ $1 -gt $2 ]
  then
    echo $1 is greater than $2
  else
    echo $1 equals to $2
  fi

- 참고 : test 명령 조건
 문자열비교
  [ string ] - string이 빈 문자열이 아니라면 참
  [ string1 = string2 ] - 두 문자열이 같다면 참
  [ string1 != string2 ] - 두 문자열이 다르면 참
  [ -n string ] - 문자열이 null(빈 문자열) 이 아니라면 참
  [ -z string ] - 문자열이 null(빈 문자열) 이라면 참
 산술비교
  [ expr1 -eq expr2 ] - 두 표현식 값이 같다면 참 ('EQual')
  [ expr1 -ne expr2 ] - 두 표현식 값이 같지 않다면 참 ('Not Equal')
  [ expr1 -gt expr2 ] - expr1 > expr2 이면 참 ('Greater Than')
  [ expr1 -ge expr2 ] - expr1 >= expr2 이면 참 ('Greater Equal')
  [ expr1 -lt expr2 ] - expr1 < expr2 이면 참 ('Less Than')
  [ expr1 -le expr2 ] - expr1 <= expr2 이면 참 ('Less Equal')
  [ ! expr ] - expr 이 참이면 거짓, 거짓이면 참
  [ expr1 -a expr2 ] - expr1 AND expr2 의 결과 (둘다 참이면 참, 'And')
  [ expr1 -o expr2 ] - expr1 OR expr2 의 결과 (둘중 하나만 참이면 참, 'Or')
 파일조건
  [ -b FILE ] - FILE 이 블럭 디바이스 이면 참
  [ -c FILE ] - FILE 이 문자 디바이스 이면 참.
  [ -d FILE ] - FILE 이 디렉토리이면 참
  [ -e FILE ] - FILE 이 존재하면 참
  [ -f FILE ] - FILE 이 존재하고 정규파일이면 참
  [ -g FILE ] - FILE 이 set-group-id 파일이면 참
  [ -h FILE ] - FILE 이 심볼릭 링크이면 참
  [ -L FILE ] - FILE 이 심볼릭 링크이면 참
  [ -k FILE ] - FILE 이 Sticky bit 가 셋팅되어 있으면 참
  [ -p FILE ] - True if file is a named pipe.
  [ -r FILE ] - 현재 사용자가 읽을 수 있는 파일이면 참
  [ -s FILE ] - 파일이 비어있지 않으면 참
  [ -S FILE ] - 소켓 디바이스이면 참
  [ -t FD ] - FD 가 열려진 터미널이면 참
  [ -u FILE ] - FILE 이 set-user-id 파일이면 참
  [ -w FILE ] - 현재 사용자가 쓸 수 있는 파일(writable file) 이면 참
  [ -x FILE ] - 현재사용자가 실행할 수 있는 파일(Executable file) 이면 참
  [ -O FILE ] - FILE 의 소유자가 현재 사용자이면 참
  [ -G FILE ] - FILE 의 그룹이 현재 사용자의 그룹과 같으면 참
  [ FILE1 -nt FILE2 ] - : FILE1이 FILE2 보다 새로운 파일이면 ( 최근파일이면 ) 참
  [ FILE1 -ot FILE2 ] - : FILE1이 FILE2 보다 오래된 파일이면 참
  [ FILE1 -ef FILE2 ] - : FILE1 이 FILE2의 하드링크 파일이면 참 


2. for
 - 지정된 범위 안에서 루프를 수행한다. 범위는 어떤 집합도 가능하다.
 - (Bash 2.03버전 이후 버전) C style의 for loop 사용가능
    = 아래 3 문장은 모두 같은 의미이다 =
    for a in 1 2 3 4 5 6 7 8 9 10
    for a in $(seq 1 10)
    for ((a=0;a<10;a++))
 - 범위가 하나의 string이라면 IFS를 이용해 구분가능.
 - [in list]를 생략한다면 기본값은 “$@”

 Syntax Example
for name [in list]
do
   statements that can use
  $name.
done
IFS=:
for 
dir in $PATH
do
   ls –ld $dir
done



3. while
 - 어떤 조건이 참인 동안 코드를 반복
 Syntax Example
while condition
do
    
statements...
done
count=0
while [ $count -lt 10 ]
do
    echo $count
     count=$(($count+1))
done
4. until
 - 어떤 조건이 참일 때까지 (거짓인 동안) 반복
 Syntax Example
until condition
do
statements...
done
count=0
until [ 
$count -gt 10 ]
do
   
echo $count
    count=$(($count+1))
done


5. case
 - C의 switch구문과 비슷한 역할을 함
 - C의 switch 구문은 정수나 문자 같은 단순한 값을 검사하는 반면, Bash의 case는
 - 와일드카드 (?, *) 사용이 허락되는 어떤 패턴을 놓고 문자열을 검사
 Syntax Example
case expression in
  pattern1 )
    statements ;;
  pattern2 )
    statements ;;
  ...
esac
case $1 in
   *.jpg )
      echo jpg: Graphic
   File!! ;;
   *.txt )
      echo txt: Text File!! ;;
   * )
      echo Unknown File!! ;;
esac

6. select
 - Korn Shell, Bash Shell에만 존재
 - 간단한 메뉴를 제공
 - select의 루프 내에서는 자동적으로 루프를 벗어날 수 없기 때문에 반드시 break문등을
   사용해서 루프를 벗어나야 한다.
 - prompt string을 변경하기 위해서는 쉘변수 PS3를 이용.
 Syntax Example
select name [in list];
do
   statements that can use   $name...
...
done
#!/bin/bash
echo "다음 중 scripting language 에 속하는 것은?"
PS3=”숫자를 선택하세요 : “
select var in "Bash script" "C/C++ "Java” "Exit"
do
if [ "$var" = "Bash script" ]
then
   echo "정답입니다."
   break
elif [ "$var" = "Exit" ]
then
   echo "종료합니다."
   exit 1
else
   echo "$var 을 선택하셨습니다. 오답입니다."
   echo "다음 중 scripting language 에 속하는 것은?"
fi
cf.) read : 직접 사용자 입력을 받음.

#!/bin/bash
echo “이름을 입력해주세요 : “
read NAME
echo "Hi $NAME!"



6. Quoting                                 

* Single Quotes
    - Single Quotes 안의 모든 특수 문자를 보통 문자로 취급
    - Single Quotes 안에 또 다른 Single Quote를 쓸 수 없음

$ echo 2 * 3 > 5 is a valid inequality. ………(X)
$ echo '2 * 3 > 5 is a valid inequality.’ ………(O)
$ echo Hatter's tea party ………(X)
$ echo Hatter\'s tea party ………(O)
$ echo 'Hatter'\''s tea party' ………(O)

* Double Quotes
 - Weak Single Quotes
 - Single Quotes와 달리 $, `(backquote), ₩(이스케이프)는 처리
 - 문자열 안에서 다음을 참조할 때 사용
    - 변수확장 : $varname
    - 명령 : $(command) 혹은 `command` -single quote가 아니라 backquote임.
    - 산술연산구문 : $((1+1))

$ echo "2 * 3 > 5 is a valid inequality."
$ echo "Hatter\'s tea party"

$ echo "path=$PATH"
$ echo "current directory=$(pwd)"
$ echo "current directory=`pwd`"
$ echo "1 + 1 = $((1+1))"


7. 함수                                      

 - 다른 프로그램 언어에서와 같이 코드를 재사용하거나 모듈화를 위해 함수를 사용
 - 함수는 함수가 불리기 전에 정의되어야 한다. (C처럼 함수를 미리 선언하는 방법은 없음)
 - parameter : 함수는 자신에게 넘어온 인자를 $1, $2와 같이 인자의 위치로 참조한다.
 - return value : 함수는 반드시 정수값만 리턴할 수 있다. 이 리턴값은 $? 변수에 저장된다.

#!/bin/bash

add()
{

  result=$(($1+$2))

  return $result
}
a=3
b=5
add $a $b
sum=$?

echo "$a + $b = $sum"


8. Backup script code                  

#!/bin/bash
if [ -z $1 ]||[ -z $2 ]; then
  echo usage: $0 source_dir target_dir
else
  SRC_DIR=$1
  DST_DIR=$2
  OF=output.$(date +%y%m%d%H%M%S).tar.gz
  if [ -d $DST_DIR ]; then
    tar -cvzf $DST_DIR/$OF $SRC_DIR
  else
   mkdir $DST_DIR
   tar -cvzf $DST_DIR/$OF $SRC_DIR
  fi
fi


9. 참고하기 

http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/index.html

여리글 참고 하시면 엄청 고수가 될수 있어요.



링크 : 
http://www.abyul.com/zbxe/xl_ShareTemplate/73092
http://www.abyul.com/zbxe/xl_ShareTemplate


근래 문서 보고를 많이 하다보니 엑셀 사용 빈도가 많아졌고

좀더 편하게 사용해 보고자 검색을 하다보니 얻어 걸렸다.. ^^

엑셀 함수 모음이다.

짱임... 
도망가려하면 더욱더 다가오는 느낌이다.
이런 감옥안에 날 넣어둔 내 스스로가 불쌍하다.. ㅋㅋ
쓸데없는 고민이라는 것을 알면서도 참..
이젠 날 놓아 줄테니
니 마음이 향하는 곳으로 가라~

쇼생크탈출을 기억하며~~
프리프리~ 

ㅋㅋㅋ


ps : 회사 윗분이 쇼생크탈출을 좋아하신다네요. ㅎㅎ
 
즐겁게 살려고 다시 해볼란다.. 

자세한 목표는 12월내에 세우고 1월부터 진행하자.. (늦나?? ㅡㅡa)


링크 : http://englishcube.net/e_pds_view.php?uid=29&div=5

링크 : http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=103&oid=296&aid=0000011054


감사 나누고 항상 약속을 지켜라...

마음의 소리를 들어주는 사람이 되라...

진심으로 감사하고 그 감사를 나누어라...

작은 친절을 배풀면 큰 보답이 돌아온다...

항상 약속을 지켜라...



꼭 너에게만은 그럴께~ ^___^
그렬려고 해도 안된다.. 
심성이 그래서일까?
보이면 무너지고 보이면 무너지고.. 
하지만 조금만 더 지나면 괜찮아질 것이라 기대해본다~ ^__^


오늘 감사한 일
 - 라면 선물 너무 고마워요.
 - 팀원들과 100%는 아니지만 함께 하려고 했어요. ^^
 - 회의중에 마인드 컨트롤이 어느정도 되었어요.


오늘 반성할 일
 - 상대방의 말 자르기를 했어요. 
 - 다들 고생하는데 약간 게으름을 피웠어요.
 - 오늘할 일을 내일로 미뤘어요. (이건 좀.. 반성할 일은 아닌듯.)

 
일을 할때 정리하고 하는 습관을 들여야겠다..

어느선까지가 마무리인지.. 하면 할수록 늘어나는 일거리들..

그러니 마무리가 안되는듯...


정리하자.. 정리!!!

 

Be Happy~~  





response time 순으로 정렬할때 사용했음. (에이전트 스트링 및 컬럼 차이가 있어 '"' 로 구분해야했음 valxpkt01 기준)
cut -d "\"" -f1,2,7 a > b
cat b |sort -k 10 -nr |more

cut -d "\"" -f1,2,3,7 a > c
cat c |sort -k 11 -nr |more

참고
https://jupiny.com/2017/07/09/linux-command-4-cut-sort-uniq-wc/



netstat 결과 상태값에 따른 카운팅
netstat -n|awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
[atlxnginx1]/k3> netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 21
ESTABLISHED 25
LISTEN 14


IP 기준으로 특정컬럼 수치가 999999 이상인 것들에 대한 카운트
cat access_log.20190910 | awk '{print $1, $15}' | awk '{if($2 > 999999) {arr[$1]+=1}} END{for (i in arr) {print i "\t" ":" arr[i]}}'


확장자가 .php 또는 .cgi 에 대해 요청 카운트 횟수 추출
tail -1000 access_log | awk -F '?' '/\.(cgi|php)/{split($1,ret," "); print ret[1],ret[7];}' | sort | uniq -c |sort -nr 


참고 : http://o5o5o.dyndns.org/wp/?p=740
         awk –F ‘ ‘ ‘{split($1,ip,”.”); printf(“%03d.%03d.%03d.%03d %s\n”, ip[1], ip[2], ip[3], ip[4], $2);}’



가끔 아파치 로그를 이용하여

시분초 단위로 어느정도 처리하는지 숫자를 뽑는 경우가 있는데

그때 사용하는  awk 입니다.

더 이쁘게 만들어 주시면 감사하겠습니다.

 

#####################################################################

 

초단위 리퀘스트

awk -F ' ' '{ gsub(/\[/,"");split($4,ret,":");printf ("%s%02d%02d%02d\n",ret[1],ret[2],ret[3],ret[4])}' <access_log file> | uniq -c

 

분단위 리퀘스트

awk -F ' ' '{ gsub(/\[/,"");split($4,ret,":");printf ("%s%02d%02d\n",ret[1],ret[2],ret[3])}'  <access_log file>  | uniq -c

 

시간단위 리퀘스트

awk -F ' ' '{ gsub(/\[/,"");split($4,ret,":");printf ("%s%02d\n",ret[1],ret[2])}' <access_log file>  | uniq -c

 

 

주의

conf 상 log 포맷이 "%h %l %u %t \"%r\" %>s %b" 이어야 합니다. 아니면 수정해야됨..

(112.156.90.240 - - [26/Jan/2012:15:51:17 +0900] "GET  /favorite_api.php?szBjId=hummer9427&szWork=SELECTBOX&szScriptVar=oFavoriteList HTTP/1.1" 200 2119)

 

 

 

예제

 awk -F ' ' '{ gsub(/\[/,"");split($4,ret,":");printf ("%s%02d\n",ret[1],ret[2])}' /logs/access_log| uniq -c

 

 

결과

    476 26/Jan/20121554

    455 26/Jan/20121555

    456 26/Jan/20121556

    461 26/Jan/20121557

    452 26/Jan/20121558

    451 26/Jan/20121559

    437 26/Jan/20121600

    445 26/Jan/20121601

    425 26/Jan/20121602

    423 26/Jan/20121603

    440 26/Jan/20121604

    432 26/Jan/20121605

    456 26/Jan/20121606

    528 26/Jan/20121607

    492 26/Jan/20121608

    551 26/Jan/20121609

    654 26/Jan/20121610

    491 26/Jan/20121611 


사이즈가 200k 이상인 것을 요청수로 오더링

cat access_log.afreeca | awk -F '?' '{split($1,ret," "); print ret[1],ret[7];}' | sort | uniq -c |sort -nr 
cat access_log.afreeca | awk '/ 200 /{ print $7,$9,$10;}' | more | sort | uniq -c |sort -nr 

cat a | awk '$3>200000; {split($1,ret,"?");print $3, "http://www.afreec.com/"ret[1], $2}' > b



awk single quote 출력

awk -v q=\' 'BEGIN{print q}'
awk 'BEGIN{print "\x27"}'
awk 'BEGIN{print "\047"}'



  Linux 서버를 운영하다 보면, 아파치 또는 톰캣의 Access로그를 이용하여, 접속 통계를 추출하고자 할 때가 있다.

특정 IP가 유난히 많이 유입된다거나, 시간대별로 유입 건수 또는 파라미터 값 별로 유입되는 건 수

HTTP 결과 코드별로 에러가 몇건인지 등을 파악하기 위해서다.

  분석을 위해서는 grep명령과 awk명령이 사용된다. 물론, 통계 추출 후 데이터 정렬을 위해 sort명령도 사용된다.


 아래와 같은 형식으로 쓰여진 아파치 Access로그 파일 access.log가 있다고 하자.

access.log 파일을 분석하여 통계를 추출해 보자.

221.62.138.27 - - [16/Mar/2017:13:18:22 +0900] "POST /app/service.jsp?COMMAND=12&SVC_TYPE=2&SONG_ID=8045575 HTTP/1.1" 200 601 59213 "-" "-"

1. IP별로 접속 건 수 구하기

cat access.log | awk '{print $1}' | awk '{ arr[$1]+=1} END{ for (i in arr) {print i "\t" ":" arr[i]}}'


위와 같이 명령어를 입력하면, 출력되는 결과는 다음과 같다.

221.62.138.72  : 543

223.35.12.46    : 24

223.64.210.156 : 2341


명령을 분석하자면,

cat으로 access.log 파일을 열고, awk로 IP데이터인 첫번째 필드를 추출한 뒤,

첫번째 필드가 같은 데이터면 +1 하여 count하고 그 결과를 for loop 돌면서

"필드값 [탭] : count된 값" 형태로 출력하는 명령이다.



2. 시간대별 접속 건 수 구하기

cat access.log | awk '{print $4}' | awk -F":" '{ arr[$2]+=1} END{ for (i in arr) {print i "\t" ":" arr[i]}}' | sort


위와 같이 명령어를 입력하면, 출력되는 결과는 다음과 같다.

01 : 8431

01 : 3921

02 : 2314

03 : 1341

...

22 : 71932

23 : 24932


명령을 분석하자면, 위와 같은 방식으로

cat으로 access.log 파일을 열고, awk로 시간 데이터인 4번째 필드를 추출하 뒤, 추출한 필드에서 다시 ":"를 구분자로 2번째 필드(시간)를 추출하여 해당 필드가 같은 데이터면 +1 하여 count하고 그 결과를 for loop 돌면서 "필드값 [탭] : count된 값" 형태로 출력하고 이를 첫번째 필드 기준으로 정렬하는 명령이다.



3. HTTP 결과 코드별 접속 건 수 구하기

cat access.log | awk '{print $9}' | awk '{ arr[$1]+=1} END{ for (i in arr) {print i "\t" ":" arr[i]}}' | sort


위와 같이 명령어를 입력하면, 출력되는 결과는 다음과 같다.

200 : 2434314

401 : 921

404 : 8314

500 : 15


명령을 분석하자면, 같은 방식으로

cat으로 access.log 파일을 열고, awk로 HTTP 결과 코드인 9번째 필드를  추출하여 해당 필드가 같은 데이터면 +1 하여 count하고 그 결과를 for loop 돌면서 "필드값 [탭] : count된 값" 형태로 출력하고 이를 첫번째 필드 기준으로 정렬하는 명령이다.



여기에서, 여러 파일의 파일 예를 들어, 2월 한달간의 access.log 파일들 등에서 통계를 구하고자 한다던가 특정 값이 포함된 접속 이력만을 대상으로 하고자 할 경우에는

grep명령으로 대상이 되는 라인만을 추출한 뒤, 파이프 라인으로 위의 명령어를 응용하여 구성하면 된다.


이상 끝.



커맨드라인 레퍼런스
http://technet.microsoft.com/en-us/library/bb490890.aspx


참고 URL 
http://blog.naver.com/faceuptoit?Redirect=Log&logNo=100004435796
http://blog.naver.com/rudalson?Redirect=Log&logNo=100058439178


NT 의 호스트 이름을 가져오는 로직은 찾기가 힘들더군요.
다른 분들이 찾느라고 고생하실까봐 샘플코드도 같이 기록합니다.


REM 특정 커맨드를 반복적으로 실행하는 스크립트
@echo on

SET EXE_CNT=90

echo %EXE_CNT%

FOR /L %%z IN (1,1,%EXE_CNT%) DO (
START c:\_TEST\AutoAgent.exe
c:\_TEST\sleep -m 1000
)

echo 'End of process'

exit


REM 호스트 이름으로 로그 파일 저장
@echo on

REM 호스트네임 설정
FOR /F "usebackq" %%i IN (`hostname`) DO SET HOST=%%i

SET DIRNAME="p2p Server Performance"

move /Y C:\_TEST\agent.log "Z:\BMT LOG\%HOST%.log"
echo complete move!
pause
 

REM 특정내용 파일 저장(테스트환경)
SET _HOSTFILE=C:\Windows\System32\drivers\etc\hosts
SET _HOSTFILE_BAK=C:\Windows\System32\drivers\etc\hosts.bak

echo ################################################################
echo 테스트환경으로 전환하시겠습니까?(종료:CTRL+C, 전환:ENTER)
echo ################################################################
pause
 
copy /Y %_HOSTFILE% %_HOSTFILE_BAK%
echo #######  테스트 환경  ############ > %_HOSTFILE%
echo 0.0.0.0    domain.com >> %_HOSTFILE%
echo #######  테스트 환경  ############ >> %_HOSTFILE%

echo #############################################
echo 테스트환경으로 변경되었습니다. 
echo 브라우저를 다시 띄우시고 테스트하시면 됩니다.
echo 엔터를 누르시면 원복됩니다.
echo #############################################
pause

copy /Y %_HOSTFILE_BAK% %_HOSTFILE% 
echo #############################################
echo 테스트하시느라 수고 많으셨습니다.
echo #############################################
pause



@echo off

SET exeCnt=11
echo %exeCnt%


FOR /L %%z IN (1,1,%exeCnt%) DO (
    echo %%z
    REM START c:\_TEST\AutoAgent.exe
    REM c:\_TEST\sleep -m 1000
)

echo 'End of process'

REM exit


 


arr[n][n] : 'n' 개의 줄수, 'n' 개의 컬럼을 가진 배열임
int (ptr*)[10] : '*' 개의 줄수, '10' 개의 컬럼을 가진 배열임. 
                   다시 말하면 줄수는 제한이 없고 컬럼만 '10' 개로 제한됨


sizeof 에 대한 정리

int arr[10];
int *ptr;

ptr = arr;


printf("arr byte size is %d\n", sizeof(arr));
printf("ptr byte size is %d\n", sizeof(ptr));


// 상기 코드의 결과
// arr byte size is 40
// ptr byte size id 4


포인터는 포인터일뿐.. ^^
출처 : http://www.mimul.com/pebble/default/2008/06/14/1213445280000.html

1. JFreeChart
 - 지원 기능 : pie charts (2D and 3D), bar charts (horizontal and vertical, regular and stacked), line charts, scatter plots, time series charts, high-low-open-close charts, candlestick plots, Gantt charts, combined plots, thermometers
 - 지원 언어 : Java 지원
 - 예제 사이트 : http://www.jfree.org/jfreechart/samples.html

2. Cewolf
 - 지원 기능 : Line [XY], [3D] Pie, [3D] Horizonal Bar, [3D] Vertical [XY] Bar, [3D] Stacked Vertical Bar, Area [XY], Scatter Plot, Candlestick, High Low, Gantt, Overlaid, Combined
 - 지원 언어 : Java 지원
 - 예제 사이트 : http://cewolf.sourceforge.net/new/demo.html

3. PHP/SWF Charts
 - 지원 기능 : Line, Column, Stacked column,  Floating column, 3D column, Stacked 3D column, Parallel 3D column, Pie, 3D Pie, Bar, Stacked bar,  Floating bar, Area, Stacked area, Candlestick, Scatter, Polar, Mixed, Composite, Joined
 - 지원 언어 : PHP + Flash (swf), SP, CFML, Perl언어에서도 지원
 - 예제 사이트 : http://www.maani.us/charts/index.php?menu=Gallery

4. Open Flash Chart(플래시 기반)
 - 지원 기능 : Data Lines, Bar Chart, 3D Bar Chart, Glass Bar Chart, Fade Bar Chart, Sketch Bars, Area Chart, Bars + Lines, Pie Chart, Pie Chart Links, Scatter Chart, Mixed Scatter, High Low Close, Candle
 - 지원 언어 : 플래시 기반으로 Java, Perl, Python, Ruby and Rails, php, .net 지원
 - 예제 사이트 : http://teethgrinder.co.uk/open-flash-chart/index.php

5. AmCharts(플래시 기반)
 -  지원 기능 : Animated or static, Value axis, Linear, logarithmic value axis scale, bullets, Clickable columns/bars, Gradient fills, plot area Axis
 - 지원 언어 :  플래시 기반으로 PHP, .NET, Java, Ruby on Rails, Perl, ColdFusion 언어 지원
 - 예제 사이트 : http://www.amcharts.com/column

6. FusionCharts(플래시 기반)
 - 지원 기능 : 다양한 기능 지원함
 - 지원 언어 : cross-browser, cross-platform flash chart로서 ASP.NET, ASP, PHP, JSP, ColdFusion, Ruby on Rails, simple HTML pages 지원
 - 예제 사이트 : http://www.fusioncharts.com/Free/Gallery.asp?gMenuItemId=3

7. Flot
 - 지원 기능 : Line 기능 등 기본적인 기능에 줌 등 다양한 옵션을 줄 수 있음
 - 지원 언어 : Javascript + jQuery로 구성되어 있어 웹기반 언어는 모두 지원, Cross Browser지원
 - 예제 사이트 : http://people.iola.dk/olau/flot/examples/

8. Flotr
 - 지원 기능 : Basic Axis, Basic Bar, Basic Legend, Mouse Track, Mouse Zoom, JSON Data
 - 지원 언어 : Javascript + Prototype 1.6.0.2로 구성되어 있어 웹기반 언어는 모두 지원, Cross Browser지원
 - 예제 사이트 : http://www.solutoire.com/experiments/flotr/examples/basic.html

9. PlotKit
 - 지원 기능 : HTML Canvas: Safari 2+, Opera 9+, Firefox 1.5+, IE 6 (in emulated mode), SVG: Opera 9+, Firefox 1.5+ (see note), IE6 with Adobe SVG
 - 지원 언어 : Javascript + MochiKit 1.3로 구성되어 있어 웹기반 언어는 모두 지원, Cross Browser지원
 - 예제 사이트 : http://media.liquidx.net/js/plotkit-tests/svg-sweet.html

10. Emprise JavaScript Charts
 - 지원 기능 : Interactive, Axis Scaling, Auto Zooming, Scrolling, Stackable Series, Multiple Chart Types, Ajax-Driven Data, Compatible, Plugin Free, Customizable
 - 지원 언어 : Javascript로 구현되어 있고 Cross Browser지원
 - 예제 사이트 : http://www.ejschart.com/examples/index.php

11. Visifire
 - 지원 기능 : 실버 라이트 설치되면 다양한 차트 기능이 지원됨
 - 지원 언어 : Silverlight Charts
 - 예제 사이트 : http://www.visifire.com/silverlight_charts_gallery.php

정리 감사합니다~ 
중장기 전략에 포함된 내용이라 조사를 좀 해봤습니다.
종류라도 좀 알아야져.. ^^


BigTable - Google 사용
Dynamo - Amazone 사용
Cassandra - Facebook, twitter 사용
CouchDB - Apache Software Foundation 사용
MongoDB - Foursaquare 사용


NOSQL 의 정의
 대용량을 읽고 쓰는 서비스들에서는 RDB 의 제약 요소들로 인해 속도와 확장성이 문제가 된다. 
 이를 쉽게 해결하기 위해 만들어낸 "빠른 속도"와 "무제한에 가까운 확장성"을 가진 새로운 DB 란다.

관련 링크 : http://nosql-database.org

출처 : http://blog.naver.com/yanpalan?Redirect=Log&logNo=90099817906
ERD 플러그인

근래 본것중 짱!!! (cray 버림)

http://ermaster.sourceforge.net/




똑같은 문제를 두고 사람마다 접근 방식이 다르다..
그 문제에 접근할때 난 긍정적으로 접근하고 싶다. 왜냐면 난 문제를 즐기길 원하니까..
아래는 마음을 따뜻하게 만드는 말이다..
문제에 접근할때마다 주문을 외우듯 되뇌어야겠다.




"당신이 있어 참 다행입니다."
"지금 이 시간이 내겐 무척이나 소중합니다."
"당신과 함께한다는 사실이 내겐 큰 축복입니다."
 


차후 디자인 컨셉이나 UI 설계등에 도움이 될듯해서 스크랩함..

The Import, 디자인 영감/디자인 블로그
 

The Import, 디자인 영감/디자인 블로그

 

35 Inspirational And Beautiful Red Color Website, 35가지 영감을 주는 아름다운 빨간색 웹사이트

 

Drawing Inspiration from Browser Makers' Own Sites, 브라우저 제작사의 웹사이트에서의 그리기 영감

 

Personal Websites: 25 Examples for Your Design Inspiration, 개인 웹사이트: 당신에게 영감을 줄 25가지 예제

 

영감을 주는 20가지 플래시 사이트

 

집 꾸미기, 제품에 과한 디자인

 

디자인, 비주얼 아트 영감



출처: http://hornil.com/kr/design/DesignSites.html

 

+ Recent posts