추천장소 2013. 11. 22. 12:04
반응형

단둘이 얼굴 보면서, 알콩 달콩 하면서 달달한 추억만들기 좋은 장소입니다.

기본적으로 단둘이 밀폐(?)된 공간에 있다는 것이 서로에게 집중하게 해주네요. 거기에 좋은 음식이 있다는 것은 ... 이야기 끝이죠.

한번 꼭 가보세요.

아실란: http://www.asilah.co.kr/

 

 

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2013. 10. 11. 13:01
반응형

이런 버그는 치명적인것 같다. hot fix를 하더라도, 기능을 수동으로 active를 해야 한다니..처음 인것 같다.

crash dump파일이 엉뚱한 곳을 찝고 있다니...

http://support.microsoft.com/kb/976038/en-us

http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=8700&ref=8700

일단 급하게 모든 프로그램을 patch해야 겠다.

반응형
posted by choiwonwoo
:
Unity3D 2013. 8. 20. 03:07
반응형

유니티 Layer 개념을 이해하기 좋은 글이 있어 공유 합니다.

http://www.devkorea.co.kr/reference/Documentation/Components/Layers.html

반응형
posted by choiwonwoo
:
Unity3D 2013. 8. 20. 02:58
반응형

고등학교때 물리에서 배운 왼손 좌표계를 생각해보자.

기준은 Z축은 plane과 나와의 거리로 생각하면 이해가 쉽다.

 

 

반응형
posted by choiwonwoo
:
Unity3D 2013. 8. 20. 02:50
반응형

1) Unity 실행 아이콘: 마우스 오른쪽 click

2) 속성 ==> 바로가기 ==> 대상에서 아래와 같이 "-pojectPath"를 추가 후 적용

3) 아래와 같이 2개 이상의 창을 띄울수 있음

 

 

반응형
posted by choiwonwoo
:
Unity3D 2013. 7. 13. 19:32
반응형

유니티에 2D Toolkit package를 import하고, atlas를 생성 후, sprite를 만들려고 하면, 아래와 같은 에러가 발생한다.

이런 저런, 해법을 찾다가, 처음 설치부터 다시 해보았다.

유니티 최신 버젼으로 설치

 

 

 

현재 소유하고 있는 2D Toolkit package 버젼 확인

 

 

다시 Sprite 생성 재 시도, 하지만 다시 똑 같은 에러 발생.

버젼 문제인가?

http://unikronsoftware.com/2dtoolkit/forum/index.php?topic=1310.0

반응형
posted by choiwonwoo
:
반응형

방법은 여러가지가 있겠지만, 대용량 분산과 QoS를 합리적 로직으로 풀어낸 부분이 너무나 마음에 드는 구조이고, service architecture는 개인적인 경험으로 봤을 때, 인증/권한 architecture중의 하나인 PKI Infrastructure와 유사해 보인다.

 Google Kenya and the Google Global Cache

Google is well known for snatching up top-level talent, this holds true in Kenya as well. ICT groundbreaker Joe Mucheru heads up the Kenya office, and he’s surrounded by a team of smart young technologists. I had the chance to meet Isis Nyong’o (Strategic Parter Development Manager) while getting ready for Barcamp Nairobi, and then Chris Kiagiri (Tech Lead) and Mark de Blois (Geographic Supervisor) last week before I left.

Google Kenya is Different

I found out a couple of interesting points that make the Google Kenya office even more interesting than before. It turns out that there are 3 offices in Africa; Kenya, South Africa and Egypt. However, the office in Kenya is neither a sales office nor an engineering office, which makes it unique globally. In fact, it is the only “deployment office” worldwide. This means that the Kenya office can be used as a launch point for new ideas and is the central focal point for Google’s Africa strategy.

It came down to a choice between Senegal and Kenya – one French-speaking and one English-speaking, and both with a fairly well developed technology sector. Senegal had a direct transatlantic cable, but Kenya had the right people available. At Google it seems, finding the right personnel usually trumps about everything else.

Speaking of which, they’re still looking for the right people, not only in Senegal, but also in Nigeria, Ghana, Rwanda, Tanzania and Uganda. Unfortunately, Google HR seems to be geographically challenged, as jobs in Egypt are somehow not in Africa…

Dealing with a Slow Internet in Africa

The Google Global Cache (GGC) was announced in May at the African Network Operators Group (AFNOG) conference in Morocco. In lieu of data centers in Africa, Google has created a strategy that is housed at major exchange points to serve Africa at the edge of Google’s network. Internal tests suggested at least 20% performance increase in high latency links, like East Africa.


[The top cycle (1,2,3 & 4) is how things normally work. The bottom cycle (5,6 &7) is where the changes are.]

It works like this. Once anyone within that exchange point’s sphere visits a webpage, the information is cached and it becomes much faster for anyone else visiting that website to access it. Pre-fetching of data also that improves performance over time, even for dynamic content.

This is an interesting strategy. It’s a win for ISP’s (less international traffic means lower costs), a win for end users (pages load faster), and a win for Google (faster, better usage).

The pilot in Africa was turned on in Kenya just 2 weeks ago. There are 17 international exchange points (IXP) in 15 African nations, so with a positive pilot in Kenya, this could soon be seen continent-wide.

Keep your ears open, there are hints of even more interesting stuff coming out of the Google Kenya office.

LG U+ 가입자의 경우 LG U+ Google Cache로 부터 어떤 흐름으로 동영상이 다운로드 되는지 설명드리도록 하겠습니다. 먼저 LG U+ Google Cache내에 사용자가 요청한 동영상이 있는 경우(Cache Hit)의 흐름을 알아보고, 이후 동영상이 없는 경우(Cache Miss)의 흐름에 대해서 살펴 보도록 하겠습니다.


LG U+ 회선을 통한 YouTube 다운로드


(1) LG U+ Google Cache에 동영상이 있는 경우 (Cache Hit)

LG U+ 망 내부에(LG U+ IDC;Internet Data Center에) Google Cache가 들어 있다는 점 외에는 지난 시간의 KT 그림과 동일한 구성입니다.


1.LG U+ 가입자가 브라우져에서 www.youtube.com을 입력하고, 단말에서 LG U+ DNS 서버로 DNS Query를 보냅니다. 반드시 LG U+ DNS일 필요는 없습니다. 어떤 DNS 서버이든 상관 없습니다.
2.그리고 LG U+ DNS는 YouTube 서버 주소 74.125.71.136을 가입자 단말로 전달합니다.
3.가입자는 Avatar 동영상을 클릭합니다.
4.이제 HTTP GET을 통해 Avatar 동영상 요청 메시지가 YouTube 서버로 전달됩니다.
5.이 대목이 아주 중요하니다! HTTP GET 메시지를 받은 YouTube 서버는 단말의 IP 주소 대역을 확인합니다. 이 경우 동영상을 요청한 가입자의 IP 주소 대역이 LG U+입니다. 그러면 YouTube 서버는 LG U+내에 위치한 Google Cache를 선택하여
6.그 hostname(o-o.preferred.lgupluswireline-gmp1.v9.lscache5.c.youtube.com)을 가입자 단말로 전달합니다.
7.가입자 단말은 hostname에 대한 DNS Query를 하고 (역시 DNS 서버가 LG U+ 일 필요는 없음)
8.그 응답으로 IP 주소 61.36.166.12를 받아 옵니다. 이 주소는 LG U+ 내의 Google Cache 주소입니다.
9.이제 단말에서 LG U+ Google Cache로 Avatar 동영상을 요청하고
10.여기서 또 중요! LG U+ Google Cache는 다시 HTTP GET을 보낸 단말의 IP 주소 대역을 확인합니다. 만약 이 주소 대역이 LG U+ 가입자 대역이 아니면 HTTP 302 Found 메시지를 단말로 보내어 미국에 있는 Google Cache로 붙도록 합니다(HTTP Redirect). 즉, 내 가입자 아니면 안받아 주겠다는 거죠. 위 경우는 LG U+ 가입자이므로 밑에 11번 단계로 넘어가게 됩니다.
11.이제 LG U+ Google Cache는 가입자가 요청한 동영상(Avatar)이 나한테 있는지(storage에 있는지) 확인합니다. 다행히 있습니다! (Cache Hit)
12.따라서 LG U+ Google Cache는 동영상을 가입자 단말로 전달합니다. RTT 10ms 이하입니다. 무지 빠르게 가입자 단말로 동영상이 전달됩니다

(2) LG U+ Google Cache에 동영상이 없는 경우 (Cache Miss)

이번 그림에서는 설명을 단순화 하기 위해 DNS flow는 제외 시켰습니다.

 

(2) LG U+ Google Cache에 동영상이 없는 경우 (Cache Miss)

이번 그림에서는 설명을 단순화 하기 위해 DNS flow는 제외 시켰습니다.


1.LG U+ 가입자가 YouTube 웹페이지에서 Avatar 동영상을 클릭합니다.
2.가입자 단말은 HTTP Get 메시지를 YouTube 서버로 보내고
3.YouTube 서버는 단말의 IP 주소를 확인하고, LG U+ 가입자 이므로
4.LG U+ Google Cache hostname(o-o.preferred.lgupluswireline-gmp1.v9.lscache5.c.youtube.com)을 단말로 전달합니다.
5.가입자 단말은 이제 LG U+ Google Cache로 Avatar 동영상을 요청하고,
6.LG U+ Google Cache가 단말 IP 주소를 확인하였더니 자사 가입자입니다.
7.이제 가입자가 요청한 Avatar 동영상의 캐싱 여부를 확인합니다. 그런데 그 동영상이 없습니다! (Cache Miss)
8.이제부터 시험을 통해 확인된 내용과 일부 추측을 기반으로 설명을 드리겠습니다. LG U+ Google Cache는 Avatar 동영상이 미국내 어느 Google Cache에 들어 있는지 알길이 없을 것 같습니다. 따라서 미리 configuration되어 있는 상위 Google Cache 서버로 HTTP Redirection을 시킵니다. 시험으로 확인하 결과 아래와 같이 hostname의 숫자값이 동일한 매핑 규칙을 발견할 수 있었습니다. 즉
•LG U+ Google Cache "o-o.preferred.lgupluswireline-gmp1.v9.lscache5.c.youtube.com"의 상위 Cache 서버는 -> 미국에 "v9.nonxt5.c.youtube.com"
•LG U+ Google Cache "o-o.preferred.lgupluswireline-gmp1.v12.lscache6.c.youtube.com"의 상위 Cache 서버는 -> 미국에 "v12.nonxt6.c.youtube.com"
9.가입자 단말은 LG U+ Google Cache가 알려준 v9.nonxt5.c.youtube.com으로 Avatar 동영상을 요청하고,
10.이 서버에도 해당 동영상이 없으면 다시 redirector.c.youtube.com으로 HTTP Redirection을 합니다. 추측컨데 redirector.c.youtube.com이 최상위에 위치한 서버로써 모든 동영상의 위치(어느 Cache 서버에 그 동영상이 있는지)를 관리하는 듯 합니다.
11.가입자 단말은 redirector.c.youtube.com으로 Avatar 동영상을 요청하고,
12.드디어 Avatar 동영상이 위치해 있는 Google Cache 서버의 hostname(o-o.preferred.lax04t01.v1.lscache6.c.youtube.com)을 받아 옵니다.
13.가입자 단말은 그 hostname으로 Avatar 동영상을 요청하고,
14.미국에 있는 Google Cache로 부터 동영상을 다운로드 받습니다.


여기서 그럼 LG U+ Google Cache 서버는 언제 Cache Fill을 하나? 라는 의문이 생기는데요. Cache Miss가 난 이후 다시 동일 동영상을 요청해 봤지만 여전히 미국에 있는 Google Cache로부터 다운로드 받는 것으로 보아, 각 Google Cache에는 "동일 컨텐츠를 몇번 이상 요청하면 Cache Fill한다"라는 식의 정책이 들어 있는 것으로 추측이 됩니다.

결언

위와 같이 미국에 있는 YouTube 서버 및 LG U+에 도입된 Google Cache는 HTTP GET 메시지을 보낸 단말 IP 주소 대역을 확인하여 어느 지역의 Google Cache를 통해 다운로드 받게 할지 결정합니다. 즉, KT 가입자는 KT IP 주소 대역을 사용하므로 DNS만 LG U+로 변경한다 해서 LG U+ Google Cache에 접속할 수는 없습니다. (그렇다고 KT 가입자가 단말의 IP 주소를 LG U+ 대역으로 바꾸면 라우팅이 안되어 아예 인터넷을 사용할 수 없게 되구요.)
이 말은 곧, LG U+ 가입자가 KT DNS를 사용해도 아무 문제 없이 LG U+ Google Cache를 통해 동영상을 다운로드 받게 됩니다.


마지막으로 한가지 더 말씀드리자면...
저희 회사가 LG U+ 기업용 회선을 사용하고 있습니다. 회사에서 확인을 해 보니, LG U+ 기업용 회선 가입자의 경우 LG U+ Google Cache로 부터 동영상 다운로드가 안되고, 그래도 RTT가 좀 짧은(100ms 정도) 홍콩에 위치한 Google Cache(o-o.preferred.hkg05s01.v20.lscache7.c.youtube.com)로 부터 동영상을 다운로드 받음을 확인하였습니다.
즉, 미국에 있는 YouTube 서버는
     1) LG U+ 홈 가입자 IP 대역이면 LG U+ Google Cache를 선정해 주고
     2) LG U+ 기업용 가입자 IP 대역이면 홍콩에 위치한 Google Cache를 선정
     3) 나머지 경우(예. KT IP 대역이면) 미국에 위치한 Google Cache를 선정

[소스:http://whiteafrican.com/2008/07/04/google-kenya-and-the-google-global-cache/}

[소스:http://www.netmanias.com/bbs/view.php?id=blog&no=301'

반응형
posted by choiwonwoo
:
반응형

요즘 각 개발 회사마다 Global Service를 고민하면서 서비스를 기획 및 개발하고 있다. 이 때마다, 항상 고민이 되는 부분은 분산(서비스/데이타) 과 QoS 부분이다. 분산을 높이면, QoS가 낮아지는 현상이 발생하게 된다.(반대 경우도 마찬가지..) 그래서, 아이디어를 찾다가, Google과 Netflix는 어떻게 되어 있나 궁금해서 아래의 자료를 발견했는데, 매우 유용하다고 생각되어 기재합니다.

[OTT Cache(Google, Netflix)와 통신사업자 Transparent Cache - I]

Sandvine사의 Report에 따르면 2012년 하반기 북미 전체 인터넷 트래픽의 33%가 Netflix이고 15%가 YouTube로 이 두 회사의 트래픽만 합쳐도 전체의 48%로 거의 절반에 이른다. 통신사업자의 IP 네트워크는 인터넷이 아니라 두 회사의 비디오 전달망이 된 것이다.
이 두 회사의 이용자수는 계속 증가하고 있고 또한 갈수록 비디오 품질이 고화질화되어 트래픽량 (즉, 전달 비용)이 지속적으로 증가하고 있다. 통신사업자와 OTT는 각각 서로 다른 비용 최소화 전략을 취하고 있는 데 본 블로그에서는 먼저 OTT의 전략들을 살펴보기로 하자.


Google의 CDN 전략

Google은 미국과 유럽, 아시아에 13개(Google이 공식적으로 확인해준 데이터센터만 13개)의 자체 데이터 센터와 자체 CDN을 통해 YouTube 트래픽을 전세계에 전달한다. 이 소수의 데이터센터만으로는 급증하는 YouTube 트래픽을 감당하기 어렵고 또한  Google 데이터센터가 구축되어 있지 않는 나라에서는 YouTube 비디오 시청시 잦은 버퍼링이 발생하는 문제가 발생한다.
이를 해결하기 위해 Google은 2008년경부터 Google Global Cache (GGC)라는 자체 에지 서버를 통신사업자에게 무상으로 제공해주고 있다. Google은 GGC 서버 (H/W and S/W)를 통신사업자의 IDC에 설치해주고 서버 운영도 Google이 한다(원격 관리). 통신사업자는 IDC내 랙공간과 전력, GE 포트를 역시 돈을 받지 않고 Google에 제공해준다.
통신사업자는 외부망에서 유입되어오는 YouTube 트래픽이 대폭 줄어드므로 Transit 비용을 절감할 수 있고 자사 인터넷 가입자들의 "왜 다른 ISP는 YouTube가 빠른 데 우리만 느리냐?"라는 불만을 잠재울 수 있어 좋다.Google은 YouTube 이용자의 QoE를 향상시키고 보다 고화질의 비디오 서비스를 IDC 요금 걱정없이 제공할 수 있어 좋다. 서로 이득이 있으므로 서로 돈을 내지 않는다. 북미와 유럽의 대부분의 통신사업자들이 GGC를 도입하였고 우리나라도 작년 2월에 SK, LG U+, KINX에 도입되었다.
YouTube라는 기가막힌 컨텐츠를 가진 Google은 이렇게 자기 돈 안들이고 전세계 통신사업자의 망내까지 자기 CDN을 확장시키고 있다.  


 

Netflix의 CDN 전략

유료 가입자수가 3천만이 넘고 북미 인터넷 트래픽의 33%를 발생시키고 있는 Netflix도 Google과 동일한 전략을 취하고 있다. 하나씩 살펴보자. Netflix는 자사의 비디오를 이용자에게 전달해주기 위해 Akamai와 Limelight, Level3로부터 CDN 서비스를 받고 있고 이들에게 CDN 이용료를 지불하고 있다.
Netflix는 CDN 사업자에게 지출하는 CDN 요금이 아깝고 또 지금보다 고화질인 Full HD급의 비디오 서비스를 제공하여 보다 많은 가입자를 유치하고 싶은 데 이럴려면 CDN 사업자들에게 지금보다 더 많은 CDN 이용료를 내야 한다.
그런데 옆집을 보니 Google이 GGC를 통신사업자에게 돈 안 내고 밀어 넣고 있고 있네 ! 어 그러면 우리도 컨텐츠의 킹이니, Google처럼 하자- 하여 2012년 6월에 나온 게 Netflix Cache이다.

Netflix Cache도 GGC와 마찬가지로 OTT인 Netflix가 자체 개발한 서버로 통신사업자에게 무상으로 제공해주고 운영도 Netflix가 한다. 통신사업자는 IDC내 랙공간과 전력, GE 포트를 역시 돈을 받지 않고 Netflix에 제공해준다.
현재 미국의 Cablevision, Google Fiber, Clearwire, 캐나다의 Telus, 영국의 BT, Virgin Media, 덴마크의 TDC 그리고 중남미의 Telmex와 GVT에 Netflix Cache가 도입되어 있다(Netflix 서비스 국가). 특히 유럽의 경우는  모든 Netflix 트래픽의 글로벌 CDN이 아닌 Netflix Cache를 통해 이용자에게 전달된다.
Netlfix는 올해 1월 Full HD 화질 서비스(1920x1080, 5~7Mbps)와 3D 비디오 서비스(12Mbps)를 개시했다. Netflix 가입자는 추가 요금없이 고화질 서비스를 이용할 수 있다.  재미있는 것은 이 고화질 서비스가 Netflix Cache가 도입된 통신사업자의 가입자에게만 제공된다는 점이다.
통신사업자의 Netflix Cache 도입을 촉진시키려는 (그럼으로써 CDN 요금을 절감시키고 통신사업자에게 IDC 요금도 안내면서 고화질 서비스를 제공하려는) 의도이다.

 이 서비스가 출시되자 Time Warner Cable은 Netflix Cache가 도입되지 않은 통신사업자의 가입자에게도 동일하게 Full HD와 3D 서비스를 제공해야 한다며 불만을 터트리고 있다.
그 동안은 통신사업자의 망중립성에 대한 논쟁이 활발했는 데 꺼꾸로 OTT가 통신사업자별로 컨텐츠를 차별적으로 제공하면 안되지 않느냐는 컨텐츠 중립성 이슈가 나온 것이다.
칼자루가 통신사업자에서 OTT로 넘어간...

하여튼 Netflix도 Google과 마찬가지로 자기 돈 안들이고 세계 각국의 통신사업자의 망내까지 자기 CDN을 확장시키고 있다.
대표적인 OTT인 YouTube와 Netflix가 자신들의 막강한 컨텐츠, 이용자 수를 무기로 자기 Cache를 각국의 통신사업자망내에 진입시키고 있다. 한편 걱정스러운 것은 OTT의 트래픽을 통신사업자망내에 캐싱하여 네트워크 비용을 줄이고 신규 수익원을 만들려고 생겨난 통신사업자 CDN과 Transparent Cache의 시장이 축소될 수 있다는 점이다.
통신사업자 CDN과 Transparent Cache는 국내외 벤더들이 개발하여 통신사업자에게 공급함으로써 벤더들에게 매출 발생의 희망이 있고 또 통신사업자도 망내 CDN을 구축하여 OTT로부터 CDN 이용료를 받을 수 있지만 YouTube와 Netflix가 자사의 Cache를 통신사업자망에 밀어넣으면 OTT를 빼고는 아무도 돈 버는자는 없다.


 






[소스: http://www.netmanias.com/bbs/view.php?id=blog&no=367]

 

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2013. 7. 1. 01:15
반응형

프러덕트에 적절한 라이브러리 찾다가, 참신한(?) 자료가 내용을 퍼왔습니다.

 

C++에서 Json을 사용할 일이 생기면서 C++에서 사용 가능한 Json Parser를 조사해 봤습니다.

조사결과 다음과 같은 파서가 존재했으며 간단히 특징을 기술해 보고 테스트 결과를 공유하고자 합니다.

 

조사 대상

라이브러리명 언어 기타
jsoncpp (강추) C++ 큰 무리 없이 사용 가능
jansson C

오래되고 안정적임.

단 C 언어라 코딩하기 귀찮음.

단, C언어로 개발해야 한다면 jansson을 쓰는 것이 제일 좋음.

json spirit C++ Boost Spirit library 사용. header only로 설치가 된다던데, 설치 포기.
MongoDB의 json parser C++

mongodb C++ driver에 내장됨. Mongo::fromjson()

mongodb C++ driver에 있으므로 따로 설치할 필요가 없으나, 사용하기는 좀 어려웠음.

UniversalContainer C++ 원래 목적은 PHP 등 스크립트 언어의 자료 구조를 지원하는 용도이나, json으로 encode, decode 가능.
설치 후 하는데 고생을 좀 했는데, 테스트 시 seg. fault가 나서 테스트 포기

 

각 라이브러리별 특징을 조사하면 다음과 같습니다.

 

jsoncpp

  • http://jsoncpp.sourceforge.net/
  • 큰 단점없이 사용 가능.
  • 단, library 빌드 시 -O2 가 안 켜져 있어서 직접 켜줘야 속도가 빠름. 안 그러면 PHP보다 느림.
    • library 소스에서 SConstruct 파일을 열어서 CCFLAGS = "-Wall"에 -O2를 추가하거나 scons로 --opt=-O2 주기.
  • key 순서가 알파벳 순서로 바뀌어 출력됨.
    {
        "k2":"xxx",
        "k1":"yyy"
      }

    의 문서 경우, json 문서를 탐색할 때 항상 k1이 먼저 접근됨.

  • key 순서 문제의 경우, http://sourceforge.net/tracker/?func=detail&atid=758829&aid=3014601&group_id=144446 를 참고하여 소스를 직접 바꾸면 된다고 하는데 아직 실험적인 방식이라 시도해 보진 못함.
  • UTF-8 문서를 읽는데 문제는 없으나, 출력 시 utf8 문자를 \uxxxx 형태로 출력하는 것은 안 됨. (읽을 때는 가능)

 

 

 

jansson

  • http://www.digip.org/jansson/
  • 만든지 오래되고 사용하는 곳도 많은 듯.
  • 단, C 언어라서 코딩하기가 귀찮음.
  • C언어로 개발할 때는 jansson을 사용하는게 제일 좋을 듯.
  • utf8 fully support
  • json object간에 reference count를 수동으로 기록할 수 있고, 메모리 관리를 개발자가 직접할 수 있음.
  • 그러나 이를 관리하기 위한 코딩이 좀 수고스러울 듯.

json spirit

  • http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx
  • Boost Spirit library를 이용하여 만든 JSON Parser
  • header only로 설치 가능하다고 함.
  • utf8 지원
  • 본인은 library 설치가 잘 안 되고 특별한 장점을 찾기 못해서 더 이상 조사 안 함.

MongoDB의 JSON Parser

  • http://api.mongodb.org/cplusplus/2.0.2/namespacemongo.html#a4f542be0d0f9bad2d8cb32c3436026c2
  • mongodb C++ driver를 다운 받으면, Mongo::fromjson() method.
  • mongodb로 프로젝트를 하는 경우, BSONObj를 다룰 줄 알아야 하므로 json parser로 적당할 수도.
  • 단, 64MB 이상의 경우 parsing 하다가 에러 발생.
    • mongo/bson/util/builder.h 파일을 열어서 BSONObjMaxUserSize, BufferMaxSize의 값을 늘리면 해결 가능함.
  • json 파싱 시간은 느리지만, 메모리 사용량은 다른 것보다 적음. (Bson 형태이므로 압축 효과가 있어서 그럴 듯??)
  • JSON 문서가 항상 object로 시작하고 key가 있어야 함. 이건 좀 불편함.
    [{...}] <= object로 시작하지 않아서 안 됨.
      {"temp":[{...}]} 로 변환해야 함.
  • key에 _id가 항상 삽입됨....

UniversalContainer

  • http://greatpanic.com/progdocs/libuc.html
  • 원래 목적은 자료 구조를 PHP, Perl 처럼 쉽게 접근하기 위한 목적임.
  • 자료 구조를 JSON으로 serialize, de-serialize 가능함.
  • FlexLexer.h 파일 문제 때문에 컴파일이 안 되는데 인터넷 찾으면 설치는 가능함.
  • 어렵사리 설치를 했으나, 테스트 해 보면 seg. fault가 많이 발생.
  • 더 이상 테스트 포기
  • 복잡한 자료구조를 담고 사용하는데 편리해 보였는데 테스트 조차 못해서 아쉬움이 큼.
  • 그런데 jsoncpp로 복잡한 자료 구조를 담고 사용하는데 편해서 다행임.

성능 테스트

평가 결과는 각자 환경마다 다를 수 있으니 너무 맹신하진 마세요.

평가 대상

총 5개의 Library 중, 테스트 가능한 다음의 2개 + PHP가 테스트 대상임.

  • jsoncpp
  • janson
  • Mongo::fromjson
  • PHP

평가 환경

  • 입력 파일
    • 파일 사이즈 : 250MB
    • 2차원 array 형.
      [
        {....} <= depth 확장 없음. 총 190만개의 element가 있음.
        ...
        ...
        {....}
      ]
  • 평가 항목
    • parsing 시간
    • parsing 시 메모리 사용량
    • 탐색 시간 (각 element의 특정 key를 출력)

성능 평가 결과

구분 jsoncpp jansson PHP Mongo::fromjson
parsing 시간 10초 13초 10초 24초
메모리 사용량 1.4GB 1.3GB 2.5GB 800MB
탐색 시간 13.7초 13.8초 13.4초 N/A

결과에 대한 소고

 

반응형
posted by choiwonwoo
:
카테고리 없음 2013. 6. 29. 23:42
반응형

아래의 사이트에 가면, Free version의 NGUI를 구할수 있고, 사용 동영상을 볼수 있다.

http://forum.unity3d.com/threads/114833-NGUI-(Next-Gen-UI)-demo-amp-final-feedback-request

반응형
posted by choiwonwoo
: