태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'구글'에 해당되는 글 2건

  1. 2010/02/11 사용소감2: Google protocol buffer
  2. 2009/10/20 구글 RSS Reader - 닌자? (4)

사용소감2: Google protocol buffer

Tech 2010/02/11 14:20
빠르다길래 믿고 그냥 가져다가 쓰고 있었는데, 테스트 코드를 돌릴 때는 모르다가 진짜 데이터( ... ) 들이 들어가기 시작하니 시스템 퍼포먼스가 말도 안되도록 떨어졌다. 여기서 한번 피 토해주고 (쿨럭) ... 아, 빠르다는건 <XML에 비해서>인 듯 하다. 이거 머야 대체! 하면서 프로파일링을 해봤는데, ... 응?

SerializeToString, ParseFromString

이녀석들이 나란히 1등, 2등?

패인은 repeated 에 있었다. 몇 가지 부가 정보와 함께 수십만(최대 백만 정도)개의 32bit integer 들을 빠르게 주고받는 시스템인데, 이걸 repeated uint32 id_list; 같은 식으로 만들어 사용했다. 이 녀석을 Serialize, Parse 하는 부분이 대박이었던 것. 테스트 할 때에는 적당히 수백개 정도만 넣어봐서 차이를 잘 못느꼈는데, 이게 커지니까 ... ... -_-a

아마 타입검사라던가, ... 때문이 아닐까 한다.

dgoon@katy:~/works/pb2$ cat test.proto 
message Test {
    repeated uint32 id_list = 1;
};
dgoon@katy:~/works/pb2$ protoc --python_out=. test.proto 
dgoon@katy:~/works/pb2$ cat test.py
import cPickle
import random
from array import array
from test_pb2 import Test

def elapsed(stmt):
    import time
    st = time.time()
    exec(stmt)
    return time.time() - st

test_arr = [r for r in xrange(100000)]

msg_pb2 = Test()
msg_pb2.id_list.extend(test_arr)
arr = array('I', test_arr)
print('pb2 ser: %5.4f' % elapsed('msg_pb2.SerializeToString()'))
print('pb2 ser-par: %5.4f' % elapsed('Test().ParseFromString(msg_pb2.SerializeToString())'))
print('pickle ser: %5.4f' % elapsed('cPickle.dumps(test_arr)'))
print('pickle ser-par: %5.4f' % elapsed('cPickle.loads(cPickle.dumps(test_arr))'))
print('array ser: %5.4f' % elapsed('arr.tostring()'))
print('array ser-par: %5.4f' % elapsed('array("I").fromstring(arr.tostring())'))
dgoon@katy:~/works/pb2$ python test.py
pb2 ser: 0.3849
pb2 ser-par: 0.9537
pickle ser: 0.0400
pickle ser-par: 0.0823
array ser: 0.0004
array ser-par: 0.0006
dgoon@katy:~/works/pb2$ 

그래서 결국에는, array.tostring() 을 사용해서 뽑은 문자열을 프로토콜 버퍼에 bytes 타입으로 붙여서 보낸 다음 (with packed_ prefix) 사용하는 시점에 array.fromstring()푸는 형태로 고쳤다. 일단 이렇게 속도는 잡았는데 ... ... 크흑, 귀찮아. 프로토콜 버퍼가 생성한 객체를 확장해서 써야 할 것 같다.

저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License

'Tech' 카테고리의 다른 글

Bit count with CUDA (T_T)  (2) 2010/05/16
iterator invalidation  (4) 2010/05/10
사용소감2: Google protocol buffer  (0) 2010/02/11
사용소감: Google protocol buffer  (4) 2010/02/04
TDD: 켄트백아저씨가 쓴 책이지?  (2) 2009/12/29
git/git-svn on working machine  (0) 2009/12/17
Trackback 0 : Comment 0

구글 RSS Reader - 닌자?

Daily life 2009/10/20 10:20
<p*****t> 구글 리더에서 ↑, ↑, ↓, ↓, ←, →, ←, →, b, a를 입력하면 그림처럼 왼쪽 탐색창에 닌자가 나타난다.

응?

해봤다.


BEFORE

BEFORE




AFTER

AFTER



... ... ...

구독 리스트를 보면 지는거임
저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License

'Daily life' 카테고리의 다른 글

영화 - 아바타: 어디까지 갈까?  (2) 2009/12/23
이제 나도 윈7 유저  (2) 2009/12/02
구글 RSS Reader - 닌자?  (4) 2009/10/20
심리테스트래  (4) 2009/10/19
CBTL 작설  (0) 2009/10/18
(홍보) Enswer.me 에서 블로그 간담회를 합니다!  (0) 2009/10/14
Trackback 0 : Comments 4