글쓴이 글 목록: ppillip

ppillip에 대하여

박승현입니다. 프로그래머 입니다.

angularjs-188x200

ng-repeat sort by object , possible with key

ng-repeat 에서 key,value object 의 경우 sort 가 안댐. array 만됨
아래 링크 횽아가 sort 가 되게 orderObjectBy 라는 필터를 만들음..

http://justinklemm.com/angularjs-filter-ordering-objects-ngrepeat/

근데 이거는 key 로 소트가안댐.. 댕장 그래서 쪼금 아주쪼금 수정함 (빨간색)

app.filter('orderObjectBy', function() {
    return function(items, field, reverse) {
        var filtered = [];
        angular.forEach(items, function(item , key) {
            item["key"] = key;
            filtered.push(item);
        });
        filtered.sort(function (a, b) {
            if(a[field] > b[field]) return 1;
            if(a[field] < b[field]) return -1;
            return 0;
        });
        if(reverse) filtered.reverse();
        return filtered;
    };
});

사용법

<tr ng-repeat="v in project.loadStandard | orderObjectBy:'key':true">

 

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious
Icon_MongoDB_by_xkneo

몽고디비 “stored function” 퀵하게 보기

스토어드 프로시져를 보기!  json의 특성을 조금 알면 아주 잘됨.

/*저장*/
db.system.js.save({_id:"addNumbers", value:function(x, y){ return x + y; }});

/*호출*/
1. 안추천 하고 싶은 방법
db.eval('addNumbers(17, 25)')

2. 추천 하는 방법
db.system.js.find({_id:"addNumbers"}).value(3,4)
이렇게 호출하면 쵝오 잘됨

역시 mongodb 는 json 을 착실히 저장함.
그렇다면 당연히 함수도? Yes!

그럼 테스트~! (a,b 바꿔가면서 insert 서너번 해주면 눈에 잘띔)

db.test.insert({
a : 1
,b : 2
,addAll : function(){ return (this.a + this.b); }
,queryTest : function() { return db.test.find(); }
});

1. db.test.findOne().addAll()    /*현재 doc의 속성들을 접근 해서 결과를 리턴*/
2. db.test.findOne().queryTest() /*프로시저를 doc에 내맘대로 저장됨*/

자세히 들여다 보면 addAll 이란 code type 의 속성을 가진 필드가 저장이됨.

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious
Rlogo

R 과 SQL 비교 퀵하게 보기

R의 dataframe 하고 SQL 의 select 를 비교해 보았습니다.

아래는 시간없으신 분들을 위하여 결론만

비교

1. SQL Query
select 컬럼4,컬럼5 from dfrm where 컬럼1 > 20 and 컬럼2 > 30

2. R – 1
subset (dfrm, Ozone>31 & Temp>90 , select=Solar.R )

3. R – 2
dfrm [ dfrm$Ozone>31 & dfrm$Temp>90 ,c(“Solar.R”)]

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious
ice_logo-5dcea9e47b780ff52f75c3c3304d54827f56211e[2]

maria backup script 를 node로

ice_logo-5dcea9e47b780ff52f75c3c3304d54827f56211e[2]

 

마리아디비도 mysqldump 명령으로 한줄이면 끝날것을 node 로 뻥튀기.

node 로 maria 디비에 접근한걸 의미로 둠

순서는대강 이렇슴.

1. 마리아에서 table 목록을 가져온다.

2. 현재 날짜로 folder 를 만든다.

3. folder 에 table 별로 화일을 만든다.

민망한 소스는 공개 ^^;

https://github.com/ppillip/nodejs_maria_dump

이어지는 포스팅은 maria 2 mongodb 소스를 적는걸로

 

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious

신조어 생성 – 계정 샤딩

신조어 – 계정 샤딩 

미션 – UI 의 모든 이벤트를 로그로 쌓는다. 공짜로.

방법 : 계정샤딩(ID Sharding) 

준비물  : 구글 계정 10개, 노드 서비스 하나 호스팅 (appfog정도면 훌륭)

1. 준비한 구글계정 10개로 mongohq 계정 10개 판다.

2. 로그를 저장할 프로그램에서 id 를 atoz로 10개 계정으로 나눠서 저장하는 코드를 짠다.
-> 어짜피 json 은 join 이런거 후져서 다때려박으니(embedded pattern) 문제없음.

3. 생성할때는 10개의 서버가 있는셈 : 겁나 빠르겠지?
조회할때는 10개큐에 계정정보를 동시에 날려서 promise (jQuery promise같은거 구현해야겠다) 받은뒤, 리턴받은 10개를 reduce 구현 하면 됨. 하둡이 따로없어!!

p.s : 몽고 샤딩:계정샤딩 = 파티션테이블:프로그램코딩

이랄까?

와 진짜 좋은생각~!!! 잠이 확깬다~!! 계정 샤딩 만쉐~!!

일단 ID 샤딩 구현하고 , 그담번에는 계정 레플리카도 생각해봐야지… 씐난다~!

 

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious

mysql에서 mariadb 로 migration 퀵하게 보기

ice_logo-5dcea9e47b780ff52f75c3c3304d54827f56211e[2]

mariadb (version:10.0.3 win 64bit) 를 다운 받는다.

1. 기존 mysql 폴더를 mysql_org 로 변경한다. 

2. mariadb 폴더를 mysql 로 변경한다. (반칙?)

3. mysql_org/data 폴더를 mysql(현재마리아)/data 랑 바꺼치기한다.

4. mysql_org/bin 에 있는 my.ini 파일을 mysql(현재마리아)/bin 에 있는 my.ini 랑 바꺼치기.

그리고 mysqld 를 실행해봄. 모든 클라이언트가 잘되는듯 싶더니… 허걱 특정쿼리가

“Cannot load from mysql.proc. The table is probably corrupted”  에러~!!!

5. bin 디렉터리를 뒤져서 mysql_upgrade 파일을 클릭함 (이건 먼가 마이그하는듯)

끝남

이모든 절차를 “에이 되겠지” 하고 검색도 안해봄. 그랬더니 됨.

양덕의 “상식에의한 업그레이드” 만쉐~!

 

<부록>

나는야 개발자. 프로그램도 테스트 해봐야지!

1. php – 최신판으로 기존 소스 돌려봐도 다 잘됨. 아파치 설정 바꾼거 없음.

2. java – 기존 mysql 라이브러리로 사용시 서버프로세스랑 통신 오류(마리아 서버 데몬이 죽어 버림)

결국

2.1 mariadb-java-client-1.1.3.jar 를 lib 에 추가 하고

2.2 driver class 도 mysql에서 mariadb로 변경(아래참조) -> 아주 잘됨

datasource.jdbc.driver=org.mariadb.jdbc.Driver

datasource.jdbc.url=jdbc:mariadb://localhost:3306/HB_BUILDING?autoReconnect=true

쿼리실행해보고 느낀건 확실히 빨라짐 누가 20%라고 하던데 innodb 기준으로

주관적 편파 판정 하건데 10배는 빠른듯. 근데 mongodb랑 비교해보니 몽고가 더빠름.

결론 : 오라클마이에스큐엘싫어 차라리 마리아가 열배나아 근데 몽고가 더좋아

 

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious

mongodb sparce index 퀵하게 보기

* mongodb의 index 특징 몇가지
-. array에 index 가능, 각각의 원소가 _id 와 함께 indexing 이됨
-. multi key index가능 : 단!!! 2개 key 이상 모두 배열로 insert 안됨!!
-. unique index 는 key가 없이 insert 될경우 key:null 로 간주하여 dupkey 에러 발생!!

* sparce index 
-> unique index 생성시 key 값이 없어도 insert 가 가능하게함

key로써 a,b,c 가 존재 하는 document 에서
unique와 함께 c로 index 를 걸었을경우
db.test.ensureIndex({c:1},{unique:true, sparse:true}) /* ensureIndex 함수이용 */

a:1 , b:2 , c:3  -> indexing 대상
a:1 , b:3           -> 제외
a:2 , b:3           -> 제외

스파스 인덱스는 인덱스 선언된 key 가 없는 doc의 경우 인덱싱에서 제외됨
-> 인덱스를 통해 접근할경우 key 가 없으면 쿼리 대상에서 제외된다는 이야기
-> 인덱스를 건 시점에서 쿼리 결과가 달라질수 있음
ex) sort 를 할경우 대상에서 제외되버림
-> 초반설계시에 key (컬럼)이 없이 insert 된넘들 ($exists 구문없이) 무시하기에 딱좋겠다.
<퀵하게 보기 끝>

테스트 해보자

테스트 데이터 넣고

> var t = db.test
> db.t.insert({a:1,b:2,c:3})
> db.t.insert({a:4,b:6})
> db.t.insert({a:9,b:11})
> t.find()
{ "_id" : ObjectId("514d541dc19f83d03d5b7706"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("514d543cc19f83d03d5b7707"), "a" : 4, "b" : 6 }
{ "_id" : ObjectId("514d5441c19f83d03d5b7708"), "a" : 9, "b" : 11 }

이빨빠진 “c” key 로 index 걸어보기

> t.ensureIndex({c:1},{unique:true})
E11000 duplicate key error index: ppillip.test.$c_1  dup key: { : null }

-> 역시에러

그럼 이제 unique + sparse index 시도

> db.test.ensureIndex({c:1},{unique:true, sparse:true})

find 로 전체검색 해보면

> t.find()
{ "_id" : ObjectId("514d541dc19f83d03d5b7706"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("514d543cc19f83d03d5b7707"), "a" : 4, "b" : 6 }
{ "_id" : ObjectId("514d5441c19f83d03d5b7708"), "a" : 9, "b" : 11 }

잘나오네

그럼 index 타게 sort 해보면

> t.find().sort({c:1})
{ "_id" : ObjectId("514d541dc19f83d03d5b7706"), "a" : 1, "b" : 2, "c" : 3 }

역시 “c” 없는 document는 무시당했어!! $exists 구문은 안써도 되겠다!

내생각
RDB : (db설계/수정 <-> 개발/수정) * n
noSql : (개발/수정 -> db 반영) * n
“간단하고 빠르게 개발자 위주로 가기는 nosql이 유리하다”는 내생각을 다시한번 확인함

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious

mysql 관리툴(무료) 설치 퀵하게 보기

1. 오라클에서 Oracle SQL Developer 를 다운받는다. [여기]

2. JDBC Driver for MySQL (Connector/J) 를 다운로드 받는다 [여기]

3. SQL Developer 에서 설정한다. 아래그림처럼
sdmct
도구 > 환경설정 > 데이터베이스 > 타사 JDBC 드라이버 > jar 경로 선택

4. 확인누르고 접속해보면 mysql 탭이 보임

5. 인증샷. 헤더에 Oracle SQL Developer 라고 써있지만. 이건 mysql 임

result

모 회사 트라이얼 버전을 쓰다가 갑자기 가격정책이 바뀌어서..
걍 공짜 써야겟음. mysql/oracle에 OSX 도 되니 이게더 나아..

번들 만쉐~!

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious